What happens when a call fails

Failed and not-found calls are refunded, a stale copy is served instead of an error when one exists, retries can be made idempotent, and live state is public. What we do not have yet is a published uptime series, so this page quotes none.

The numbers we have

Every figure carries the day it was measured and where it comes from. Where we have no measurement, this page says so instead of quoting one.

Measured, with dates

  • 99.5%passed after one re-run1,258 of 1,264 stable endpoints returned correctly mapped data. · Verification sweep of stable endpoints; report and result files kept in our repository
  • 96.2%passed on the first pass1,218 of 1,266 probed. Part of the gap was a fault in our own check, fixed before the re-run. · Verification sweep of stable endpoints; report and result files kept in our repository
  • 2endpoints demoted to betaOne returned an empty feed most of the time, one was blocked upstream. Both are marked unverified on their pages. · Verification sweep of stable endpoints; report and result files kept in our repository

This is a verification sweep, not an uptime figure. Each stable endpoint was called once from one place on its open fetch path, with a pause between calls to the same host, and its answer checked against the expected fields. It says the endpoints and their field mapping worked on that day. It says nothing about customer traffic, latency or availability over time.

What did not pass

Stable endpoints that did not pass after the re-run, by cause
EndpointsCauseWhat it means
3Upstream request quotaAn anonymous quota ran out during the sweep. Retry after the window; no change to the endpoint.
1Upstream 503Passed on the first pass, failed the re-run. The source was flaky.
1Not found by designThe probe channel was offline, which a live-stream endpoint reports as not found.
1DeferredThe quota reset was more than 60 s away, so the check was skipped rather than retried.

Cache windows by resource type

A repeat call inside the fresh window is free and served from memory. After it, a stale copy is still served instantly (and refreshed in the background) until the stale limit. Read from the endpoint specs when this page was built; each endpoint page shows its own.

Typical fresh window and stale limit by kind of endpoint
ResourceEndpointsFresh window (median)RangeStale limit (median)
Profiles and accounts1730 min30 min to 30 min6 h
Search192 min2 min to 2 min15 min
Everything else1,9592 min30 s to 24 h15 min
All endpoints1,9952 min30 s to 24 h15 min

What this page promises, and what it does not#

Onekey runs on a best-effort basis. There is no uptime guarantee, service level agreement or service credit on the free tier or on standard credit packs, and beta endpoints carry no reliability target at all (see the SLA). This page describes how failures are treated, which you can check in the docs and in every response, and where to look at live state. It quotes no uptime percentage and shows no incident history, because none is published yet.

Stable and beta#

Every endpoint carries one of two statuses, in the registry and on its page:

StatusMeaningCount today
stableVerified against the live source and monitored.1,292
betaBuilt from documented behaviour but not yet verified against the live source, so fields or availability may change. Failed calls are refunded either way.703

Total: 1,995 endpoints across 294 platforms, counted from the registry when this page is rendered. The status endpoint below also draws on the last saved verification sweep of stable endpoints.

When a call fails#

SituationCostWhat you get
Source failed or timed out (502)Free (refunded)A typed error with doc_url; retry with backoff.
Record not found (404)Free (reserved, then refunded)Remembered as "not found" for 1 to 5 minutes, so a repeat is instant and free.
Invalid parameters (422)Free (rejected before any charge)The error names the parameter.
Bad key (401), rate limited (429)FreeRetry-After on 429.
Answer served from cache, fresh or staleFreecached, stale and age_s in metadata.
A call you cannot affordNothing chargedINSUFFICIENT_CREDITS, before any work.

An empty list from a search that succeeded is a real answer and is charged. More in Credits & pricing and Refunds.

Cache and stale-serve#

Recent answers are remembered per endpoint. Fresh answers are served free. Stale ones (older than the fresh window) are served instantly and free with stale: true while Onekey refreshes them in the background. If the source is down when a refresh is needed and a recent enough copy exists, you get that copy marked stale instead of an error; if not, you get a 502 and are not charged. Free when served from cache (0.2 credit for a cached response over 100 KB). Simultaneous identical requests are merged into one fetch. Each endpoint page states its own windows. See Caching.

Retries that cannot double-charge#

Send an Idempotency-Key header on any billed call your code might send twice. The same key on the same request is billed at most once; a repeat within 24 hours gets the stored answer at 0 credits, marked idempotent_replay: true. A failed attempt releases the key. See Idempotency. Use it together with the retry rules in Errors: retry 429 after Retry-After, retry 500/502 with backoff, and never retry 400, 401, 402, 404 or 422.

Rate limits#

By default each API key can make 600 requests per minute and have 50 requests in flight at once, refilled continuously. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a 429 carries Retry-After. A key can also carry its own credit limit, so a runaway job stops at a number you chose while your other keys keep working. See Rate limits.

Where to see live state#

What we measure, and what is not published#

We observe fetch outcomes per platform (the circuit breakers behind the status endpoint) and run verification sweeps of stable endpoints. We have not yet published success rates, latency percentiles or uptime, and this page will not state any until there is a measured series to point at, with its window.