Errors
What this is
Section titled “What this is”Every error response has the same three fields:
{ "code": "quota_exceeded", "message": "The creator plan includes 200 posts this month; 200 are in use.", "hint": "Upgrade the plan at https://app.dropslate.top/settings/billing."}message states the fact from the request or the network verbatim - it’s a description, not something to pattern-match on. hint says what to do about it. code is the stable part - it doesn’t change meaning between releases, so check it instead of the HTTP status alone (several codes share a status: both insufficient_scope and forbidden are 403, but they mean different things).
Cross-cutting codes
Section titled “Cross-cutting codes”These aren’t specific to one route - they can come back from most of the API.
| Code | HTTP | Meaning |
|---|---|---|
unauthenticated |
401 | No valid key or session. |
key_and_session |
401 | Both a key and a session cookie were sent. |
insufficient_scope |
403 | The credential lacks the scope the route needs. |
forbidden |
403 | The signed-in user’s role doesn’t allow this action (see Members & roles). |
not_found |
404 | The resource doesn’t exist - including one that belongs to a different workspace, which answers exactly the same as one that was never created. |
confirm_required |
409 | POST /posts was called without confirm: true (the only REST route this gates - see Retry & cancel for why retry/cancel/reschedule don’t). |
quota_exceeded |
402 | Over the plan’s limit for this resource - see Plans & limits. |
rate_limited |
429 | Too many requests - see Rate limits. |
Route-specific validation codes (caption_too_long, video_too_large, invalid_timezone, publish_in_past, and others) are documented on the route that returns them in the OpenAPI reference, and surface identically in a dropslate_plan_post table.