Skip to content

API error codes

Every error from the Flume Partner API is JSON in one envelope, with a stable code. This page lists every code, its HTTP status, what it means and how to fix it.

{
"error": {
"code": "SKU_NOT_IN_SEARCH",
"message": "This product was not a result of that search. Use the search_session_uuid of the search (or the page) that returned it.",
"field": "sku_uuid",
"request_id": "e19b8889-a63b-4000-9dbe-ffd5b9157bd5"
}
}
FieldTypeNotes
codestringStable. Branch on it
messagestringFor a person. It can change
fieldstring or nullThe request field at fault, as a dotted path
request_idstringQuote it to Flume support. Also in the X-Request-Id header
detailsobjectSometimes present, with more about a refusal
CodeStatus
PARTNER_KEY_INVALID401
EMBED_TOKEN_INVALID401
USER_TOKEN_INVALID401
USER_NOT_CONNECTED403
USER_ACCOUNT_CLOSED403
CONNECT_CODE_INVALID401
VERIFICATION_CODE_INVALID422
VERIFICATION_TRIES_EXHAUSTED422
VERIFICATION_CODE_EXPIRED422
VERIFICATION_RATE_LIMITED429
VERIFICATION_EMAIL_FAILED502
VALIDATION_FAILED422
NOT_FOUND404
SESSION_NOT_FOUND404
SKU_NOT_IN_SEARCH422
IMAGE_REQUIRED400
IMAGE_TOO_LARGE413
IMAGE_UNSUPPORTED422
SEARCH_UNAVAILABLE503
BELOW_MINIMUM_ORDER400
NOT_INSTANTLY_QUOTABLE400
QUOTE_NOT_READY422
IDEMPOTENCY_KEY_REQUIRED400
IDEMPOTENCY_KEY_REUSED422
IDEMPOTENCY_IN_PROGRESS409
KEY_LIMIT_REACHED409
KEY_ROTATION_RATE_LIMITED429
LAST_ACTIVE_KEY409
RATE_LIMITED429
DAILY_LIMIT_REACHED429
INTERNAL500
ResponseWhen
403 with no JSON bodyOn live, a request from an unsupported country. See Environments
429 with no JSON body and no Retry-AfterOn live, a network-level limit per IP address. Back off and retry
No responseA network timeout. Retry a write with the same Idempotency-Key
  • Status: 401.
  • Returned by: Every call.
  • Meaning: The partner key is missing, unknown, revoked, expired, or from the other environment. On live, also a platform Flume has not enabled yet.
  • Fix: Check the header name X-Flume-Partner-Key and the environment. Rotate the key if it was revoked.
  • Status: 401.
  • Returned by: Every call.
  • Meaning: You sent an Authorization header and no X-Flume-Partner-Key. Flume read the call as one from its own iframe.
  • Fix: Send the partner key in X-Flume-Partner-Key. Never send it in Authorization.
  • Status: 401.
  • Returned by: Calls that read X-Flume-User-Token.
  • Meaning: The user access token is unknown, revoked, another partner's, or replaced by a later verification. A verification in the iframe replaces it too.
  • Fix: Delete the stored token. Exchange the connect code if you have one. Otherwise verify the user again.
  • Status: 403.
  • Returned by: Calls made for a user.
  • Meaning: No X-Flume-User-Token header was sent.
  • Fix: Send the user's access token. If you hold none, verify the user first.
  • Status: 403 on calls made for a user. 422 with field: email from the verification calls.
  • Returned by: Calls made for a user, and the two verification calls.
  • Meaning: The user's email belongs to a Flume account that Flume has closed.
  • Fix: Do not retry. The user contacts Flume.
  • Status: 401.
  • Returned by: POST /users/exchange-connect-code.
  • Meaning: The connect code is used, older than 120 seconds, unknown, or another partner's.
  • Fix: Exchange each code once, at once. The user verifies again on the next open.
  • Status: 422.
  • Returned by: POST /users/confirm-verification.
  • Meaning: The code is wrong. The message says how many tries are left.
  • Fix: Let the user type it again.
  • Status: 422.
  • Returned by: POST /users/confirm-verification.
  • Meaning: The code was wrong 3 times. It is burned.
  • Fix: Send a new code.
  • Status: 422.
  • Returned by: POST /users/confirm-verification.
  • Meaning: No code is valid: it is older than 10 minutes, already used, or was never sent.
  • Fix: Send a new code.
  • Status: 429, with Retry-After.
  • Returned by: POST /users/trigger-verification.
  • Meaning: A resend came too soon, or the mailbox reached its limit. When you send X-Flume-Client-IP, the limit per IP address applies too.
  • Fix: Wait Retry-After seconds.
  • Status: 502.
  • Returned by: POST /users/trigger-verification.
  • Meaning: The email could not be sent.
  • Fix: Retry with backoff.
  • Status: 422. 400 for an Idempotency-Key over 255 characters. 405 for a wrong HTTP method.
  • Returned by: Every call.
  • Meaning: A field is missing, unknown or has an unusable value. field names it as a dotted path. Some refusals carry the detail in details and leave field empty.
  • Fix: Fix the field. Request bodies are strict: remove fields the API does not list.
  • Status: 404.
  • Returned by: Calls that name a product, quote, key, save or user. Also any unknown path.
  • Meaning: The thing does not exist, or is not this user's. A search id that is not a UUID also returns this code.
  • Fix: Check the id and that it belongs to this user.
  • Status: 404.
  • Returned by: Calls that take search_session_uuid.
  • Meaning: The search does not exist, or is another user's.
  • Fix: Use a search_session_uuid from one of this user's searches.
  • Status: 422.
  • Returned by: POST /request-instant-quote, POST /save-item, POST /deep-links, POST /sales-requests.
  • Meaning: The product was not a result of the search you named.
  • Fix: Use the search_session_uuid of the search, or the page, that returned the product.
  • Status: 400.
  • Returned by: POST /search.
  • Meaning: The request has no image part, or the part is empty.
  • Fix: Send the photo as the image part of multipart/form-data. On a retry, read the file again.
  • Status: 413.
  • Returned by: POST /search.
  • Meaning: The photo is over 6,000,000 bytes.
  • Fix: Resize or compress the photo.
  • Status: 422.
  • Returned by: POST /search.
  • Meaning: The file is not a JPEG, PNG or WebP, or it is over 50 megapixels. Flume reads the bytes, not the file name.
  • Fix: Convert or resize the photo.
  • Status: 503.
  • Returned by: POST /search.
  • Meaning: Search is briefly unavailable. The call is not counted against your limit.
  • Fix: Retry with backoff.
  • Status: 400.
  • Returned by: POST /request-instant-quote.
  • Meaning: The quantity is under the product's minimum order. The message states the minimum.
  • Fix: Raise quantity_sqft. Read minimum_order_sqft on the product's shipping options.
  • Status: 400.
  • Returned by: POST /request-instant-quote.
  • Meaning: Flume's sales team prices this product. There is no instant quote.
  • Fix: Check price_on_request first. File a sales request.
  • Status: 422.
  • Returned by: POST /save-item, POST /deep-links.
  • Meaning: The quote is not READY. On POST /save-item it also covers a quote that expired, is not this user's, lacks the option you named, or is under that option's minimum order.
  • Fix: Request a new quote, then try again.
  • Status: 400.
  • Returned by: POST /request-instant-quote, POST /keys.
  • Meaning: The Idempotency-Key header is missing.
  • Fix: Send one key per user action.
  • Status: 422.
  • Returned by: Calls that take Idempotency-Key.
  • Meaning: The key was already used with a different body.
  • Fix: Use a new key for a new request.
  • Status: 409, usually with Retry-After: 2.
  • Returned by: Calls that take Idempotency-Key.
  • Meaning: The first call with this key is still running.
  • Fix: Wait 2 seconds. Retry with the same key.
  • Status: 409.
  • Returned by: POST /keys.
  • Meaning: You already hold the maximum number of active keys.
  • Fix: Revoke a key you no longer use.
  • Status: 429, with Retry-After: 86400.
  • Returned by: POST /keys.
  • Meaning: You reached the number of keys you can issue in 24 hours. Your current key keeps working.
  • Fix: Wait, then rotate. For a leaked key on live, contact Flume.
  • Status: 409.
  • Returned by: DELETE /keys/{key_id}.
  • Meaning: This is your only working key.
  • Fix: Issue a replacement first.
  • Status: 429, with Retry-After.
  • Returned by: Calls with a daily limit.
  • Meaning: Today's limit for this call is used up. Retry-After is the number of seconds until 00:00 UTC.
  • Fix: Stop that call until then. See Limits.
  • Status: 429, with Retry-After.
  • Returned by: POST /search, POST /request-instant-quote.
  • Meaning: This user's own daily limit of searches or instant quotes is used up. Flume sets this limit per partner account, and it is off by default. details holds kind, limit, reset_at and retry_after_s.
  • Fix: Tell the user when they can try again, from details.reset_at. Other users are not affected. See Limits.
  • Status: 500.
  • Returned by: Every call.
  • Meaning: Something failed on Flume's side.
  • Fix: Retry with backoff. Keep the same Idempotency-Key. Send request_id to Flume if it persists.
  • POST /request-instant-quote returns 200 with status: FAILED when it could not price. Read failure_reason. See Get an instant quote.
  • POST /detect-category returns 200 for every verdict, including error.