Errors

On this page

How the Manage Bet Codes error envelope works

Every Manage Bet Codes API error returns one JSON envelope with code, message, docs, request_id, and details. Every response carries X-Request-ID matching the error request_id: give that ID to support when reporting a problem.

Response 429
{
  "error": {
    "code": "api_quota_exhausted",
    "message": "Monthly API credits are finished. Upgrade or wait for the reset.",
    "docs": "https://managebetcodes.app/docs/errors",
    "request_id": "req_...",
    "details": {"used": 5000, "limit": 5000, "resets_at": "2026-12-01T00:00:00Z"}
  }
}

Which error code means what and when it fires

The Manage Bet Codes API returns one code per failure across auth, quota, validation, booking, and transport faults: 401 invalid_key for bad keys, 403 plan_required when an action requires an API plan, 404 codes for missing rows, 409 codes for conflicts, 422 codes for bad input, 429 codes for exhausted quotas with a Retry-After header, and 502, 503, or 504 for downstream failures.

All public API error codes
HTTPCodeWhen
400invalid_requestMalformed body.
401invalid_keyMissing, unknown, revoked, or rotated key.
403account_blockedThe account is banned.
403plan_requiredThe action requires an API plan (such as async jobs) or a missing entitlement.
403email_unverifiedVerify your email first.
404not_foundNo route matches that path.
405method_not_allowedThat method is not allowed here.
404slip_not_foundNo slip for the code.
404track_not_foundNo track for this key owner.
404job_not_foundNo job for this key owner.
404history_not_foundNo history row for this key owner.
404book_not_foundNo book row for this key owner.
404event_not_foundNo event for this ID.
404market_not_foundNo market for this ID.
404plan_not_foundNo discovery plan for this key.
404webhook_not_foundNo webhook for this key owner.
409idempotency_conflictSame key and idempotency key, different body.
409track_already_existsThis code is already tracked.
409cancel_conflictThis subscription cannot be cancelled here.
409job_not_cancellableThe job is already done.
409key_limit_reachedThe plan's key limit is reached.
409plan_expiredThe discovery plan is older than 10 minutes.
409plan_usedThe plan was already consumed.
422unsupported_bookmakerUnknown alias. details.hint gives a hint.
422invalid_codeThe code shape does not match the bookmaker.
422conversion_failedThe converter returned an error.
422conversion_disabledPolicy block (blocked: true).
422invalid_split_countThe count is outside 2 to 20.
422invalid_mergeFewer than 2 pairs, or more than 30.
422too_many_targetsMore than 6 synchronous targets.
422too_many_codesMore than 20 codes in a job.
422too_many_picksMore than 50 picks.
422too_many_queriesMore than 20 queries.
422no_targetsThe target list is empty.
422games_not_bookableA strict book has unresolved picks.
422odds_changedThe price moved beyond the tolerance.
422book_unsupportedThe bookmaker cannot create a code.
422book_failedThe bookmaker refused the code.
429api_quota_exhaustedAPI plan credits are empty.
429plan_quota_exhaustedRegular plan daily credits are empty.
429search_quota_exhaustedThe daily search cap is reached.
429rate_limitedThe per-key request rate is reached.
502bookmaker_unavailableThe source fetch failed at transport level.
502payment_unavailableThe payment provider did not answer.
503renderer_unavailableThe image renderer is down.
504timeoutThe action exceeded its budget.
500internal_errorUnhandled error.

How to retry a failed call and recover quota

Retry a Manage Bet Codes 429 after the Retry-After delay, and retry 502, 503, and 504 with backoff: the Python and TypeScript SDKs honor Retry-After automatically. Use limits to check plan and rate caps and charge-order to see which credit pool pays.

Related pages

LimitsAuthenticationCharge orderChangelog