The Payouts API pays a single beneficiary — typically an employee receiving theDocumentation Index
Fetch the complete documentation index at: https://docs.clevis.dev/llms.txt
Use this file to discover all available pages before exploring further.
net_salary from a payroll calculation — through a stable,
provider-agnostic interface.
What you can do
- Create a payout for a beneficiary in MX, CO, AR, BR, CL, or PE
- Retrieve, list, and cancel payouts
- Discover per-country beneficiary requirements
- Receive signed webhook callbacks on every status change
Mock markers — how to tell it is not real
Every response from/v1/payouts* in sandbox carries two unambiguous mock markers:
mock: truein the JSON body of everyPayoutresourceX-Clevis-Mock: trueHTTP response header on every payout routestatus_detailon mock-triggered terminal outcomes ends with"(mock trigger)."GET /healthincludes apayoutsblock:{ "enabled": true, "provider": "mock", "mode": "sandbox", "open_payouts": <int> }
Decimal precision
All monetary amounts on the Payouts surface are JSON strings, just like the Payroll API. Parse them with your language’sDecimal type before doing any
arithmetic.
amount in as either a number or a string — the API normalises
to a 2-decimal string on the way back.
Supported countries
| Country | Payout currency | Default method |
|---|---|---|
| Mexico (MX) | MXN | BANK_TRANSFER |
| Colombia (CO) | COP | BANK_TRANSFER |
| Argentina (AR) | ARS | BANK_TRANSFER |
| Brazil (BR) | BRL | BANK_TRANSFER or PIX |
| Chile (CL) | CLP | BANK_TRANSFER |
| Peru (PE) | PEN | BANK_TRANSFER |
currency you send must match the country’s payout currency, or you’ll
get 400 PAYOUT_CURRENCY_MISMATCH. Per-country beneficiary field shapes
(CLABE for MX, CBU/CUIL for AR, CPF for BR, RUT for CL, CCI for PE) are
covered in Country requirements.
Status lifecycle
Every payout moves through this state machine:PAID, REJECTED, and CANCELLED are terminal. See Status lifecycle
for full transition semantics and how the mock advances payouts.
Deterministic mock outcomes
Demos and tests need to be able to force any outcome without waiting on a timer or guessing. The mock exposes magic triggers — specialexternal_id
prefixes, amount suffixes, and request headers — that pick a deterministic
plan at intake. See Magic triggers for the full
list (including the MOCK_REJECT_BANK_ and MOCK_STUCK_ prefixes).
These are dev/test affordances, not stable API behaviour. They will stay
available while v1 is mock-backed; when the real dLocal provider ships,
they remain only on the mock path.
Idempotency
Every create call is idempotent. Pass either anIdempotency-Key header or
rely on external_id (which is automatically used as the idempotency key if
the header is omitted). See Idempotency.
Real-time updates via webhooks
If you setnotification_url on the create request, the provider POSTs a
signed payout.status_changed event to that URL on every status transition.
See Webhooks for the event shape and HMAC verification
recipe.
Authentication
Every payout endpoint requires the same Bearer API key as the rest of the API:PAYOUTS_ENABLED=false on the server, the routes return 403 PAYOUTS_DISABLED
instead of being unmounted — so the error is explicit.
Next steps
Quickstart
Pay a payroll end to end in under five minutes.
Status lifecycle
Understand every transition the mock can make.
Country requirements
Beneficiary fields and check-digit rules per country.
Magic triggers
Force rejection, success, or stuck states on demand.