LIVE · AUDIT-KETJU · EU
JÄRJESTELMÄ · 99,99 % KÄYTETTÄVYYS
v 1.0 ↗ TEHTY EU:SSA

Virheet + nopeusrajat

Yksi virhekuori jokaisessa päätepisteessä. Standardit HTTP-statuskoodit + jäsennelty code-merkkijono ohjelmalliseen täsmäytykseen. Nopeusrajaotsakkeet jokaisessa vastauksessa, jotta voit tahdittaa itseäsi ennen kuin osut 429:ään.

Virhekuori

{
  "detail": "Human-readable summary.",
  "code": "billing.subscription_past_due",
  "field_errors": {
    "scheduled_for": ["Must be a future ISO 8601 timestamp."]
  }
}
  • detail — aina läsnä, turvallinen renderöidä ihmisille (se on käännetty siellä missä lokaali on saatavilla).
  • code — läsnä erotettavissa oleville virhetiloille. Vakaa API-versioiden yli; täsmää tähän uudelleenyrityslogiikassa.
  • field_errors — läsnä vain 400-validointivirheissä. Kartta kentän nimi → viestilista.

Statuskoodimatriisi

StatusLuokkaUudelleenyritys?Yleiset syyt
400ValidointiEiPuuttuva pakollinen kenttä, virheellinen muoto, liiketoimintasäännön rikkomus
401AuthEiPuuttuva / virheellinen / peruutettu tunniste
402LaskutusEiTilaus erääntynyt, ilmaissuunnitelman raja täynnä
403KäyttöoikeusEiTunnisteelta puuttuu scope, tai resurssi on eri organisaatiossa
404Ei löydyEiResurssia ei ole olemassa, tai se ei ole näkyvissä tunnisteellesi
409KonfliktiJoskusIdempotency-Keyn uudelleenkäytön epäsuhta, tilakonerikkomus
422KäsittelemätönEiSemanttisesti virheellinen yhdistelmä kelvollisia kenttiä
429NopeusrajattuKyllä, perääntymiselläTunniste- tai organisaatiokohtainen throttle täynnä
500PalvelinvirheKyllä, perääntymiselläOdottamaton — avaa tiketti jos jatkuvaa
502 / 503 / 504OhimeneväKyllä, perääntymiselläYlävirta / julkaisu / kuorma

Merkittävät virhekoodit

KoodiStatusMitä se tarkoittaa
billing.subscription_past_due402Organisaation Stripe-tilaus on erääntynyt. Ohjaa ylläpitäjä kohtaan /admin/billing.
billing.free_plan_minutes_exhausted402Free-/Pilot-taso on käyttänyt 5 tarkastustaan.
billing.signature_pack_exhausted402Allekirjoituspaketin krediitit käytetty; maksa per allekirjoitus tai osta toinen paketti.
permission_denied403Tunnisteelta puuttuu scope. Katso field_errors.required_scope.
idempotency.key_mismatch409Sama avain, eri runko. Käytä tuoretta avainta.
session.already_ended409end:in kutsuminen ei-avoimessa istunnossa (yleensä turvallista — end on idempotentti, tämä on reunatapauksia varten).
kyb.not_verified403QES-allekirjoitus pyydetty organisaatiolle, joka ei ole läpäissyt KYB:tä.
rate_limited429Tunnistekohtainen (60 rpm) tai organisaatiokohtainen (600 rpm) throttle täynnä.

Nopeusrajaotsakkeet

Jokainen vastaus — onnistuminen tai virhe — kantaa throttle-tilan:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716461235
  • X-RateLimit-Limit — tähän pyyntöön sovellettava katto.
  • X-RateLimit-Remaining — montako kutsua on jäljellä nykyisessä ikkunassa.
  • X-RateLimit-Reset — Unix-aikaleima, jolloin Remaining nollautuu.

429:ssä asetetaan myös Retry-After (sekunneissa) RFC 6585:n mukaan.

Throttle-scopet

ScopeRajaIkkuna
Per tunniste601 minuutti
Per organisaatio (kaikkien tunnisteiden yli)6001 minuutti

Purskeellinen minuutin ensimmäisen sekunnin ajan. Osu kattoon, ja lisäpyynnöt ikkunan sisällä saavat 429:n.

Uudelleenyritysstrategia

Eksponentiaalinen perääntyminen jitterillä 429- / 5xx-virheille; älä yritä uudelleen 4xx-virheitä (paitsi 408, 425, 429):

async function withRetry<T>(fn: () => Promise<T>, max = 5): Promise<T> {
  let lastErr: unknown;
  for (let i = 0; i < max; i++) {
    try {
      return await fn();
    } catch (err: any) {
      const status = err?.status;
      if (status >= 400 && status < 500 && ![408, 425, 429].includes(status)) {
        throw err; // not retryable
      }
      const base = status === 429 ? (err.retryAfterMs ?? 1000) : 250 * 2 ** i;
      const jitter = Math.random() * base * 0.2;
      await new Promise((r) => setTimeout(r, base + jitter));
      lastErr = err;
    }
  }
  throw lastErr;
}

SDK:t toteuttavat tämän sisäisesti 429:llä + 5xx:llä; jos haluat mieluummin käsitellä uudelleenyritykset itse, aseta retries: 0 SDK-asetuksissa.

Virhekorrelaatio

Jokainen vastaus kantaa X-Request-Id-otsakkeen (UUID). Mainitse tämä tukitiketissä — voimme vetää täyden pyyntöjäljen pelkästä tuosta id:stä.

Mitä seuraavaksi