Responses
Form endpoints accept POST. GET returns a short HTML explanation and does not create an Inbox event.
JSON
// Delivered
{ "ok": true, "status": "sent", "message": "…", "redirect": "https://…" }
// First submit — confirmation email sent
{ "ok": true, "status": "pending_confirmation", "message": "…", "redirect": "https://…" }
// Error
{
"ok": false,
"status": "error",
"code": "monthly_limit",
"message": "…",
"redirect": null,
"errorRedirect": "https://…"
}redirect is the success URL (your _next or the hosted thank-you page). errorRedirect is present on failures when _postme_error_next is set.
Error codes
invalid_email
The address in /submit/{email} is not a valid inbox.
unknown_token
The Intake ID is not registered.
missing_recipient
No recipient was specified.
origin_blocked
The Intake origin allowlist rejected this site.
no_routing
The Intake has no ready destination.
monthly_limit
This form reached its monthly event quota. HTTP 403. The inbox or account owner is emailed once per month.
captcha_failed
Turnstile verification failed on public /submit. HTTP 400.
rate_limited
Too many requests. HTTP 429.
internal
Unexpected server error.
| code | when |
|---|---|
| invalid_email | The address in /submit/{email} is not a valid inbox. |
| unknown_token | The Intake ID is not registered. |
| missing_recipient | No recipient was specified. |
| origin_blocked | The Intake origin allowlist rejected this site. |
| no_routing | The Intake has no ready destination. |
| monthly_limit | This form reached its monthly event quota. HTTP 403. The inbox or account owner is emailed once per month. |
| captcha_failed | Turnstile verification failed on public /submit. HTTP 400. |
| rate_limited | Too many requests. HTTP 429. |
| internal | Unexpected server error. |
Other errors use HTTP 400. Successful JSON responses use HTTP 200, including pending_confirmation.