cheapkeys

Errors

Every machine-readable error code, its HTTP status, whether it is retryable, and what to do about it.

Every error response is RFC 9457 application/problem+json with a stable code. Switch on code, never on the human title or detail — codes are append-only and never change meaning; the texts may. The type URI of every code resolves to its row on this page.

The problem+json envelope

{
  "type": "https://pay.mmokick.com/developers/errors#rate_limited",
  "title": "Rate limited",
  "status": 429,
  "code": "rate_limited",
  "detail": "Write limit of 120 requests per minute exceeded.",
  "instance": "/api/v1/offers"
}

HTTP 400

codeTitleRetryableWhat it means / what to do
invalid_jsonInvalid JSONnoThe request body is not parseable JSON. Fix the request body.
invalid_cursorInvalid cursornoThe pagination cursor is unknown or expired. Restart the listing without a cursor.
idempotency_key_invalidInvalid idempotency keynoThe `Idempotency-Key` header is empty or longer than 200 characters. Send a valid key.

HTTP 401

codeTitleRetryableWhat it means / what to do
unauthenticatedUnauthenticatednoThe `Authorization` header is missing or malformed. Send `Authorization: Bearer <token>`.
invalid_tokenInvalid tokennoThe token is unknown. Check the token, or create a new one in the portal.
token_revokedToken revokednoThe token was revoked in the portal. Issue a new token.
wrong_environmentWrong environmentnoA `ck_test_` token was used on production, or a `ck_live_` token on sandbox. Use the token that matches the host.

HTTP 403

codeTitleRetryableWhat it means / what to do
insufficient_scopeInsufficient scopenoThe token lacks a scope the endpoint requires. Issue a token with the needed scope.
supplier_suspendedSupplier suspendednoThe supplier account is suspended by staff. Contact support.

HTTP 404

codeTitleRetryableWhat it means / what to do
not_foundNot foundnoNo such resource, or it does not belong to your supplier. Check the id.

HTTP 405

codeTitleRetryableWhat it means / what to do
method_not_allowedMethod not allowednoThe HTTP method is not allowed on this path. Fix the verb.

HTTP 409

codeTitleRetryableWhat it means / what to do
offer_existsOffer already existsnoAn offer already exists for this product. Update the existing offer instead of creating a second.
invalid_stateInvalid statenoThe requested transition is not allowed from the resource's current state. Read the current state first.
stock_mode_mismatchStock mode mismatchnoAn inventory operation was sent to a declared-stock offer, or a stock declaration to an uploaded offer. Use the operation that matches the offer's stock mode.
idempotency_conflictIdempotency conflictnoThe `Idempotency-Key` was reused with a different request body. Use a new key.
idempotency_in_flightIdempotency in flightyesThe original request for this idempotency key is still running. Retry after the `Retry-After` interval.

HTTP 413

codeTitleRetryableWhat it means / what to do
payload_too_largePayload too largenoThe request body exceeds 1 MB. Split the batch into smaller requests.

HTTP 415

codeTitleRetryableWhat it means / what to do
unsupported_media_typeUnsupported media typenoThe `Content-Type` is not `application/json`. Fix the header.

HTTP 422

codeTitleRetryableWhat it means / what to do
validation_failedValidation failednoOne or more fields failed validation (see the `errors` map in the response). Fix the fields.
product_not_sellableProduct not sellablenoThe product is archived or paused for new offers. Pick another product.
fulfilment_unreachableFulfilment endpoint unreachableyesThe inline healthcheck of your fulfilment endpoint failed on activation or URL change. Fix your endpoint, then retry.
inventory_rejectedInventory rejectednoA strict-mode upload contained invalid items (see `rejected_items`). Fix the items or upload in `partial` mode.

HTTP 429

codeTitleRetryableWhat it means / what to do
rate_limitedRate limitedyesA rate limit was hit. Honor the `Retry-After` header and back off. See the rate limits page.

HTTP 500

codeTitleRetryableWhat it means / what to do
internal_errorInternal erroryesAn error on our side, logged under the response `trace_id`. Retry with backoff; report it if it persists.

HTTP 503

codeTitleRetryableWhat it means / what to do
service_unavailableService unavailableyesA maintenance window is in effect (carries `Retry-After`). Retry after the given interval.