- Deel 1, het concept. Lees dit eerst. v3 is een herontwerp, geen hernoeming: als u oude endpoints één-op-één in kaart brengt, werkt u tegen de API in. Tien minuten hier bespaart u later dagen.
- Deel 2, de API. Endpoint-voor-endpoint mapping, voorbeeldverzoeken, toestandsmachines en een migratiechecklist.
api.deprecation voor uitfaseringsberichten.
Inhoud. Deel 1: 1.1 waarom v3 bestaat, 1.2 objectmodel, 1.3 gereedheid per capability, 1.4 taakloop, 1.5 geldstromen, 1.6 toestandsmachines, 1.7 conventies, 1.8 gouden pad. Deel 2: 2.1 klanten, 2.2 capabilities, 2.3 tasks en submissions, 2.4 accounts, 2.5 ontvangers en destinations, 2.6 quotes en transfers, 2.7 webhooks, 2.8 sandbox, 2.9 legacy-endpoints, 2.10 migratievolgorde, 2.11 valkuilenchecklist.
Deel 1, het concept
1.1 Waarom v3 bestaat
v1 en v2 lieten vier overlappende manieren groeien om een klant klaar voor betalingen te maken:/rails, /banks, /accounts/applications en de zakelijke rail-applications-oppervlakte, elk met zijn eigen statusvocabulaire. Documentverzameling (/documents, KYC-imports, verificatie-SDK-tokens) was losgekoppeld van datgene wat het feitelijk zou moeten deblokkeren. v3 vat dit alles samen in zes resources, de klant plus vijf dingen die hij bezit:
1.2 Het objectmodel
Twee structurele regels om te verinnerlijken:- Capabilities sturen alles. Accounts worden ingericht onder een
readycapability; quotes worden geprijsd tegen een capability. Onboarding komt neer op de benodigde capabilities naarreadybrengen. - Tasks kunnen overal aan hangen. Een capability, een account of een lopende transfer kan
openTaskIdsdragen. Waar u ze ook ziet, de loop is hetzelfde: task lezen, antwoorden indienen, wachten op beoordeling, het bovenliggende object opnieuw lezen.
1.3 Gereedheid is per capability, niet per klant
v1 verweefde/rails-gereedheid met een klantbrede KYC-poort. In v3 bestaat er geen klantstatus: een klant kan volledig bruikbaar zijn op stablecoin_transfers terwijl zijn sepa-capability nog openstaande tasks heeft. Capabilities met gepoolde accounts bereiken doorgaans sneller ready dan benoemde, begin dus met transacties op wat ready is in plaats van op alles te wachten.
Als uw v1- of v2-code UI-badges baseert op de verificatiestatus van de klant, herschrijf die dan:
- “Kan hij transacties doen op X?” wordt capability X
status == "ready". - “Moet hij iets doen?” wordt een task met status
action_required(de capability toont doorgaansrestrictedmetstatusReason.resolution: "complete_tasks"). - “Wachten wij op Swipelux?” wordt tasks in
in_review, capabilitypending.
1.4 De taakloop
Alles wat het oude document- en KYC-oppervlak deed, is nu deze ene loop: Belangrijke eigenschappen:- Een task bevat
requirements[], de afzonderlijke vragen. Elk heeft een taakspecifiekerequirementId, een stabielekeydie de vraag benoemt (bijvoorbeeld adresbewijs, dedupliceer uw UI hierop) en een getypeerdrequestdat exact beschrijft welke invoer wordt gevraagd (tekst, datum, keuze, document, verklaring, enzovoort). - Indienen is beoordeling-gestuurd: het muteert nooit direct de status van een capability of account, dat doet acceptatie. Eén uitzondering:
profile-antwoorden schrijven bij indienen door naar het klantprofiel (2.3). Poll na indienen de task of de bovenliggende resource. taskRevision(echo van derevisionvan de task) is een concurrency-beveiliging: is de task gewijzigd sinds u hem las, lees dan opnieuw en bouw uw antwoorden opnieuw op.absenceis een volwaardig antwoord (“Ik heb dit niet omdat …”), gebruik het in plaats van vereisten open te laten.
1.5 Geldbewegingen
Eén flow voor payins, payouts en stablecoin-bewegingen. Er is geen richtingsparameter, u verklaart nooit payin versus payout. De vorm van de in- en uitkomstvaluta leidt een alleen-lezendirection af op de quote en transfer: fiat_to_stablecoin (payin), stablecoin_to_fiat (payout) of stablecoin_move.
1.6 Eén toestandsmachine per resource
Elke statusdragende resource heeft zijn eigen enum, en elke niet-happy status draagt een gestructureerde reden. Accounts, applications en transfers delen de vorm{ code, message, actor, retryable }: accounts en applications tonen die als statusReason, transfers als stateDetail. actor zegt wie moet handelen (customer, developer, provider, network, swipelux), retryable zegt of opnieuw proberen kan helpen. Capabilities gebruiken { code, resolution, message }, waarbij resolution (complete_tasks, wait, contact_support, none) aangeeft wat de capability vooruit brengt. code-waarden vormen een open, alleen-groeiende catalogus: vertak op resolution (of actor plus retryable) en tolereer codes die u nog nooit hebt gezien.
Toestanden die deze gids niet doorloopt (
rejected, suspended, disabled, failed, canceled) zijn terminaal of support-gedreven; definities per resource staan in de specificatie.
Transfer, uitgetekend:
1.7 Conventies
Idempotentieregels om te verinnerlijken voor u code schrijft:
- Een sleutel hergebruiken met een andere body geeft
409 idempotency_conflictzolang de sleutel wordt bewaard (ten minste 7 dagen), plan dus nooit hergebruik van een sleutel. Genereer per logische bewerking een verse UUID en bewaar die bij uw job. - De replay dekt ook fouten: eindigde de oorspronkelijke aanvraag in een terminale 4xx, dan levert dezelfde sleutel plus body dezelfde probleemantwoord opnieuw op.
- Twee gelijktijdige aanvragen met dezelfde sleutel: één wint, de ander krijgt
409. Doe de verliezer opnieuw nadat de winnaar is afgehandeld; de replay geeft het oorspronkelijke antwoord terug.
1.8 Het gouden pad
Deel 2, de API
2.1 Klanten
Aanmaken, onderscheiden op
type (illustratieve waarden, veldnamen volgens spec):
- Aanmaken is progressief:
{ "type": "individual" }op zichzelf is een geldige create. Ontbrekende feiten maken de klant nooit ongeldig, ze duiken later op als intake-tasks op de capabilities die ze nodig hebben. - Bedrijven dragen
businessplus registratiegegevens. Het shareholder-CRUD van v1 wordt gemapt op related parties, verbreed om directors, officers en owners te omvatten: maak ze inline bij het aanmaken van de klant (elk krijgt een stabielerp_-id) of beheer ze via de dedicated related-parties-endpoints. - Geen klant-
status-veld, zie 1.3. - Bestaande klanten worden overgenomen: klanten die op v1 of v2 zijn aangemaakt, zijn met dezelfde id adresseerbaar via v3-endpoints. Het v3-lezen is een gesaneerde weergave, legacy-waarden die de v3-validatie niet halen, komen als afwezig terug. Na uw eerste v3-write wordt die weergave permanent: afwezige waarden komen niet vanzelf terug. Verrijk dus vroeg, plan een eenmalige pass die het volledige profiel uit uw eigen records via
PATCHinzet voordat u op v3-reads vertrouwt. v1-metadatais een aparte namespace en wordt niet overgenomen, zet het opnieuw op v3. externalIdis eersteklas en uniek over al uw klanten op v3, per omgeving (409 duplicate_external_id). Het archiveren van een klant geeft zijnexternalIdniet vrij, wis het via PATCH voor DELETE als u het wilt hergebruiken.DELETEis een archiveringscascade (geen herstel; ids worden nooit hergebruikt). Deze wordt geblokkeerd met409 customer_has_active_resourcesplusblockingResources[]zolang er een niet-gearchiveerd account of lopende transfer bestaat.- PATCH-mergeregels: expliciete
nullwist een nullable veld, arrays vervangen volledig (behalve inline related parties, die per id worden ge-upsert),metadata-sleutels worden samengevoegd. Volledige schema’s en lijstfilters staan in de OpenAPI-specificatie.
2.2 /rails, /banks, applications worden Capabilities
- Een capability is
method(ach,wire,rtp,pix,sepa,swift,spei,pse,transfers_3_0,faster_payments,sepa_instant,uaefts,card,stablecoin_transfers, enzovoort) plusaccountType(pooledofnamed,nullvoor niet-bankmethoden) plusdirections(payinofpayout). De publiekecapabilityIdis het gekwalificeerde paar (sepa_pooled,ach_named) of enkel de methode voorcardenstablecoin_transfers. - Elke capability-aanvraag genereert een application, het record per poging onder
.../capabilities/{capabilityId}/applications(plus/{applicationId}/history), met eigen statussen (1.6) enstatusReason. Het is het audit-spoor van een aanvraag; dagelijks poll u de capability zelf. capabilities/supportedgeeft beschikbaarheid (available,betaofdisabled), geschiktheid en aangeboden instellingen terug. Bankselectie gebeurt bij aanvragen via de optioneleinstitutions-array, er is geen aparte/banks-resource. Weglaten (of[]sturen) selecteert alle standaardinstellingen;isDefault: trueis een klant- en capability-specifieke vlag, geen globale. Een niet-lege lijst overschrijft de standaarden, en een bank-gebaseerde capability zonder toepasselijke standaard geeft422 capability_institutions_required. Instelling-ids zijn opaak, tolereer nieuwe.stablecoin_transferswordt automatisch toegekend bij het aanmaken van de klant en wordt geboren alsready(wordt dus nooit aangevraagd en is niet annuleerbaar).cardis enkel voor individuen.openTaskIdsop de capability is uw “wat moet ik nu doen”-wijzer. Open betekentaction_requiredofin_review, en de rollup omvat gedeelde tasks op klantniveau die via actieve afhankelijkheden bereikbaar zijn.cancelwerkt alleen vanuitpendingofrestricteden zonder blokkerende resources, anders409 capability_not_cancelable, waarvan de probleembodyblockingResourcesopsomt. Opnieuw aanvragen na annuleren is een nieuwe create met een nieuwe idempotency-key.- Poll de GET. Capability-status verversts wanneer u leest; poll
GET .../capabilities/{capabilityId}of abonneer u opcapability.status_changed, cache niet. - Één methode aanvragen kan gerelateerde methoden meteen beschikbaar maken, behandel capabilities als een set die u opnieuw leest, niet als één rij die u volgt.
- Gebruik
tasks-previewom onboarding-vragen te tonen voor u een aanvraag definitief indient. - Verificatie is niet eenmalig: nieuwe tasks kunnen verschijnen op een reeds
readycapability (periodieke of event-gedreven herverificatie). Houd de taakloop actief gedurende de hele levensduur van de klant, niet alleen tijdens onboarding.
2.3 Documenten en KYC worden Tasks en Submissions
Naamopmerking. Deze endpoints zijn kort uitgeleverd als
requirements en fulfillments. Sinds 02-08-2026 zijn de publieke namen tasks en submissions. De hernoeming betrof alleen de resources en endpoint-paden, de array requirements[] in een task en zijn requirementId behouden die namen.GET /v3/customers/{customerId}/tasks, beantwoord met POST .../tasks/{taskId}/submissions.
Rondom die loop:
- Ruwe bestandsopslag:
POST/GET/DELETE /v3/customers/{customerId}/documents(plus/{documentId}), upload één keer met uw API-sleutel en verwijs dan naar document-ids in submission-antwoorden. Dit vervangt elke upload-token- en direct-upload-intake. - Geheel nieuw:
GET /v3/tasks(merchant-brede inbox),GET /v3/transfers/{transferId}/tasks,GET .../tasks/{taskId}/history,GET .../tasks/{taskId}/submissions(plus/{submissionId}).
- Antwoordtypes:
profile,text,date,single_select,multi_select,boolean,attestation,document,resource_reference,absence. Hetrequest-object van elke requirement zegt welk type wordt verwacht. - Een submission moet elke actionable requirement in de huidige ronde beantwoorden, met exact de
taskRevisiondie u hebt gelezen. Deelsubmissions worden afgewezen. profile-antwoorden schrijven door: ze werken het klantprofiel bij via het normale validatiepad en evalueren onmiddellijk elke capability opnieuw die naar hetzelfde intake-werk verwijst. Broer-en-zus intake-tasks waarvan alle requirements zijn voldaan, sluiten automatisch.- Requirements kunnen alternatieve groepen vormen (
alternativeKey): dien er precies één van de groep in. changes_requestedverhoogtremediationRounden draagtreviewFeedback. Lees de task opnieuw en dien opnieuw in met een nieuwe idempotency-key.- Gehoste verificatie-URL’s verschijnen enkel in klantgeschopte task-details (
GET /v3/customers/{customerId}/tasks/{taskId}) en alleen zolang de sessie actionable is; lijsten enGET /v3/tasks/{taskId}zijn bewust URL-vrij. - De gebruiksvoorwaarden zijn ook een task:
openTaskIdskan een task metcategory: "terms_of_service"bevatten waarvan de gehoste acceptatiepagina op dezelfde manier is gekoppeld (alleen klantgeschopte detail). Generieke submissions kunnen geen voorwaarden accepteren, en KYC-goedkeuring impliceert nooit acceptatie van voorwaarden. - Tasks zijn per capability afgebakend, dus dezelfde vraag (bijvoorbeeld adresbewijs) kan eenmaal per capability verschijnen. Dedupliceer in uw UI op de requirement
key. - Geen vertaallaag: posten naar
/v1/documentsdeblokkeert geen v3-capabilities. Zodra een klant op v3 is, drijf u alle vragen via tasks.
2.4 Accounts en wallets
Aanmaken, onderscheiden op
origin plus type. Uitgegeven bankrekeningen nemen één method; externe bankrekeningen nemen in plaats daarvan een methods-array (method daar sturen wordt afgewezen):
countryop uitgegeven bankrekeningen is optioneel (standaard per methode); op externe bankrekeningen geeft u het expliciet op. Walletrekeningen hebben helemaal geen land.settlement.accountIdis verplicht op uitgegeven bankrekeningen: het benoemt de uitgegeven walletrekening die verrekende gelden uit stortingen op de bankrekening ontvangt.- Uitgegeven accounts stellen
details(IBAN of routing plus account of adres) bloot, geversioneerdrouting(stortingscoördinaten kunnen roteren, render altijd de nieuwste lees),fees,balances. - Netwerken:
polygon,ethereum,base,arbitrum,optimism,bsc,avalanche. - De capability-poort geldt alleen voor uitgegeven accounts: er een maken tegen een niet-ready capability mislukt met een capability-gecodeerde fout, vraag eerst de capability aan (2.2). Externe accounts hebben geen capability nodig (en geen klantgoedkeuring); ze krijgen alleen validatie van het request-schema en de bankgegevens.
- Uitgegeven bankrekeningen worden
provisioninggeboren metdetails: null. Poll de rekening of let opaccount.status_changedtotready. DELETEarchiveert, verwijdert nooit hard. Rekeningen waarnaar lopende transfers verwijzen, geven409 account_has_active_transfers. Doe het opnieuw nadat die transfers een terminale toestand hebben bereikt.- Nieuw in v3: Rules, doorlopende instructies op een uitgegeven walletrekening (
POST/GET /v3/customers/{customerId}/rules,GET/PATCH/DELETE .../rules/{ruleId}) die inkomende gelden automatisch doorsluizen naar een andere rekening of een wallet-destination. Geen v1- of v2-equivalent.
2.5 Recipients en destinations
v2 kende geen recipient-concept. Als u op v2 zit en aan derden uitbetaalt, is dit een nieuw oppervlak, geen hernoeming.
- Recipient is het wie:
individual(voor- en achternaam) ofbusiness(bedrijfsnaam), met verplichterelationship(employee,contractor,vendor,subsidiary,merchant,customer,landlord,family,other). Recipients en destinations zijn enkel voor derden. Een uitbetaling aan uzelf gebruikt helemaal geen recipient: richt op een van de eigenacc_-rekeningen van de klant als quotedestinationId(2.6). - Destination is het waar: getypeerd per methode,
sepa(iban, bic optioneel),achofwire(routing plus account),swift(volledige coördinaten plus optionele intermediair),spei(clabe),pse,transfers_3_0(cbu) enzovoort, plus wallet-destinations. Elke destination heeft een eigen status. Let opdestination.status_changed. - Fiat-destinations vereisen het complete
addressvan de recipient (straat, stad, postcode, land) voor het aanmaken. Ontbrekende onderdelen falen met422 recipient_address_required. Wallet-destinations slaan het adres over, maar vereisen bovenaanownership(self_custodied, ofcustodialmet een custodian-naam). - De correctheid van de begunstigde-naam is belangrijk: ontvangende banken vergelijken de wettelijke naam van de rekening. Stuur exacte wettelijke voor- plus achternaam of bedrijfsnaam, geen weergavebijnaam.
- Veldschema’s per methode voor destinations staan in de OpenAPI-specificatie.
2.6 Quotes en transfers
destinationIdneemt eenacc_-id (rekening van de klant) of eendst_-id (recipient-destination). Fiat-gefinancierde quotes (payins) moeten op eenacc_-rekening richten, eendst_-doel betekent altijd een payout (anders422 quote_direction_invalid).externalIdop quotes en transfers is een niet-unieke correlatiereferentie (weergegeven bij reads, filterbaar op lijsten). De regel over uniciteit per omgeving (2.1) geldt alleen voor deexternalIdvan de klant.- Voer een quote precies één keer uit, voor
expiresAt. Een vervallen quote faalt met409 quote_expired, een tweede uitvoering met409 quote_already_executed(het probleem bevat de bestaandetransferId). - Transfer annuleren wordt nog niet ondersteund:
POST .../cancelgeeft in elke toestand409 transfer_not_cancelable. Huidigecanceledtransfers komen door het verlopen van het financieringsvenster op een ongefinancierde payin, niet door dit endpoint. - Payins starten in
awaiting_funds: renderGET .../instructionsvoor de betaler, bankcoördinaten plus referentie- of memo-code voor fiat, stortingsadres voor crypto. De referentiecode is hoe de storting wordt gematcht. Toon deze altijd. stateplusstateDetailvoor machineleesbare substaten;action_requiredbetekent dat een compliance-task is bijgevoegd (openTaskIds,GET .../tasks), beantwoord via submissions.- Inkomende stortingen die op uitgegeven rekeningen worden gedetecteerd, verschijnen als transfers met
origin: "inbound_deposit"(in plaats van"quoted"). - Betaalnetwerk-referenties zijn geconsolideerd onder
references:transactionHash,traceNumber,imad,uetr,explorerUrl,returnedTransferId.
Twee migratiewaarschuwingen:
- Transfers steken niet over tussen versies. Op v1 of v2 aangemaakte transfers zijn niet leesbaar vanuit v3. De lijst laat ze weg en
GET /v3/transfers/{transferId}geeft 404. Zet eerst het aanmaken over, houd het v1-leespad tot die transfers terminale toestanden bereiken en laat het dan vallen. - Geen token-swaps.
stablecoin_movevereist dezelfde valuta in en uit: USDC naar USDT faalt met422 recipient_destination_invalidmet eencurrency_mismatch-veldfout. Zelfde netwerk aan beide kanten, geen bridging, en wallet-naar-wallet-bewegingen ondersteunen momenteel alleen kostenvrije levering: een quote waarvan de platform- of ontwikkelaarsfee niet nul is, faalt met422 amount_not_deliverable.
2.7 Webhooks
Catalogus van gebeurtenissen:
customer.created, customer.updated, customer.archived, capability.created, capability.status_changed, application.status_changed, recipient.status_changed, destination.status_changed, account.created, account.status_changed, account.details_changed, transfer.created, transfer.state_changed, api.deprecation.
GET /v3/webhooks/portalgeeft een gehoste management-portaal-URL terug voor bezorglogs, retries en handmatige replays.transfer.createdwordt momenteel geleverd in de legacy v1-payloadvorm (de v3-envelop wordt actief wanneer v1-webhooks worden uitgefaseerd). Beschouw het puur als een hint en haal de transfer op via GET; bouw niet op de body ervan.- Gebeurtenissen zijn hints: haal bij ontvangst de resource op en handel op basis van de read. Bouw nooit toestand op basis van event-payloads of volgorde. Bezorging is at-least-once en kan vertraagd of herordend zijn. Dedupliceer op event-id en herstel gemiste gebeurtenissen met de inclusieve
updatedAfter-filter van elke lijst. - Abonneer u op
api.deprecation, het machinale kanaal voor versie-uitfaseringen. - Vandaag geen
task.*-gebeurtenis: poll na indienen de task of zijn bovenliggende object.
2.8 Sandbox
Zelfde basis-URL; de sandbox-API-sleutel selecteert de omgeving.
De v3-sandbox simuleert de beoordelingsloop van begin tot eind: maak een task, dien er tegen in,
review deze naar accepted of rejected en zie hoe de capability wordt gedeblokkeerd. Repeteer uw herstel-UX voor productie. Zowel in de sandbox aangemaakte tasks als de reguliere intake-tasks die op aangevraagde capabilities verschijnen, kunnen op deze manier worden beoordeeld; net als in productie vuren er geen task-webhooks, poll (2.7).
2.9 Legacy-endpoints zonder v3-vervanging
Deze hebben geen v3-vervanging. De meeste blijven ongewijzigd op v1 (houd uw bestaande oproepen); twee zijn volledig uit dienst genomen (zie Behandeling):
Elk ander publiek v1- of v2-endpoint komt voor in een mappingtabel hierboven.
2.10 Voorgestelde migratievolgorde
Elke stap kan onafhankelijk worden uitgeleverd; v1 of v2 en v3 draaien naast elkaar tegen dezelfde klantbasis. Repeteer elke stap tegen uw sandbox-sleutel (2.8) voor u hem in productie herhaalt.1
Basisinfrastructuur
Idempotency-Key op alle effectvolle aanvragen (POST, PATCH, PUT, DELETE; sandbox-endpoints uitgezonderd); geld als strings; cursor-pagineringshelpers.2
Webhooks
Registreer v3-endpoints per gebeurtenis, inclusief
api.deprecation. De v1 single-endpoint-configuratie is een apart oppervlak, laat die staan; beide draaien naast elkaar tot de drain in stap 9.3
Profielverrijking
PATCH /v3/customers/{id} met het volledige profiel dat u heeft (v1 verzamelde minder dan v3 blootstelt) en zet metadata opnieuw. Maak hiervan bewust de eerste v3-write per klant: die vult de gesaneerde weergave voor die weergave permanent wordt (2.1).4
Reads
Richt klant-, capability- en account-reads op v3; herschrijf de klantstatuslogica volgens 1.3. Pas na stap 3, niet-verrijkte reads komen terug met afwezige legacy-invalid velden.
5
Onboarding-writes
Aanmaken via
POST /v3/customers; vraag capabilities aan in plaats van /rails, /banks of applications; bouw de taakloop (grootste nieuwe UI-werk, tasks-preview helpt om vragen vooraf te tonen). Vanaf hier stopt u met posten naar /v1/documents voor v3-gedreven klanten, dat deblokkeert geen capabilities (2.3).6
Accounts
Uitgeven via v3; verplaats imports naar
origin: external.7
Payouts
Recipients plus destinations, daarna quote en transfer.
8
Payins
Quote, transfer, instructions; blijf de referentiecode tonen.
9
Drain
Transfers steken niet over tussen versies (2.6). Behoud het v1- of v2-leespad en de v1-webhookconfiguratie voor daar aangemaakte transfers, dubbel-lees tot ze terminale toestanden bereiken, en laat dan de oude client en de v1-webhookconfiguratie vallen.
2.11 Valkuilenchecklist
- Verse UUID per logische bewerking, bewaard bij uw job en hergebruikt bij retry; hergebruik een sleutel nooit met een gewijzigde body (
409 idempotency_conflict). Sandbox-endpoints zijn vrijgesteld van de header. - Verrijk bestaande klanten (
PATCHhet volledige profiel, zetmetadataopnieuw, dat wordt niet overgenomen) voor elke andere v3-write, de eerste v3-write maakt de gesaneerde weergave permanent. -
externalIdis uniek per omgeving en wordt niet vrijgegeven door archiveren, wis viaPATCHvoorDELETEals u van plan bent hem opnieuw te gebruiken. - Er bestaat geen klant-
status-veld, leid gereedheid af per capability. -
action_requiredenin_reviewbetekenen beide een openstaande task. - Submissions zijn beoordeling-gestuurd (indienen is niet hetzelfde als gedeblokkeerd) en moeten elke actionable requirement met de exacte
taskRevisionbeantwoorden. Bij mismatch opnieuw lezen en opnieuw opbouwen. - Er bestaat geen
task.*-webhook, poll de task (of zijn bovenliggende object) na elk indienen. - Retry bij
changes_requestedbetekent task opnieuw lezen, nieuwe antwoorden, nieuwe idempotency-key. - Posten naar
/v1/documentsdeblokkeert nooit een v3-capability, zodra een klant op tasks zit, drijf u elke vraag via tasks. - Nieuwe tasks kunnen verschijnen op een reeds
readycapability, houd de taakloop actief na onboarding, niet alleen tijdens. - Capability
cancelwerkt alleen vanuitpendingofrestrictedzonder blokkerende resources (409 capability_not_cancelable); opnieuw aanvragen na annuleren is een nieuwe create met een nieuwe idempotency-key. - Capability moet
readyzijn voor u er accounts onder uitgeeft of ertegen quotes maakt. - Quote heeft een bedrag aan precies één kant; geen richtingsveld; precies één keer uitvoeren voor
expiresAt(409 quote_expiredof409 quote_already_executed). - Stablecoin-bewegingen zijn alleen dezelfde valuta en hetzelfde netwerk (USDC naar USDT faalt
422); wallet-naar-wallet ondersteunt alleen kostenvrije levering. -
DELETEarchiveert, verwijdert nooit hard. Account-delete wordt geblokkeerd door lopende transfers (409 account_has_active_transfers); klant-delete daarnaast door elk niet-gearchiveerd account (409 customer_has_active_resources,blockingResources[]benoemt ze). - v1- of v2-transfers zijn onzichtbaar voor v3-reads (lijst laat ze weg, GET geeft 404), dubbel-lees tot leeg, en laat dan de oude paden vallen.
- Stort-
routingen instructions kunnen roteren, render altijd de laatste GET en toon altijd de referentiecode. - Webhooks zijn hints; GET is de waarheid, dedupliceer op event-id, herstel gemiste gebeurtenissen met
updatedAfter.