Fiat deposits and withdrawals
Bank transfer, card, and Teller orders for EUR and BRL; SEPA and Pix withdrawals.
Fiat collection uses the Funding / Teller family. There is no sandbox Teller or Embed host — use production URLs with your keys.
Crypto can stay in subaccount pockets, move to Pro, go on-chain, or pay a Bit2Me user.
Prerequisites
- Parent KYB complete.
- Subaccount created and, for persons, KYC
verified/tier: 2. - Fiat pocket for the currency.
X-SUBACCOUNT-IDplus HMAC headers.
Deposit instructions
GET /v1/teller/pocket/reference?pocketId={pocketId}pocketId is required. Use this for bank-transfer details tied to a pocket (EUR). Listen for teller.deposit.transfer.success and teller-order-v1.
Teller proforma then execute
POST /v1/teller/order/proformaRequired: amount, currency, orderType (deposit or purchase), and method as an object:
{
"amount": "10",
"currency": "EUR",
"orderType": "deposit",
"method": { "type": "apple-pay" },
"destination": { "type": "pocket", "value": "<EUR pocket UUID>" }
}method.type enum: creditcard, google-pay, apple-pay, hub-latam. That is not a string at the method key, and it is not creditCard.
Proforma 200 is CreateOrderData (orderId plus amounts and fees). Then execute:
POST /v1/teller/orderBody: { "orderId": "<id from proforma>" }. Execute 200 is ExecuteOrderData: status (including waiting-user), token, and provider.requestConfiguration.uri. Open that URI for the user. See Apple Pay and Google Pay.
Confirm with GET /v1/teller/order/status?id={orderId} and WebSocket teller-order-v1.
BRL deposit
BRL deposits use the same Teller proforma with method.type: hub-latam (LATAM rails, Pix for Brazil):
{
"amount": "10",
"description": "BRL deposit",
"currency": "BRL",
"feeType": "REA",
"orderType": "deposit",
"destination": { "type": "pocket", "value": "<BRL pocket UUID>" },
"method": { "type": "hub-latam" }
}destination is optional. ARS deposits are not available yet.
Deposit notifications
A fiat deposit by bank transfer can emit several notification types: wallet-transaction-v1, teller-order-v1, teller.deposit.transfer.success, and teller.deposit.transfer.error. Payloads: Notification events.
Fiat withdrawals
Fiat out uses a Wallet proforma with destination.bankAccount, then execute. That is not the address-book crypto flow and not Teller deposit proforma. You need a pocket with funds in the fiat you withdraw.
POST /v1/wallet/transaction/proformaEUR (SEPA):
{
"pocket": "<EUR pocket UUID>",
"amount": "10",
"currency": "EUR",
"type": "SEA",
"concept": "",
"note": "",
"destination": {
"bankAccount": {
"bankAccount": "<IBAN>",
"country": "ES",
"receiverName": "Test"
}
},
"userCurrency": "EUR"
}Brazil (Pix): Brazilian withdrawals go through the Pix instant payment platform. Set country to BR and add the bank details and the recipient's tax document (CPF or CNPJ):
{
"pocket": "<EUR pocket UUID>",
"amount": "10",
"currency": "EUR",
"type": "SEA",
"concept": "",
"note": "",
"destination": {
"bankAccount": {
"bankAccount": "<bank account>",
"country": "BR",
"receiverName": "Test",
"bankBranch": "02",
"bankCode": "01",
"bankName": "Bank test",
"taxDocument": "<CPF or CNPJ>"
}
},
"userCurrency": "EUR"
}The response id is the proforma you execute next.
POST /v1/wallet/transactionBody: { "proforma": "<id>" }. The execute requires 2FA: send x-totp and x-totp-type (gauth for subaccounts). See Two-factor authentication. The response id identifies the executed withdrawal order.
USD
USD is only available on Bit2Me Pro at the moment. Contact the sales team if you need it.
Card, Google Pay, and Apple Pay fees appear on the Teller proforma CreateOrderData. Who pays them (you vs the end user) is contractual. Do not assume a number from this portal.