Errors
Error contract and status mappings
Most route failures use `{ "error": { "code": "...", "message": "..." } }`.
| HTTP | Code | Meaning |
|---|---|---|
| 400 | INVALID_JSON | Body is not valid JSON. |
| 400 | INVALID_PAYLOAD | Payload is not a scalar JSON object. |
| 400 | INVALID_FORMAT | Export format is not json/csv. |
| 401 | UNAUTHORIZED | No valid session for authenticated routes. |
| 403 | FORM_PAUSED | Form is paused and rejects submissions. |
| 403 | FORM_LIMIT_REACHED | Free-tier accepted submission cap reached; form paused. |
| 404 | FORM_NOT_FOUND | Form id/slug does not exist (or not owned). |
| 413 | PAYLOAD_TOO_LARGE | Payload exceeds 5KB submission limit. |
| 415 | UNSUPPORTED_CONTENT_TYPE | Missing or unsupported content type. |
| 429 | RATE_LIMITED | Per-IP submission rate limit exceeded. |