What do RevenueDot's API errors mean?
RevenueDot answers errors in the format each API's clients already parse: SDK endpoints and REST v1 send { "code", "message" } with RevenueCat's backend codes, and REST v2 sends an error object with a type. For receipts, the HTTP status class matters most: a 4xx makes the SDK finish the transaction for good, and a 5xx makes it retry. See 4xx or 5xx on a receipt.
SDK and REST v1 error codes#
{
"code": 7103,
"message": "The receipt is not a valid Test Store purchase token."
}| Code | Name | HTTP status | Meaning |
|---|---|---|---|
| 7000 | BAD_REQUEST / INVALID_PLATFORM | 400 | The request is malformed, a secret-key receipt post has no X-Platform app, the store action does not exist for this store, or a web checkout was asked for (RevenueDot takes no web payments). |
| 7101 | STORE_PROBLEM | 400 or 503 | The store refused the request (400), or the store or its credentials could not be used right now (503, retry later). |
| 7102 | RECEIPT_ALREADY_IN_USE | 400 | The purchase belongs to another customer and the project's transfer behaviour is keep or transfer_if_no_active. |
| 7103 | INVALID_RECEIPT | 400 | The receipt, signed transaction or purchase token is not valid, or it belongs to another bundle id or package name. |
| 7110 | INTERNAL | 500 | An unexpected server error. The SDK keeps the transaction and retries. |
| 7220 | INVALID_APP_USER_ID | 400 | The app user id is empty or longer than 100 characters. |
| 7224 | INVALID_AUTH_TOKEN | 401 | A Google Pub/Sub push token is missing or invalid (store notifications only). |
| 7225 | INVALID_API_KEY | 401 or 403 | The API key is unknown (401), or a REST v1 endpoint was called with a public key (403). |
| 7226 | BAD_REQUEST_PARAMS | 400 | A store action got parameters it cannot use, or a required field (such as aad_attribution_token or generate_offers) is missing. |
| 7234 | INVALID_APPLE_SUBSCRIPTION_KEY | 400 or 500 | A StoreKit 1 receipt arrived for an App Store app without an in-app purchase key, or the key is incomplete (500, so the SDK retries once you add the key). A promotional offer cannot be signed without the key (400; the SDK reports invalidAppleSubscriptionKeyError for that offer). |
| 7259 | NOT_FOUND | 404 | The customer, entitlement, offering or subscription does not exist. |
| 7263 | INVALID_SUBSCRIBER_ATTRIBUTES | 400 | Some attributes were not saved; attribute_errors lists them. |
| 7662 | UNSUPPORTED_RECEIPT | 400 | Receipts for this app's store are not supported yet (Amazon, Stripe, Web Billing, Paddle, Roku), including the Android SDK's Amazon receipt lookup. |
| 7849 | INVALID_WEB_REDEMPTION_TOKEN | 400 | A web purchase redemption token is not valid. RevenueDot has no web purchases, so every token answers this; the SDKs return the invalidToken result. |
| 7877 | INVALID_OPERATION_SESSION | 400 | A Web Billing checkout session does not exist. |
REST API v2 error types#
{
"object": "error",
"type": "parameter_error",
"message": "app_id: Required",
"param": "app_id",
"doc_url": "https://revenuedot.app/docs/api/errors#parameter-error",
"retryable": false
}Every v2 error has object: "error", type, message, doc_url (a link to the section below) and retryable. param names the field at fault when there is one.
parameter_error#
A field or query parameter is missing or invalid. param names it. Fix the request; do not retry it unchanged.
resource_already_exists#
An object with this id or lookup key already exists (409). Fetch it instead of creating it.
resource_missing#
The object does not exist in this project (404). Another project's ids also answer 404, so ids cannot be probed.
idempotency_error#
Reserved for RevenueCat compatibility. RevenueDot does not send it today.
rate_limit_error#
Too many requests of one kind: project invites (50 per project per day). The error is retryable; try again later. The dashboard's password reset and email verification endpoints answer 429 with the same type.
authentication_error#
No API key, an unknown key, or no dashboard session (401).
authorization_error#
The key lacks a permission, a public app key was used, or the action needs a dashboard admin (403).
store_error#
The App Store or Google Play refused the action (422) or could not be reached (503, retryable: true).
server_error#
RevenueDot failed (500, retryable: true). Retry with backoff.
resource_locked_error#
Reserved for RevenueCat compatibility. RevenueDot does not send it today.
unprocessable_entity_error#
The request is valid but not possible in this state or for this store (422), for example archiving the current offering or refunding an App Store purchase.
invalid_request#
The body is not valid JSON (400), or a package would get two products of one app with overlapping eligibility (409).
entity_references_archived_entities#
The action would make an archived object current (422). Unarchive it first.