Changelog
Notable changes to the External API and to these docs. Most recent first. Subscribe to webhooks and watch this page to stay ahead of deprecations.
Versioning policy
The API is versioned in the path (/v1). Breaking changes ship under a new version — the current version keeps working. Deprecations are announced here and remain supported throughout a transition window before removal.
Within a version, changes are additive: we may introduce new fields and new enum values without a version bump. Build consumers to tolerate that.
To stay forward-compatible: branch your logic on the stable error type — never on message text — ignore unknown fields rather than rejecting them, and treat any unrecognised enum value as a safe default instead of failing.
Releases
KYC profile: pep is replaced by pepDeclaration, and profession is a sector code action required 2026-08-20
Two fields on POST /v1/kyc/data change. Requests keep succeeding either way — no new error is returned — but a value we no longer recognise is not recorded.
- What changes —
pep(boolean) is removed. SendpepDeclarationinstead, with one ofno,yes,family(immediate family member of a politically exposed person) orrelated(known close associate of one). Omit the field when the holder has not answered; never sendnoto mean unanswered. - What changes —
professionis now an activity sector code, a short numeric code such as24. Free text such as"Nurse"is still accepted by the request but is not recorded: it counts as not declared, and the holder is asked to choose a sector while completing verification. - What to do — if you send
pep, switch topepDeclaration:pepis now ignored, so a declaration sent under the old key is not stored. If you send a free-textprofession, either send a sector code or omit the field. Both fields stay optional, andmissingFieldsin the response tells you what is still outstanding.
Orders now return externalReference under the name you send it no action needed 2026-08-18
You set externalReference when creating an order. Until now the order read back carried that value under a misspelled key, externalRefeference, with a doubled e.
- What changes —
GET /v1/ordersandGET /v1/orders/{orderId}now returnexternalReferencewith the value you supplied. Reconciling on the key you wrote with works. - What does not change — on
GET /v1/orders,externalRefeferenceis still returned with the same value. It is now marked deprecated in the spec and will be removed in a future major version. - Also —
POST /v1/ordersnow echoesexternalReferenceon the create response, so you can confirm what you sent without a second call. The correct spelling is returned onGET /v1/orders,GET /v1/orders/{orderId},POST /v1/ordersandPOST /v1/pending-payments/{transferId}/create-order; the deprecated key was never present on the create or single-order responses and is not being added there. - What to do — nothing today. When convenient, switch your reads to
externalReference; if you branch on the presence ofexternalRefeference, note that both keys are present. - What changes — when the lookup behind either endpoint is temporarily unavailable, you get
503witherror: "ExternalServiceError". Previously both returned200— an emptynetworksarray, orlimits: null. - What does not change — a successful response is identical. An empty array still means the corridor genuinely has no matching networks, and
limits: nullstill means no bounds are published for it. - What to do — handle
503on both endpoints by retrying. If you cache either result, only cache a200: an empty list is settled, a503is unknown.
Corridor discovery returns 503 when a lookup is unavailable action required 2026-08-18
GET /v1/currencies/{currency}/networks and GET /v1/currencies/{currency}/limits now tell an empty answer apart from an answer they could not obtain.
Collections in ARS, COP, CLP, BOB and TWD are no longer available action required 2026-08-07
These five currencies can no longer be used as the origin of a quote or an order — you cannot collect funds in them. Paying out to all five is unchanged and continues to work.
- What changes —
POST /v1/quotesandPOST /v1/ordersrejectoriginCurrencyofARS,COP,CLP,BOBorTWDwith a validation error naming the currency. - What does not change —
destinationCurrencystill accepts all five. Payouts, destination schemas and existing payout methods are untouched. - What to do — stop offering these five as collection currencies. Orders already created are unaffected.
- Check availability at runtime —
GET /v1/currenciesreturns what each currency can do today. Read it instead of hardcoding a list, and it will stay correct through later changes.
Chilean peso bank payouts — three fields are now required action required 2026-08-07
A BANK_DEPOSIT_CL destination now takes five fields. Three of them were previously optional and are enforced today — a request that omits any of them is rejected with a validation error.
- Now required —
destinationBankName,destinationBankAccountTypeanddestinationTaxId, alongside thedestinationNameanddestinationBankAccountyou already send. - Accepted values —
destinationBankAccountTypeisCORRIENTEorAHORRO.destinationTaxIdis the recipient's RUT. - What to do — add the three fields wherever you build a
BANK_DEPOSIT_CLdestination, for example onPOST /v1/ordersandPOST /v1/withdrawals. - Confirm the field list at runtime —
GET /v1/currencies/CLP/destination-schemareturns the required fields, their formats and their accepted values. Read it instead of hardcoding this list, and it will stay correct through later changes.
Unreleased 2026-08-13
- New: fetch a single conversation —
GET /v1/conversations/{conversationId}?endUserEmail=returns one conversation. Previously you had to list an end-user's conversations and pick it out.endUserEmailis required: a conversation is addressed by end-user and id. Additive — nothing you send today changes. - Unrecognised query parameters are now rejected on the list endpoints —
/v1/deposits,/v1/orders,/v1/withdrawals,/v1/pending-paymentsand their/countvariants. A misspelled filter such as?limitt=5previously returned200with the parameter ignored; it now returns400. If you send any parameter not listed for the endpoint, remove it. cityandpostalCodeare required when paying out toSEPA,ACH_USorGBP_BANK_TRANSFER. Send them in eitherdestinationTransferDataordestinationUserData— either location satisfies the requirement. Requests missing both are now rejected at submission with a400naming the field, instead of failing later during payout.- Clearer payout errors. A missing recipient address now returns a message naming the field and where to put it, rather than a generic "user data is not valid".
- New:
refundStatuson pending payments.GET /v1/pending-paymentsandGET /v1/pending-payments/{transferId}may now returnrefundStatus— one ofpending_approval,returning,returned,failed. The field is absent when no refund is in progress. Onlyreturnedmeans the payer has the money back: do not readreturningas complete. While the field is present the payment cannot be linked to an order or a deposit, so stop offering it for linking. Additive — nothing you send today changes.
v1.0.0 current 2026-07-06
Initial public API (quotes, orders, deposits, withdrawals, webhooks) on stable JSON contracts — and the launch of this documentation site.
| Area | Change |
|---|---|
quotes | Lock an exchange rate and fees for a currency pair. |
orders | Commit a quote to a payout destination and track it to completion. |
deposits | Collect funds locally into a workspace balance. |
withdrawals | Pay out locally from a workspace balance. |
KYC | Onboard and verify entities before they transact. |
webhooks | Signed event notifications for state changes. |
discovery | Per-currency capability discovery via /v1/currencies/*. |
banking accounts | Manage the banking accounts behind deposits and withdrawals. |
docs | Modern API documentation launched — this site. |
Deprecated — the generic LOCALBANK deposit type is deprecated in favour of corridor-specific types (e.g. SEPA, PIX, and country-specific bank types). Discover the exact type per currency with GET /v1/currencies/{currency}/payin-schema. It is still returned on historical records for backward compatibility.
Upcoming
A cleaner, more consistent contract is planned: prefixed resource ids, a unified error envelope, 429 rate limiting with Retry-After, and standardized timestamps. It will ship under the versioning policy above — existing /v1 contracts keep working, and every change lands on this page first.