Skip to content

Deposits

Getting money in: bank wires, PIX and USDC sent on chain.

Endpoint
GET /treasury/deposit-instructions Where to wire fiat, and the reference to quote
GET /treasury/onramp/quote Price a wire deposit without starting one
POST /treasury/onramp Open a wire deposit
GET /treasury/onramps List your deposits
GET /treasury/onramp/:onRampId A deposit's status and timeline
GET /treasury/onramp/pix/quote Price a PIX deposit
POST /treasury/onramp/pix Open a PIX deposit
GET /treasury/crypto-deposit Where to send USDC on chain, and what each network costs

GET /treasury/deposit-instructions

Where to wire fiat, and the reference to quote.

Auth: API key · KYB: approved organizations only · Rate limit: read

Our bank details per currency and your reference. Every customer wires to the same account; the reference is the only thing that says the money is yours. Standing: read it before starting anything.

Read the guide

Responses

Status Meaning error codes
200 OK
401 Missing or invalid credentials unauthorized
403 Not allowed kyb_required
429 Rate limited rate_limited
501 Not available on this environment not_implemented

200 body · DepositInstructions

Field Type Always present Notes
reference string yes
accounts object[] yes
accounts[].currency string yes
accounts[].accountName string yes
accounts[].bankName string no
accounts[].iban string no
accounts[].accountNumber string no
accounts[].bic string no
accounts[].bankAddress string no

GET /treasury/onramp/quote

Price a wire deposit without starting one.

Auth: API key · Rate limit: read

What a deposit of this size costs and delivers, and the minimum. Below the minimum is not an error here, so you can quote as the payer types. gross and net are exact only for USD (atPar: true); for EUR they are known once the conversion runs.

Read the guide

Query parameters

Field Type Required Rules Notes
amount string yes matches ^\d+(\.\d+)?$ Decimal string.
currency string yes non-empty The fiat the payer wires, e.g. EUR or USD.

Responses

Status Meaning error codes
200 OK
400 Invalid request validation
401 Missing or invalid credentials unauthorized
429 Rate limited rate_limited
501 Not available on this environment not_implemented

200 body

Field Type Always present Notes
atPar boolean yes
sent MoneyJSON yes
targetStablecoin string yes
feeBps number yes
deliveryFee MoneyJSON yes
deliveryMethod "mint+transfer", "transfer" yes
minimum MoneyJSON yes
gross MoneyJSON no
fee MoneyJSON no
net MoneyJSON no

POST /treasury/onramp

Open a wire deposit.

Auth: API key · Permission: treasury.move (owner, admin, member) · KYB: approved organizations only · Rate limit: write

Converts fiat you wire in into USDC in your home wallet. Answers 202 with bank instructions where the environment can produce them. Your idempotencyKey becomes the on-ramp ID.

Read the guide

Request body · application/json · unknown fields are ignored

Field Type Required Rules Notes
idempotencyKey string yes matches ^[A-Za-z0-9_.:-]{8,200}$ Your idempotency key. 8 to 200 characters of A-Z a-z 0-9 _ . : -. It becomes the on-ramp ID.
amount object yes
amount.amount string yes matches ^\d+(\.\d+)?$ Decimal string. At least the minimum GET /treasury/onramp/quote reports.
amount.currency string yes non-empty The fiat you will wire, e.g. EUR.
targetStablecoin "USDC" no default "USDC" The stablecoin delivered. USDC today.
destinationAddress string no non-empty Ignored. USDC is always delivered to your home wallet.

Responses

Status Meaning error codes
202 Accepted: started, not finished
400 Invalid request validation
401 Missing or invalid credentials unauthorized
403 Not allowed forbidden, kyb_required
409 Conflict idempotency_key_conflict, idempotency_key_reused
422 Understood, but cannot be done as asked ambiguous_home_wallet, no_home_wallet
429 Rate limited rate_limited
501 Not available on this environment not_implemented

202 body

Field Type Always present Notes
instructions OnRampInstructions no
onRampId string yes
status string yes

GET /treasury/onramps

List your deposits.

Auth: API key · Rate limit: read

Newest first, cursor-paginated. Includes deposits started by a wire you sent without an API call, whose IDs you never chose (dep-…). Filter with origin.

Read the guide

Query parameters

Field Type Required Rules Notes
limit integer no > 0; ≤ 500
cursor string no 1–512 chars
origin "api", "deposit", "pix" no

Responses

Status Meaning error codes
200 OK
400 Invalid request invalid_cursor, validation
401 Missing or invalid credentials unauthorized
429 Rate limited rate_limited
501 Not available on this environment not_implemented

200 body

Field Type Always present Notes
onramps OnRampSummary[] yes
count number yes
nextCursor string or null yes
hasMore boolean yes

GET /treasury/onramp/:onRampId

A deposit's status and timeline.

Auth: API key · Rate limit: read

Wire and PIX deposits alike. A deposit that is not yours is 404.

Read the guide

Path parameters

Name Type
onRampId string

Responses

Status Meaning error codes
200 OK
401 Missing or invalid credentials unauthorized
404 Not found, or not yours not_found
429 Rate limited rate_limited
501 Not available on this environment not_implemented

200 body

Field Type Always present Notes
onRampId string yes
running boolean yes
failure string no
state "FAILED", "IN_DOUBT", "REFUNDED", "DELIVERED", "EXPIRED" no
net object no
net.amount string yes
net.currency string yes
fee object no
fee.amount string yes
fee.currency string yes
stage "FAILED", "IN_DOUBT", "REFUNDED", "DELIVERED", "EXPIRED", "OPENING_COLLECTION", "AWAITING_PAYMENT", "PAYMENT_RECEIVED", "FORWARDING", "CONVERTING", "DELIVERING" no
timeline OnRampEvent[] no
gross object no
gross.amount string yes
gross.currency string yes
feeBps number no
fxProvider string no
deliveryMethod "provider", "mint+transfer", "transfer", "mint" no
txHash string no
instructions OnRampInstructions no

GET /treasury/onramp/pix/quote

Price a PIX deposit.

Auth: API key · Rate limit: read

A live, indicative price for paying BRL by PIX: what lands in your wallet, the fee, and this environment's minimum and maximum. available: false with a reason when it cannot be priced right now.

Read the guide

Query parameters

Field Type Required Rules Notes
amount string yes matches ^\d+(\.\d{1,2})?$ BRL, at most 2 decimals.
currency "BRL" no default "BRL" BRL, the only currency.

Responses

Status Meaning error codes
200 OK
400 Invalid request validation
401 Missing or invalid credentials unauthorized
429 Rate limited rate_limited
501 Not available on this environment not_implemented

200 body

Field Type Always present Notes
maximum MoneyJSON no
minimum MoneyJSON yes
autoPaidBelow MoneyJSON no
sent MoneyJSON yes
targetStablecoin string yes
feeBps number yes
chain string yes
available boolean yes
reason string no
basePrice string no
indicative boolean no
net MoneyJSON no
fee MoneyJSON no
providerFees MoneyJSON no
provider string no

POST /treasury/onramp/pix

Open a PIX deposit.

Auth: API key · Permission: treasury.move (owner, admin, member) · KYB: approved organizations only · Rate limit: write

Answers 202 with a PIX code to show as a QR. When it is paid, USDC is sent to your home wallet; delivery is confirmed on chain before anything is credited. Retrying with the same key returns the same code.

Read the guide

Request body · application/json · unknown fields are rejected with 400

Field Type Required Rules Notes
idempotencyKey string yes matches ^[A-Za-z0-9_.:-]{8,200}$ Your idempotency key. 8 to 200 characters of A-Z a-z 0-9 _ . : -. It becomes the on-ramp ID.
amount object yes
amount.amount string yes matches ^\d+(\.\d{1,2})?$ BRL, at most 2 decimals, within the limits the quote reports.
amount.currency "BRL" no default "BRL" BRL, the only currency.

Responses

Status Meaning error codes
202 Accepted: started, not finished
400 Invalid request validation
401 Missing or invalid credentials unauthorized
403 Not allowed forbidden, kyb_required
409 Conflict idempotency_key_conflict, idempotency_key_reused
422 Understood, but cannot be done as asked pix_onramp_unavailable
429 Rate limited rate_limited
501 Not available on this environment not_implemented

202 body

Field Type Always present Notes
instructions OnRampInstructions no
onRampId string yes
status string yes

GET /treasury/crypto-deposit

Where to send USDC on chain, and what each network costs.

Auth: API key · Rate limit: read

Your deposit address on every network we credit. USDC sent on your home network is credited as it is; USDC sent on any other network is moved to your home network and the fee for that is deducted. Each non-home network carries a live fee estimate.

Read the guide

Responses

Status Meaning error codes
200 OK
401 Missing or invalid credentials unauthorized
422 Understood, but cannot be done as asked no_home_wallet
429 Rate limited rate_limited

200 body

Field Type Always present Notes
networks object[] yes
networks[].feeUnavailable string no
networks[].fee MoneyJSON no
networks[].network string yes
networks[].address string yes
networks[].home boolean yes
quotedAt MoneyJSON yes
address string no
currency string yes