Money Transmitter Guide
Learn what you do differently in the wiring flows when you are a money-transmitting entity.
Two types of Bitso customers can use the USD wiring service:
- End users: They perform payouts and pay-ins on their behalf only.
- Money transmitters: They can perform payouts and pay-ins on behalf of a third party. Though they are not limited to third-party transactions, they can also complete operations on their behalf, just as an end user.
This article presents the differences between end-users wire transfer flows and those of money transmitters.
In essence, the wire withdrawal and deposit flows for money transmitters are the same as those of end users. However, you need to consider the following differences to avoid rejected transactions.
Withdrawal and Deposit Flows
The money transmitters' USD withdrawal and deposit flows comprise the following steps:
| Withdrawal Flow | Deposit Flow |
|---|---|
|
|
Differences
Consider the following differences that exist between the money transmitter and end-user flows:
Difference # 1: Different Onboarding Process
The first difference occurs in the flows' first step: Money Transmitters' customers DO NOT use the onboarding procedure documented in the section, Customer Onboarding.
Bitso determines whether a customer is a money transmitter, and when this case is valid, Bitso gives them access to our onboarding dashboard. Money transmitters perform the onboarding process on behalf of their customers. You must register any customer for whom you conduct transactions in our system. Otherwise, regulations prevent Bitso from completing this type of transaction.
You can onboard your non-business users via the Money Transmitter Customers API. However, for business users, it is mandatory to use the dashboard.
When your customer approves their onboarding process, the system issues an external customer ID that identifies the registered customer.
It is vital that you store this ID in a safe place because you must provide it in the body parameters of the following API calls:
- The call to register your customer's bank account, POST
/v3/payments/usd/bridge/external-accounts - Any withdrawal call you perform on behalf of your customer, POST
/v3/withdrawals - Any deposit intent call you perform on behalf of your customer, POST
/v3/payments/usd/bridge/deposit-intents
Bitso does not keep any record of these external customer identifiers. The system distributes them and provides them only to Bitso's customers.
Difference # 2: Additional Body Parameter in Bank Account Registration
The second difference occurs in the withdrawal flow’s second step, the registration of your customer's US-based bank account. You must add the following body parameter to the ones documented in the article Registering Your Bank Account:
on_behalf_external_customer_id:The ID (UUID) of the customer on whose behalf you complete the transaction. The onboarding process previously explained assigns this ID.
The following object exemplifies the body parameters included in the HTTP request to register your customer's bank account:
POST https://api-stage.bitso.com/v3/payments/usd/bridge/external-accounts
{
"bank_name":"Bank of America",
"account_owner_name":"Crypto Technology",
"account_number":"1283712372123255",
"routing_number":"026009593",
"on_behalf_external_customer_id":"9d95384d-5218-c553-d53c-84cd5d503cdd",
"type":"wire",
"address":{
"street_line_1":"Boulevard Avenue",
"street_line_2":"Suite 373",
"city":"La Jolla",
"state":"CA",
"postal_code":"92037",
"country":"USA"
}
}Bitso recommends setting up some means to relate the external customer ID (issued in the onboarding process) with the returned account ID that represents the registered bank account.
Difference # 3: Additional Body Parameter in Withdrawal Call
The third difference occurs in the withdrawal call, the fourth step of the withdrawal flow. You must add the same parameter —on_behalf_external_customer_id— to the ones documented in the article Wiring Out U.S. Dollars.
The following object exemplifies the body parameters included in the HTTP request to wire out funds on behalf of an external customer:
POST https://api-stage.bitso.com/v3/withdrawals
{
"asset":"usd",
"currency":"usd",
"method":"bridge",
"network":"bridge",
"protocol":"wire",
"amount":"200",
"on_behalf_external_customer_id":"9d95384d-5218-c553-d53c-84cd5d503cdd",
"external_account_id":"9b86976d-03d5-40b5-a867-d76b83d75de1",
"origin_id":"bitso_b864bb09faff",
"wire_message": "Hello bank, this is my message.\nThese are my instructions."
}Difference # 4: Additional Body Parameter in Deposit Intent Call
The fourth difference lies in the deposit intent call, the second step of the deposit flow. You must add the same parameter —on_behalf_external_customer_id— to the ones documented in the article Wiring In U.S. Dollars.
The following object exemplifies the body parameters included in the HTTP request to wire in funds on behalf of an external customer:
POST https://api-stage.bitso.com/v3/payments/usd/bridge/deposit-intents
{
"amount":"200",
"destination_currency":"usdc",
"on_behalf_external_customer_id":"9d95384d-5218-c553-d53c-84cd5d503cdd"
}Summary
All in all, four differences exist in the wire flows of money transmitters:
- Onboarding process, which issues the external customer ID.
- Addition of the parameter —
on_behalf_external_customer_id— to the body of the calls listed below. The value of this parameter is the customer ID obtained in the onboarding process:- Bank account registration, POST
/v3/payments/usd/bridge/external-accounts. - Withdrawal, POST
/v3/withdrawals. - Deposit intent, POST
/v3/payments/usd/bridge/deposit-intents.
- Bank account registration, POST
Updated 8 months ago
