Skip to content

Errors

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).

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.