API reference
Create a bridge order
POST
/v2/bridgesCreate a native bridge order for one asset and direction (supply your own sessionId only with a valid integrator key).
Authentication: None required. Optional: integrator key in X-Integrator-Key.
#Request body
Send one of these 2 shapes:
#Shape 1
toAddress· string · required — Destination address. Its chain-specific validity is checked by the engine.sessionId· string (pattern^[0-9a-f-]{16,64}$) — Optional session credential for an integrator to group its own orders. Requires a valid integrator API key.refundAddress· string (max 256) — Refund destination. Its chain-specific validity is checked by the engine.source· object — Where the visit that created this order came from. Marketing only: stored apart from the order, counted in reports, never published back on any order read.utmSource· string (pattern^[a-z0-9._-]{1,64}$) — The landing link's utm_source.utmMedium· string (pattern^[a-z0-9._-]{1,64}$) — The landing link's utm_medium.utmCampaign· string (pattern^[a-z0-9._-]{1,64}$) — The landing link's utm_campaign.referrer· string (pattern^(?=.{1,253}$)[a-z0-9-]{1,63}(?:\.[a-z0-9-]{1,63})+$) — Hostname of the site the visitor came from. Never a full URL.landing· string (pattern^\/[A-Za-z0-9/._-]{0,199}$) — Path of the visit's first page.
asset·"xmr"·"trx"·"zec"· required — Registered native-bridge asset key, never a display symbol.direction·"deposit"· required — Mint the wrapped asset from a native-coin deposit.
#Shape 2: with senderAddress
toAddress· string · required — Destination address. Its chain-specific validity is checked by the engine.sessionId· string (pattern^[0-9a-f-]{16,64}$) — Optional session credential for an integrator to group its own orders. Requires a valid integrator API key.refundAddress· string (max 256) — Refund destination. Its chain-specific validity is checked by the engine.source· object — Where the visit that created this order came from. Marketing only: stored apart from the order, counted in reports, never published back on any order read.utmSource· string (pattern^[a-z0-9._-]{1,64}$) — The landing link's utm_source.utmMedium· string (pattern^[a-z0-9._-]{1,64}$) — The landing link's utm_medium.utmCampaign· string (pattern^[a-z0-9._-]{1,64}$) — The landing link's utm_campaign.referrer· string (pattern^(?=.{1,253}$)[a-z0-9-]{1,63}(?:\.[a-z0-9-]{1,63})+$) — Hostname of the site the visitor came from. Never a full URL.landing· string (pattern^\/[A-Za-z0-9/._-]{0,199}$) — Path of the visit's first page.
asset·"xmr"·"trx"·"zec"· required — Registered native-bridge asset key, never a display symbol.direction·"withdraw"· required — Return the native coin against the wrapped asset.senderAddress· string or null — Intake hint only: the Hyperliquid address you intend to return the wrapped asset from. Fees and any pause bypass are bound to the sender the workflow actually verifies on-chain.
#Response
200 returns an object with:
- product = "bridge"
orderId· string · requiredproduct·"bridge"· requiredsessionId· string (pattern^[0-9a-f-]{16,64}$) · required — 16–64 character hexadecimal/hyphen owner-session credential.asset·"xmr"·"trx"·"zec"· required — Registered native-bridge asset key, never a display symbol.status·"awaiting_deposit"·"awaiting_xmr1"·"awaiting_trx1"·"awaiting_zec1"·"processing"·"completed"·"failed"·"expired"·"refunded"·"needs_review"· requiredcustomerState· one of the variants below · required — Authoritative customer display/action state. Clients must not infer lifecycle from status or resource presence.- Nested fields: see
openapi.json.
- Nested fields: see
destination· string · requiredexpiresAt· string · requireddirection·"deposit"· requireddepositAddress· string · requireddepositAddressForms· array of object- Nested fields: see
openapi.json.
- Nested fields: see
- product = "bridge"
orderId· string · requiredproduct·"bridge"· requiredsessionId· string (pattern^[0-9a-f-]{16,64}$) · required — 16–64 character hexadecimal/hyphen owner-session credential.asset·"xmr"·"trx"·"zec"· required — Registered native-bridge asset key, never a display symbol.status·"awaiting_deposit"·"awaiting_xmr1"·"awaiting_trx1"·"awaiting_zec1"·"processing"·"completed"·"failed"·"expired"·"refunded"·"needs_review"· requiredcustomerState· one of the variants below · required — Authoritative customer display/action state. Clients must not infer lifecycle from status or resource presence.- Nested fields: see
openapi.json.
- Nested fields: see
destination· string · requiredexpiresAt· string · requireddirection·"withdraw"· requiredxmr1DepositAddress· string or null · required
Errors use the standard error envelope: branch on code, never on the message.
#Example
curl
curl -X POST 'https://api-beta.wagyu.xyz/v2/bridges' \
-H 'content-type: application/json' \
-d '{
"asset": "xmr",
"direction": "deposit",
"toAddress": "<your-hyperliquid-address>"
}'JavaScript
const res = await fetch('https://api-beta.wagyu.xyz/v2/bridges', {
method: 'POST',
headers: {"content-type":"application/json"},
body: JSON.stringify({
"asset": "xmr",
"direction": "deposit",
"toAddress": "<your-hyperliquid-address>"
}),
});
const data = await res.json();Python
import requests
res = requests.post('https://api-beta.wagyu.xyz/v2/bridges', json={
"asset": "xmr",
"direction": "deposit",
"toAddress": "<your-hyperliquid-address>"
}, timeout=30)
data = res.json()No response is captured for this route: calling it creates or changes a real order. The response fields above come from the live contract.