Webhooks
Get started listening to webhook events from your Bitso account
DeprecatedThis subscription API is deprecated. Create and manage subscriptions with the Webhooks API. Payload shapes on this page remain valid.
Bitso's Withdrawal and Funding Services provide webhooks to send real-time status data about withdrawal and funding events in your account.
To consume the webhook, set up and register with Bitso a callback URL where the webhook will deliver automatic updates on pending transactions. When a supported event changes its status, the webhook sends a notification via an HTTP POST method with the corresponding payload, documented below.
Not Possible to Select EventsYou cannot choose a specific event type to subscribe to. If you set up a callback URL, then the service sends a notification for each supported event.
Event Delivery Guidelines
- The system does not guarantee the order of event delivery, so events may arrive out of sequence.
- The system may deliver the same event multiple times.
After the URL receives the update, you must store it and process it later. Callback URLs that take more than five seconds to respond time out.
URL Registration
DeprecatedThis registration endpoint is deprecated. Use the Webhooks API to create and manage subscriptions. See Create webhook subscriptions.
To register your callback URL, make the following HTTP call with the corresponding body parameter:
POST https://bitso.com/api/v3/webhooks
Body Parameters
callback_url: Specifies the URL that receives the status data the service sends when the state of a withdrawal or deposit changes in your account.
A successful registration sends back the following response body:
{
"success": true,
"payload": "Successfully registered URL: <callback_url>"
}The registered URL must be accessible from the public web so that the webhooks can post the updates. Then, consider ways to secure the connection.
Funding Payload
If you register a callback URL, then when a deposit occurs, the webhook posts a JSON object that includes the following fields:
| Field Name | Description | Type | Units |
|---|---|---|---|
|
The amount received in the specified currency. This positive number represents the monetary amount credited to the Bitso account. |
String |
Currency |
|
The digital asset in a network. In most cases, it is the same as |
String |
|
|
The date and time when the service created the funding. |
String |
ISO 8601 timestamp |
|
The currency of the received amount. |
String |
|
|
The funding's specific details, the fields included vary depending on the funding method. |
JSON object |
|
|
The type of event reported. |
String |
|
|
The funding's unique identifier. |
String |
|
|
The specific integration that enables Bitso to connect to the given network. |
String |
|
|
The method used for this funding, such as praxis, pixstark, btc, eth, and the like. |
String |
|
|
The method's long name |
String |
|
|
The payment network through which the deposit is processed. |
String |
|
|
The specific mechanism, protocol, or standard used in the network. |
String |
|
|
The funding's status. |
String |
The following shows samples of the payload the service sends to the callback URL when a deposit is made into your account directly or via a dynamic QR code:
{
"event": "funding",
"payload": {
"fid": "7e4d8ade7af52735768b46961fe132",
"status": "complete",
"created_at": "2025-04-07T19:40:48+00:00",
"currency": "usd",
"method": "sol_spl",
"method_name": "Solana SPL",
"amount": "1.00000000",
"asset": "usdc",
"network": "solana",
"protocol": "spl",
"integration": "fblocks-v1",
"details": {
"receiving_address": "hx3FWiGvT6syeNvQvvh83S6rD***",
"sending_address": "0x4ee44Fa73C4534C4Bb61a06DD28Bd0aA49d***",
"tx_hash": "3oN7HwKbsP4ckwHK8RKmdcy88YNhBuLyLJuvaSHLBnzc3***",
"confirmations": "0",
"tx_url": "https://solscan.io/tx/3oN7HwKbsP4ckwHK8RKmdcy88YNhBuLyLJuvaSHLBnzc3***"
}
}
}{
"event":"funding",
"payload":{
"fid":"037c4c00e17c592fc7b6d9bad2261be8",
"status":"complete",
"created_at":"2023-05-17T23:12:00+00:00",
"currency":"mxn",
"method":"praxis",
"method_name":"SPEI Transfer",
"amount":"100.00",
"asset":"mxn",
"network":"spei",
"protocol":"clabe",
"integration":"praxis",
"details":{
"sender_name":"DARTH VADER",
"sender_clabe":"*****0606032******",
"sender_bank":"40329",
"clave":"885364",
"clave_rastreo":"2023051740014BMOV0000495448940",
"numeric_reference":"2043562",
"concepto":"PRUEBA DEPOSITO",
"cep_link":""
}
}
}{
"event": "funding",
"payload": {
"fid": "b920261542c54216ab3ad45a9d199f34",
"status": "complete",
"created_at": "2024-07-09T18:13:43+00:00",
"currency": "brl",
"method": "pixstark",
"method_name": "Pix",
"amount": "3000",
"asset": "brl",
"network": "pix",
"protocol": "pix_ind",
"integration": "stark",
"details": {
"end_to_end_id": "E3513612020240709210500000005246",
"payer": {
"account_number": "Payer's account ID",
"bank_code": "Code of the institution that holds the payer's account",
"bank_name": "Payer's bank name",
"name": "Payer's name",
"tax_id": "Payer's taxpayer ID"
},
"payee": {
"account_number": "Payee's account number",
"bank_code": "Code of the institution that holds the payee's account",
"name": "Payee's name",
"tax_id": "Payee's taxpayer ID"
},
"is_reversal": false
}
}
}{
"event": "dynamic_qr_code",
"payload": {
"fid": "eb12cc1b2d3141269b8f6fe895ac28fe",
"payer": {
"name": "FULL NAME",
"tax_id": "668XXXX991"
},
"status": "EXPIRED",
"amount": "1000.00",
"currency": "brl",
"expires_at": "2024-09-30T18:28:48Z",
"created_at": "2024-09-30T18:26:18Z",
"payed_at":"",
"qr_code_payload": "00020101021226890014br.gov.bcb.pix2567brcode-h.sandbox.starkinfra.com/v2/966a26531a794c54908278cfc63aefcd5204000053039865802BR5910JoseBadano6004CABA62070503***6304C918"
}
}{
"fid": "1439b301c0a1f473ddb1253e345a3879",
"status": "complete",
"created_at": "2025-02-05T17:30:27+00:00",
"currency": "ars",
"method": "bind",
"method_name": "Transferencia Bancaria",
"amount": "5200000.00",
"asset": "ars",
"network": "coelsa",
"protocol": "cvu",
"integration": "bind",
"fee": "0.000",
"details": {
"sender_name": "SENDER NAME",
"sender_cuitcuil": "99000999000",
"sender_address": "0000009999999999999999",
"sender_scheme": "CBU",
"sender_bank": "322",
"transfer_summary": "VAR"
}
}
Nvio CLABE Bitso Transfer®For the deposit payload, see Webhook Notifications.
Withdrawal Payload
If you register a callback URL, then when a withdrawal occurs, the webhook posts a JSON object representing the transaction and includes the following fields:
| Field Name | Description | Type | Units |
|---|---|---|---|
|
The sent amount in the specified currency. This positive number represents the monetary amount deducted from the Bitso account. |
String |
Currency |
|
The digital asset in a network. In most cases, it is the same as |
String |
|
|
The date and time when the service created the withdrawal. |
String |
ISO 8601 timestamp |
|
The currency of the amount sent. |
String |
|
|
The withdrawal's specific details, the fields included vary depending on the withdrawal method. |
JSON object |
|
|
The type of event reported. Possible values: funding, withdrawal, and dynamic_qr_code. |
String |
|
|
The |
String |
|
|
The specific integration that enables Bitso to connect to the payment gateway used. |
String |
|
|
The method used for this withdrawal, such as praxis, pixstark, btc, eth, and the like. |
String |
|
|
The method's long name |
String |
|
|
The payment network through which the withdrawal is processed. |
String |
|
|
The specific mechanism, protocol, or standard used in the network. |
String |
|
|
The withdrawal's status. |
String |
|
|
The withdrawal's unique identifier. |
String |
The following shows samples of the payload the service sends to the callback URL when a withdrawal is made from your account:
{
"event":"withdrawal",
"payload":{
"wid":"p4u8d7f0768ee91d3b33bee6483132i8",
"status":"complete",
"created_at":"2017-07-09T19:22:38+00:00",
"currency":"xrp",
"method":"rp",
"method_name":"Ripple",
"amount":"57",
"asset":"xrp",
"network":"rp",
"protocol":"ripple",
"integration":"rippled",
"details":{
"address":"*******LK5R5Am25ArfXFmqg**********",
"destination_tag":"64136557",
"ripple_transaction_hash":"33EA42FC7A06F062A7B843AF4DC7C0AB00D6644DFDF4C5D354A87C035813D321"
}
}
}{
"event": "withdrawal",
"payload": {
"wid": "91a72aed1b289f9314275c06c40ec317",
"status": "complete",
"created_at": "2024-07-09T21:19:23+00:00",
"currency": "brl",
"method": "pixstark",
"method_name": "Pix",
"amount": "3000",
"asset": "brl",
"network": "pix",
"protocol": "pix_ind",
"integration": "stark",
"details": {
"end_to_end_id": "D3513612020240709211800000005249",
"payee": {
"account_number": "Payee's account ID",
"bank_code": "Bank code for the payee's account",
"tax_id": "Payee's taxpayer ID number",
"name": "Payee's name",
"bank_name": "Payee's bank name"
},
"payer": {
"account_number": "Payer's account ID",
"tax_id": "Payer's taxpayer ID number",
"name": "Payer's name",
"bank_name": "Payer's bank name"
},
"is_reversal": false
}
}
}{
"wid": "0e10e397d6ee27fc6105fa62b86f6e6e",
"status": "complete",
"created_at": "2025-02-05T18:15:01+00:00",
"currency": "ars",
"method": "bind",
"method_name": "Transferencia Bancaria",
"amount": "31492.90",
"asset": "ars",
"network": "coelsa",
"protocol": "cvu",
"integration": "bind",
"details": {
"origin_id": "bitso_1738779301397",
"cvu": "0000009999999999999999",
"description": "BITSO_COMPLETE_TRANS"
}
}
Nvio CLABE Bitso Transfer®For the withdrawal payload, see Webhook Notifications.
Best Practices for Using Webhooks
Follow these best practices to keep your webhook endpoint secure and reliable:
- Handle Duplicate Events – Avoid Double Processing: Webhooks may send the same event multiple times, so managing potential duplicates is crucial. To prevent issues like double spending or duplicate credits, always verify both the transaction's final status and its unique transaction identifier. This verification ensures that each event is processed only once.
- Process Events Asynchronously: Use an asynchronous queue instead of handling events synchronously. This approach prevents scalability issues, especially during traffic spikes, ensuring your endpoint's hosting infrastructure remains stable.
- Acknowledge Events Quickly: Respond with a
2xxstatus code immediately upon receiving an event. Perform complex operations after acknowledging the event to avoid timeouts and lost events. - Validate Events Using IPs: Allow only webhook requests from trusted sources by adding the provided IP addresses to an allowlist:
| Environment | IP Addresses |
|---|---|
| Stage | 3.129.233.228 |
| 3.22.247.241 | |
| 3.134.133.168 | |
| Production | 52.15.91.227 |
| 18.216.72.107 | |
| 18.219.140.132 |
Updated about 2 months ago
