Documentation
Error Responses
Every error response is JSON with a top-level message, and a 422 additionally includes a field-level errors object.
| Status | Meaning |
|---|---|
| 401 | Missing or invalid X-API-Key |
| 403 | voter_identifier doesn't match the vote being deleted |
| 404 | Resource doesn't exist, or belongs to a different account |
| 409 | Duplicate vote or quiz attempt (same voter_identifier/taker_identifier on the same poll/quiz) |
| 422 | Validation failed — see the errors object in the response body |
| 429 | Rate limit exceeded on vote, quiz-attempt, or form-submission endpoints |
Example: 401 Unauthorized
{ "message": "Invalid or missing API key." }Example: 422 Unprocessable Entity
{
"message": "The title field is required.",
"errors": {
"title": ["The title field is required."]
}
}
A resource that belongs to a different account, or doesn't exist at all, always returns
404 rather than 403 — this way, no information about other accounts' data ever leaks through the response code.