Skip to content

Limits

Flume counts some calls per partner per UTC day. Over a limit, the call returns 429 RATE_LIMITED with a Retry-After header. Counters reset at 00:00 UTC.

CallLimit per partner per UTC day
POST /search1,000
POST /request-instant-quote200
POST /users/trigger-verification500
POST /detect-category2,000
POST /deep-links2,000
  • A limit is per partner, not per user. All your users share it.
  • Reads spend nothing: GET /searches/{search_session_uuid}, GET /quotes/{quote_uuid}, GET /products/{sku_uuid}, GET /filters.
  • A search that fails because search is unavailable (503) is not counted.
  • These are defaults. Flume can set a different limit for an environment.
  • Flume can also set a limit per user. See Is there a limit per user?.
HTTP/1.1 429 Too Many Requests
Retry-After: 28412
Content-Type: application/json
{
"error": {
"code": "RATE_LIMITED",
"message": "Today's limit of 1,000 searches is used up. It resets at 00:00 UTC.",
"field": null,
"request_id": "e19b8889-a63b-4000-9dbe-ffd5b9157bd5"
}
}
  • Retry-After is the number of seconds until 00:00 UTC.
  • Flume also protects its total capacity. The message then reads "Flume can't take more searches today." The status and code are the same.
  • There are no X-RateLimit-* headers. Only Retry-After on the 429.
  • No endpoint reports usage or what is left.
  • Count your own calls if you need to warn users before the limit.
  • On live, a network-level limit per IP address can also return a 429 with no JSON body and no Retry-After. Back off and retry.

Not by default. Flume can set a daily limit per user on your partner account, for searches, for instant quotes, or for both. Ask Flume whether your account has one.

CountedWhat counts as one
SearchThe first page of a POST /search, and each new search the user runs in the iframe. A later page of the same search does not count
Instant quoteEach POST /request-instant-quote that Flume accepts
  • The count is per user's Flume account, per UTC day. It resets at 00:00 UTC.
  • Calls from your backend and the user's work in the iframe share one count.
  • Over the limit, the call returns 429 DAILY_LIMIT_REACHED with a Retry-After header.
  • A call refused by the user's limit does not count against your limit per partner.
  • A search that fails because search is unavailable (503) is not counted.
  • In the iframe, the iframe tells the user. Your page receives no message.
{
"error": {
"code": "DAILY_LIMIT_REACHED",
"message": "Today's limit of 20 searches is used up. It resets at 00:00 UTC.",
"field": null,
"request_id": "e19b8889-a63b-4000-9dbe-ffd5b9157bd5",
"details": {
"kind": "SEARCH",
"limit": 20,
"reset_at": "2026-11-12T00:00:00Z",
"retry_after_s": 30120
}
}
}

The numbers in this sample are examples. Read the real limit from details.limit.

Field in detailsMeaning
kindSEARCH or QUOTE
limitThe user's limit per UTC day
reset_atWhen the count resets, in UTC
retry_after_sSeconds until then. The same value as Retry-After

Other users are not affected. Tell this user when they can try again.

LimitValueCode
Wait before a code resend30 secondsVERIFICATION_RATE_LIMITED
Codes per mailbox5 in 24 hoursVERIFICATION_RATE_LIMITED
Codes per user IP address, when you send X-Flume-Client-IP30 in 1 hourVERIFICATION_RATE_LIMITED
Open sales requests per user60422 VALIDATION_FAILED
Keys issued, sandbox10 in 24 hoursKEY_ROTATION_RATE_LIMITED
Keys issued, live1 in 24 hoursKEY_ROTATION_RATE_LIMITED
ThingLimit
Search photo6,000,000 bytes. JPEG, PNG or WebP
Results per search50
Results per page24
Item photo Flume fetches for the iframe25 MB, https, no redirects, 10 second timeout
item.image_urls, item.document_urls20 entries each
item.labels, item.rooms100 entries each
Idempotency-Key255 characters
Active keys, sandbox5
Active keys, live2
How long each thing lastsEvery timer, code and link in the integration, shortest first. The scale is logarithmic. The same content is listed as text under the diagram.ShorterLongerReady timer15 secondsReply to a save60 secondsLaunch code120 seconds, one useConnect code120 seconds, one useVerification code10 minutesIframe session12 hoursImage linksabout 24 hoursOpen in Flume link7 days, one useInstant quote prices30 daysUnused session30 daysUser access tokenno expiry

How long each thing lasts. Every timer, code and link in the integration, shortest first. The scale is logarithmic.

Read this diagram as text
  1. Ready timer: 15 seconds. On your page. When it fires, remove the iframe and offer a retry.
  2. Reply to a save: 60 seconds. After that the iframe treats the save as failed.
  3. Launch code: 120 seconds, one use. Inside iframe_url. Set the iframe src at once.
  4. Connect code: 120 seconds, one use. Exchange it at once.
  5. Verification code: 10 minutes. The emailed code the user types in the iframe.
  6. Iframe session: 12 hours. From its first open. Then flume:close_iframe with reason expired.
  7. Image links: about 24 hours. In the save payload. Copy the bytes when you save.
  8. Open in Flume link: 7 days, one use. Create it on the click. Never store it.
  9. Instant quote prices: 30 days. Until pricing.valid_until in the save payload.
  10. Unused session: 30 days. A session nobody reopens is dropped. The next open starts fresh.
  11. User access token: no expiry. Replaced when the user verifies again, or revoked by you.
ThingLifetime
Verification code10 minutes, 3 tries
Launch code, in iframe_url120 seconds, one use
Connect code120 seconds, one use
Iframe session12 hours from its first open. A reopen does not restart them
Idle iframe session state30 days
Instant quote pricesUntil valid_until: 30 days today. Always read the field
Deep link7 days, one use
Image linksAbout 24 hours. In the sandbox they can stop working earlier
Idempotency key24 hours
Replaced key during rotationoverlap_days: default 7, 0 to 30
User access tokenNo expiry
Search (search_session_uuid)No expiry
  1. Read Retry-After.
  2. Stop sending that call until then. Other calls still work.
  3. Tell the user plainly. error.message is written for them.
  4. Ask Flume if you need a higher limit.