Errors

Error contract and status mappings

Most route failures use `{ "error": { "code": "...", "message": "..." } }`.

HTTPCodeMeaning
400INVALID_JSONBody is not valid JSON.
400INVALID_PAYLOADPayload is not a scalar JSON object.
400INVALID_FORMATExport format is not json/csv.
401UNAUTHORIZEDNo valid session for authenticated routes.
403FORM_PAUSEDForm is paused and rejects submissions.
403FORM_LIMIT_REACHEDFree-tier accepted submission cap reached; form paused.
404FORM_NOT_FOUNDForm id/slug does not exist (or not owned).
413PAYLOAD_TOO_LARGEPayload exceeds 5KB submission limit.
415UNSUPPORTED_CONTENT_TYPEMissing or unsupported content type.
429RATE_LIMITEDPer-IP submission rate limit exceeded.