Fiatside

Developers

Foutcatalogus

Elke fout bevat een stabiele, machineleesbare code en een coherente HTTP-status. De code is waar uw integratie op moet vertakken: de tekst kan evolueren, de code niet.

01

Vorm van een fout

De huidige vorm is bewust minimaal. Hij is stabiel, en dat is wat telt: een code, en niets dat een intern detail lekt.

Huidige vorm — echt antwoordjson
{ "error": "rate_stale" }
Met een leesbare reden — echt antwoordjson
{
  "error": "rail_not_open",
  "reason": {
    "fr": "La retenue TDS de 1 % et l’enregistrement FIU-IND exigent une entite locale…",
    "en": "The 1% TDS withholding and FIU-IND registration require a local entity…"
  }
}

Sommige fouten bevatten een tweetalig redenobject, bedoeld om ongewijzigd aan de gebruiker te tonen. Een gesloten rail is er zo een: de reden verklaart een genoemde regelgevende beperking, geen storing, en het tonen ervan bespaart een ondersteuningsverzoek. De versiebeheerde API zal een verzoek-id aan deze envelop toevoegen, zodat u ons op een precieze regel in onze logboeken kunt wijzen.

02

Codes van kracht

Deze codes worden vandaag geretourneerd door het quote-eindpunt.

Codes van kracht
codeHTTPWat het betekentWat te doen
invalid_request400De aanvraagbody faalt bij schemavalidatie: ontbrekend veld, verkeerd type, waarde buiten de toegestane grenzen.Controleer dat het bedrag een string is en geen getal, en dat de richting exact “sell” of “receive” is.
invalid_amount400Het bedrag kan niet worden geparseerd of bevat meer decimalen dan het activum of de valuta accepteert.Afkappen tot de precisie van de eenheid: 6 decimalen voor USDT, 8 voor BTC, 2 voor de euro, 0 voor de CFA-frank.
unknown_asset_or_rail404De identificatie van het activum of de route bestaat niet in de catalogus.Identificaties zijn stabiel en worden nooit opnieuw toegewezen. Herlaad de catalogus in plaats van ze te raden.
rail_not_open409De route bestaat maar is niet open. Het antwoord bevat de exacte reden, in beide talen.Toon de reden zoals die is: het verklaart een wettelijke beperking, geen storing. Bied een open route aan in hetzelfde land.
asset_not_offered409Het activum staat in de catalogus maar wordt niet aangeboden — het geval voor activa met verbeterde anonimiteit.Bied het niet aan in uw selector. De catalogus retourneert het met zijn reden zodat u het kunt uitleggen.
rate_stale503De laatst bekende prijs overschrijdt de maximaal toegestane leeftijd. De engine weigert te offerten in plaats van een verouderde prijs als vaste prijs te serveren.Probeer het opnieuw na een paar seconden. Cache de laatste succesvolle offerte niet om het gat te vullen: dat zou precies de fout zijn die deze code voorkomt.
rate_unavailable503Er is geen prijs beschikbaar voor dit activum / valutapaar.Schakel het paar uit in uw interface in plaats van een schatting te tonen. Een getoonde schatting wordt een verwachting.
quote_failed500Onverwachte fout tijdens de berekening. Er wordt geen offerte geretourneerd.Probeer het één keer opnieuw; als de fout aanhoudt, schrijf ons met de exacte tijdstempel van de aanroep.
03

Codes uit het gepubliceerde contract

Deze codes begeleiden eindpunten die nog niet open zijn. Ze zijn gepubliceerd zodat uw foutafhandeling in één keer wordt geschreven.

Codes van kracht
codeHTTPWat het betekentWat te doen
unauthorized401Sleutel ontbreekt, ingetrokken of gebruikt in de verkeerde omgeving.Een sk_test_-sleutel werkt niet in productie, en het omgekeerde ook niet: dat is opzettelijk.
idempotency_conflict409Dezelfde idempotentiesleutel is al gebruikt met een andere aanvraagtekst.Een sleutel hoort bij één intentie. Als de inhoud verandert, verandert de sleutel; anders is niet te achterhalen welke van de twee orders opnieuw moet worden afgespeeld.
quote_expired409Het citaat heeft zijn vergrendelingsvenster overschreden.Vraag opnieuw een citaat aan en laat het nieuwe bedrag accepteren. We herprijzen nooit stilzwijgend tegen de klant.
beneficiary_rejected422De begunstigdegegevens doorstaan de validatie van het betaalnetwerk niet: ongeldige checksum, niet-conform formaat of een naam die niet overeenkomt met de geverifieerde identiteit.Het antwoord noemt het betreffende veld. De naam van de begunstigde moet de geverifieerde identiteit zijn: uitbetaling aan derden is niet mogelijk.
country_not_served451Het bestemmingsland wordt niet bediend: sancties, beperkende maatregelen of het ontbreken van een lokaal kader.De code 451 is bewust gekozen boven een 404: wanneer we weigeren, zeggen we dat het een weigering is en waarom.
rate_limited429Te veel aanroepen binnen het glijdende venster.Eer de Retry-After-header. Citaten zijn goedkoop om in de wachtrij te zetten, duur om te hameren.
not_found404De resource bestaat niet of behoort niet tot uw sleutel.Beide gevallen retourneren dezelfde code: een antwoord dat ze onderscheidde, zou iedereen in staat stellen referenties van anderen op te sommen.
04

Wat geen fout is

Een bedrag buiten de grenzen van de rail retourneert een geldige quote, met een limitError-object. Het is geen fout: het is informatie die uw interface moet weergeven.

Fragment van het antwoordjson
"limitError": { "code": "below_min", "limit": "20.00" }

Als u dit geval als een HTTP-fout behandelt, ontneemt u uzelf het berekende bedrag, en dus de mogelijkheid om de gebruiker te vertellen: “u zit 16,53 EUR onder het minimum voor deze uitbetalingsmethode”. De grens geldt voor het nettobedrag, het bedrag dat de begunstigde ontvangt.

05

Opnieuw proberen, of niet

Drie families, drie gedragingen. Het herhalen van een validatiefout in een lus vult alleen uw logboeken.

Nooit opnieuw proberen

invalid_request, invalid_amount, unknown_asset_or_rail, asset_not_offered, unauthorized. Het verzoek is fout: het ongewijzigd opnieuw proberen geeft hetzelfde resultaat. Los het op, of toon de reden.

Opnieuw proberen met backoff

rate_stale, rate_unavailable, quote_failed, en elke snelheidsbeperking. Wacht een paar seconden, met een groeiende pauze tussen pogingen. Vul de pauze niet met een gecachte quote.

Vraag om een beslissing

rail_not_open, quote_expired, beneficiary_rejected, country_not_served. De situatie vereist een menselijke keuze: bied een andere rail, een nieuwe quote, gecorrigeerde gegevens aan.