curl --request POST \
--url https://api.daya.co/v1/bridges \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'X-Idempotency-Key: bridge-create-001' \
--header 'Content-Type: application/json' \
--data '{
"type": "TEMPORARY",
"asset": "USDT",
"amount": "500",
"deposit_chain": "POLYGON",
"destination_chain": "BSC",
"destination_address": "0x2222222222222222222222222222222222222222",
"refund_address": "0x3333333333333333333333333333333333333333"
}'
{
"object": "bridge",
"id": "750e8400-e29b-41d4-a716-446655440000",
"type": "TEMPORARY",
"status": "ACTIVE",
"asset": "USDT",
"amount": "500.000000",
"deposit_chain": "POLYGON",
"destination_chain": "BSC",
"destination_address": "0x2222222222222222222222222222222222222222",
"refund_address": "0x3333333333333333333333333333333333333333",
"deposit_address": "0x1111111111111111111111111111111111111111",
"expires_at": "2026-10-11T12:30:00Z",
"created_at": "2026-10-11T12:00:00Z"
}
Bridges
Create a bridge
Create a merchant-owned request to move USDT between chains
curl --request POST \
--url https://api.daya.co/v1/bridges \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'X-Idempotency-Key: bridge-create-001' \
--header 'Content-Type: application/json' \
--data '{
"type": "TEMPORARY",
"asset": "USDT",
"amount": "500",
"deposit_chain": "POLYGON",
"destination_chain": "BSC",
"destination_address": "0x2222222222222222222222222222222222222222",
"refund_address": "0x3333333333333333333333333333333333333333"
}'
{
"object": "bridge",
"id": "750e8400-e29b-41d4-a716-446655440000",
"type": "TEMPORARY",
"status": "ACTIVE",
"asset": "USDT",
"amount": "500.000000",
"deposit_chain": "POLYGON",
"destination_chain": "BSC",
"destination_address": "0x2222222222222222222222222222222222222222",
"refund_address": "0x3333333333333333333333333333333333333333",
"deposit_address": "0x1111111111111111111111111111111111111111",
"expires_at": "2026-10-11T12:30:00Z",
"created_at": "2026-10-11T12:00:00Z"
}
Overview
Returns201 with a direct bridge resource and assigned deposit address. Read Bridges for amounts, timing, fees, and refunds.
Authentication
string
required
An active merchant API key with
withdraw scope. A write grant alone is insufficient. Reads require read.string
required
Use one key for this request and retain it for retries.
Idempotency-Key is also accepted. Reuse the same header and body after a timeout.Request body
Only temporary bridges are supported. All fields below are required for this type. Amounts use major token units.string
required
TEMPORARY. There is no default.string
required
Asset code. Currently only
USDT is supported. There is no default. Daya pays the same asset.string
required
Required for
TEMPORARY. Expected deposit from 1 to 100000, inclusive, with at most six decimal places. Use a decimal string, with no exponent. Each actual deposit is processed separately.string
required
POLYGON, BSC, SOLANA, or APTOS. The asset must support deposits and refunds on this chain.string
required
A different chain from the same list, with withdrawals enabled for the asset.
string
required
A valid recipient address on
destination_chain.string
required
A valid return address on
deposit_chain. It is fixed when the request is created.Example
These addresses are illustrative test data. Replace them with addresses you control when integrating.curl --request POST \
--url https://api.daya.co/v1/bridges \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'X-Idempotency-Key: bridge-create-001' \
--header 'Content-Type: application/json' \
--data '{
"type": "TEMPORARY",
"asset": "USDT",
"amount": "500",
"deposit_chain": "POLYGON",
"destination_chain": "BSC",
"destination_address": "0x2222222222222222222222222222222222222222",
"refund_address": "0x3333333333333333333333333333333333333333"
}'
{
"object": "bridge",
"id": "750e8400-e29b-41d4-a716-446655440000",
"type": "TEMPORARY",
"status": "ACTIVE",
"asset": "USDT",
"amount": "500.000000",
"deposit_chain": "POLYGON",
"destination_chain": "BSC",
"destination_address": "0x2222222222222222222222222222222222222222",
"refund_address": "0x3333333333333333333333333333333333333333",
"deposit_address": "0x1111111111111111111111111111111111111111",
"expires_at": "2026-10-11T12:30:00Z",
"created_at": "2026-10-11T12:00:00Z"
}
expires_at. See the response fields.
Idempotency and errors
Use the same key and body when retrying. Successful retries return the original response and do not extend the payment deadline. Use GET for current status. Keys are retained for 24 hours by default; retrying after that period can create another bridge. Changing the body under the same retained key returns409.
| HTTP status | Meaning |
|---|---|
400 | Missing or invalid fields, unsupported asset/chain, same chains, invalid address, or missing idempotency key. |
401 | Invalid or missing API key. |
403 | Missing withdraw scope or account access is restricted. |
409 | Conflicting or in-progress idempotency request. Restore the original body for a conflict; wait for the original to finish if it is still in progress. |
429 | RATE_LIMITED: an unfunded request quota is reached. The message identifies the limit; observe Retry-After when returned. |
502 | Address provisioning failed. |
503 | BRIDGE_UNAVAILABLE: bridging is temporarily unavailable. Retry with the same key. |
500 | Internal error. Keep the original key when retrying. |
429 quota rejection, wait for Retry-After, then retry with the same idempotency key and body. If you do not know whether creation succeeded, keep the original key to avoid a duplicate bridge.