Errors & rate limits

Errors are always JSON, always shaped the same way, regardless of which endpoint produced them.

error shape
{
  "detail": "Invalid API key"
}

IP-level responses

Before an endpoint's own logic runs, every request is checked against a per-IP request limit shared across /download, /stream, and /health.

StatusdetailMeaning
429Too many requestsYou've sent too many requests from this IP in a short window. Back off and retry after a short pause.
403Your IP has been blockedThis IP was temporarily blocked after repeated abusive traffic. It clears on its own after a cooldown period.
404Not foundThe path doesn't correspond to a public endpoint.

Sustained abusive traffic — for example hammering the API without a valid key — can lead to longer or repeated IP blocks. Normal client behavior with reasonable retry/backoff won't come close to these limits.

Key & request errors

Statusdetail
400Type must be audio or video
400Invalid video URL or ID
400Invalid JSON
401API key required
401Invalid API key
403API key is inactive or expired
403API key has expired
403API key is temporarily blocked
403Access denied
429Daily quota exhausted
500Download failed

422 validation errors

If a required query parameter is left out entirely — for example calling /download with no type at all, rather than an empty one — the framework rejects the request before it reaches the API logic, returning a standard 422 Unprocessable Entity with a list of what's missing, rather than the { "detail": "…" } shape above.