Skip to main content

Errors

All errors follow a consistent JSON shape:

{
"status": 403,
"message": "You have reached your seat limit.",
"error": "SEAT_LIMIT_REACHED"
}

HTTP status codes

StatusMeaning
200OK
201Created
400Bad Request — missing or invalid fields
401Unauthorized — missing or expired auth token
403Forbidden — insufficient role or entitlement
404Not Found
409Conflict — duplicate resource
429Too Many Requests — rate limit exceeded
500Internal Server Error

Machine-readable error codes

CodeStatusDescription
SEAT_LIMIT_REACHED403Organization has hit its user seat cap
FORM_LIMIT_REACHED403Organization has hit its form cap
ROOM_LIMIT_REACHED403Organization has hit its room cap
ALREADY_MEMBER409Email is already a member of the org
INVITATION_PENDING409An invite for this email already exists
INVALID_TOKEN401Auth token is missing, malformed, or expired
INSUFFICIENT_ROLE403Action requires a higher role
ENTITLEMENT_REQUIRED403Feature not available on current plan
NOT_FOUND404Resource does not exist
RATE_LIMITED429Too many requests from this IP

Rate limits

EndpointLimit
POST /api/forms/public/:slug/submit10 requests / 15 min per IP
POST /api/widget/submit10 requests / 15 min per IP
GET /api/public/invitation/:token20 requests / 15 min per IP
POST /api/public/accept-invitation10 requests / 15 min per IP
POST /api/public/waitlist5 requests / hour per IP