Error codes

Every error code the API returns, with its HTTP status, what happened and how to fix it.

Each code below is the error.code of a response, and each error's doc_url links to its section here. The list is closed: the API returns no other code. Error format shows the shape of the body.

invalid_json

Status400

What happened. The body is not valid JSON.

How to fix. Send a JSON object with Content-Type: application/json.

invalid_query

Status400

What happened. The query string cannot be read: a % is not followed by two hex digits.

How to fix. Percent-encode the values, for example with encodeURIComponent.

unknown_parameter

Status400

What happened. A body field or query parameter is not part of this operation; param names it.

How to fix. Remove it. The key sets the mode, so livemode is never a parameter.

invalid_cursor

Status400

What happened. The cursor was not issued for this list, or it was changed.

How to fix. Send next_cursor exactly as you received it, to the same list.

api_key_missing

Status401

What happened. The request has no key.

How to fix. Send Authorization: Bearer and your key.

api_key_invalid

Status401

What happened. The key is unknown, revoked or expired.

How to fix. Use an active key from the console.

no_launches_left

Status402

What happened. The launch needs 1 launch and you have 0. Nothing was spent.

How to fix. Buy launches in the console, then send the same request again.

account_suspended

Status403

What happened. Your account is suspended: it can read but not write.

How to fix. Contact support.

permission_denied

Status403

What happened. A read-only key tried to write, or to read logins.

How to fix. Use a key with full permissions.

test_mode_only

Status403

What happened. A live key called a test helper.

How to fix. Call test helpers with a sbm_test_ key.

not_found

Status404

What happened. Nothing with this id in the key's mode.

How to fix. Check the id, and that the key's mode matches the object's.

route_not_found

Status404

What happened. No operation at this path.

How to fix. Check the path against the reference.

method_not_allowed

Status405

What happened. The path exists, but not with this HTTP method.

How to fix. Use a method the reference lists for the path.

already_launched

Status409

What happened. The project has launched, so it cannot launch again or be deleted; existing holds it.

How to fix. Add directories with POST /projects/{project_id}/listings instead.

project_exists

Status409

What happened. Another project has the same url, contact_email or external_id; param names the field and existing holds that project.

How to fix. Use existing, or change the field.

idempotency_key_in_use

Status409

What happened. A request with this Idempotency-Key is still running.

How to fix. Retry in 1 second with the same key.

gone

Status410

What happened. The report file expired after 7 days, or the path belongs to a retired API.

How to fix. Build a new report, or follow doc_url to the path that replaced it.

cursor_expired

Status410

What happened. The cursor points to events older than 90 days.

How to fix. Read the objects you track again, then read the feed without a cursor.

unsupported_media_type

Status415

What happened. The body is not application/json, or for images not multipart/form-data.

How to fix. Set Content-Type to match the body.

validation_failed

Status422

What happened. Fields are invalid; errors lists each one with its param and code.

How to fix. Fix each field in errors and send the request again.

not_ready

Status422

What happened. The project misses something a launch needs; errors lists it. Nothing was spent.

How to fix. Add what is missing. readiness.missing shows the same list.

nothing_to_submit

Status422

What happened. No directory in the catalog fits the project now. Nothing was spent.

How to fix. Check unlocks and not_matching in the readiness preview, change the project, and try again.

invalid_directories

Status422

What happened. Some directory ids are unknown, outside the catalog, not open to the project or already used; errors lists them. Nothing was spent.

How to fix. Remove them and send the request again.

allowance_exhausted

Status422

What happened. The project has no free allowance: listings use or reserve all of it, or it has not launched.

How to fix. Wait for listings to end; not_accepted and cancelled listings give theirs back.

badge_not_found

Status422

What happened. We read the site and did not find the badge.

How to fix. Run check_command, fix the install, and verify again.

image_unreachable

Status422

What happened. We could not download an image from the URL.

How to fix. Check that the URL is public and returns an image, or upload the file instead.

endpoint_url_invalid

Status422

What happened. The webhook URL is not a public https URL.

How to fix. Use https, a public host, and no user name or password in the URL.

idempotency_key_reused

Status422

What happened. This Idempotency-Key came with a different request before.

How to fix. Use a new key for each new request.

quota_exceeded

Status422

What happened. Before your first purchase, test mode allows 25 projects, 100 new projects a day and 3 webhook endpoints.

How to fix. Delete test data in the console, wait for the next day, or buy launches.

rate_limited

Status429

What happened. Too many requests this hour, or too many calls to an operation with its own limit.

How to fix. Wait the seconds in Retry-After.

internal_error

Status500

What happened. Something failed on our side.

How to fix. Retry with backoff; quote request_id if it repeats.

unavailable

Status503

What happened. The API is down for a short time.

How to fix. Retry after the seconds in Retry-After.