Request a Quote
Once you know the possible RFQ Pairs, you can attempt to request a Quote.
Endpoint URL
You can request a Quote by posting to the following URL:
POST https://api.bitso.com/rfq/v1/quotes
Request
Fields
| Field | Type | Required | Description |
|---|---|---|---|
source | string | Yes | Source currency of the RFQ Pair |
target | string | Yes | Target currency or asset of the RFQ Pair |
source_amount | string | No | When provided it refers to the source currency or asset |
target_amount | string | No | When provided it refers to the target currency or asset |
Payload Example
{
"source": "BTC",
"target": "USDT",
"source_amount": "0.001"
}Response
Fields
| Field | Type | Description |
|---|---|---|
id | string | UUID that uniquely identify the Quote |
source | string | Source currency or asset of the Quote |
target | string | Target currency or asset of the Quote |
source_amount | string | The amount related to the source field |
target_amount | string | The amount related to the target field |
rate | string | source:target Quote price |
status | string | The status of the Quote: ACTIVE, EXPIRED, ACCEPTED, REJECTED |
created_at | string | The date when the Quote was created |
expires_at | string | The date when the Quote will expire |
can_confirm | boolean | Whether the quote can be confirmed. false when the requested trade size exceeds available capacity |
max_tradable_amount | object | Only included in the response when can_confirm is false; omitted otherwise. Contains value (string) and currency (string) representing the maximum tradable amount |
Whencan_confirmisfalse, the quoted details are returned but confirming will cause the trade to fail. Usemax_tradable_amountto request a smaller, fulfillable quote.
Payload Example
{
"id": "552fd39c-1b1a-438f-b408-c06a51e00bd4",
"source": "BTC",
"target": "USDT",
"source_amount": "0.00100000",
"target_amount": "114.52",
"rate": "114520.19",
"status": "ACTIVE",
"created_at": "2025-07-25T03:43:15Z",
"expires_at": "2025-07-25T04:03:15Z",
"can_confirm": true
}Error
Responses
| Status Code | Error Code | Error Message |
|---|---|---|
| 400 | invalid_source_currency | The field Source currency is either invalid or missing |
| 400 | invalid_target_currency | The field Target currency is either invalid or missing |
| 400 | invalid_source_number_format | Source amount is not a valid number |
| 400 | invalid_target_number_format | Target amount is not a valid number |
| 400 | both_amounts_missing | One or more fields (source amount, target amount) are either invalid or missing |
| 400 | invalid_provided_amount | Incorrect provided amount |
| 400 | invalid_source_precision | Source amount should have at most a precision of <precision> |
| 400 | invalid_target_precision | Target amount should have at most a precision of <precision> |
Payload Example
{
"errors": [
{
"code": "invalid_provided_amount",
"message": "Incorrect provided amount"
}
]
}Possible Quote Scenarios
With two possible values for both source/target and source_amount/target_amount, there are 4 combinations:
| # | source | target | source_amount | target_amount | Interpretation |
|---|---|---|---|---|---|
| 1 | BTC | USDT | 0.001 | How much USDT you would receive from selling 0.001 BTC? | |
| 2 | BTC | USDT | 100 | How much BTC you need to sell to receive 100 USDT? | |
| 3 | USDT | BTC | 100 | How much BTC you can buy with 100 USDT? | |
| 4 | USDT | BTC | 0.001 | How much USDT you need to buy 0.001 BTC? |
How much USDT you would receive from selling 0.001 BTC?
Request
{
"source": "BTC",
"target": "USDT",
"source_amount": "0.001"
}Response
{
"id": "552fd39c-1b1a-438f-b408-c06a51e00bd4",
"source": "BTC",
"target": "USDT",
"source_amount": "0.00100000",
"target_amount": "114.52",
"rate": "114520.19",
"status": "ACTIVE",
"created_at": "2025-07-25T03:43:15Z",
"expires_at": "2025-07-25T04:03:15Z",
"can_confirm": true
}Then you would receive 114.52 USDT from selling 0.001 BTC.
How much BTC you need to sell to receive 100 USDT?
Request
{
"source": "BTC",
"target": "USDT",
"target_amount": "100"
}Response
{
"id": "e4e4a87e-8079-4489-a731-73dc3ed6bd1b",
"source": "BTC",
"target": "USDT",
"source_amount": "0.00087387",
"target_amount": "100.00",
"rate": "114433.49",
"status": "ACTIVE",
"created_at": "2025-07-25T03:43:15Z",
"expires_at": "2025-07-25T04:03:15Z",
"can_confirm": true
}So with this quote you would need to sell 0.00087387 BTC to receive 100 USDT.
How much BTC you can buy with 100 USDT?
Request
{
"source": "USDT",
"target": "BTC",
"source_amount": "100"
}Response
{
"id": "26c42e44-a6bf-45b0-bc5f-8992793e1011",
"source": "USDT",
"target": "BTC",
"source_amount": "100.00",
"target_amount": "0.00087395",
"rate": "114423.02",
"status": "ACTIVE",
"created_at": "2025-07-25T03:43:15Z",
"expires_at": "2025-07-25T04:03:15Z",
"can_confirm": true
}You would buy 0.00087395 BTC with 100 USDT.
How much USDT you need to buy 0.001 BTC?
Request
{
"source": "USDT",
"target": "BTC",
"target_amount": "0.001"
}Response
{
"id": "1624368a-71f1-49c2-87a3-b8b4e99fdd90",
"source": "USDT",
"target": "BTC",
"source_amount": "114.41",
"target_amount": "0.00100000",
"rate": "114414.17",
"status": "ACTIVE",
"created_at": "2025-07-25T03:43:15Z",
"expires_at": "2025-07-25T04:03:15Z",
"can_confirm": true
}You would need 114.41 USDT to buy 0.001 BTC.
Not Confirmable Quote
When the requested trade size exceeds the available capacity, the quote is returned with can_confirm: false and a max_tradable_amount indicating the largest amount you can trade.
Request
{
"source": "MXN",
"target": "USDC",
"target_amount": "25000"
}Response
{
"id": "fb673f0a-f25f-43f9-b3ef-1c1ba79cca1f",
"source": "MXN",
"target": "USDC",
"source_amount": "481731.25",
"target_amount": "25000",
"rate": "19.2692500000",
"status": "ACTIVE",
"created_at": "2026-04-03T18:07:25Z",
"expires_at": "2026-04-03T18:07:45Z",
"can_confirm": false,
"max_tradable_amount": {
"value": "21995.8641358641",
"currency": "USDC"
}
}The quote for 25,000 USDC cannot be confirmed because it exceeds the available capacity. The max_tradable_amount indicates you can trade up to 21,995.86 USDC. Submit a new quote with target_amount at or below that value.
Updated 5 days ago
