Docs › Build with Beluga › API reference › Bridge orders
Create redemption
Start a redemption XMR2 → XMR. Returns the order's own Hyperliquid address to send XMR2 to.
Every redemption gets its own Hyperliquid address (sendTo), used for this order only and never again. Send XMR2 to it from any account, in one Hyperliquid spot transfer, within 120 minutes; a later transfer still belongs to the order. The payout is the amount received minus 1.0%, sent to xmrAddress. A second transfer to the same address is kept and paid by hand. Hyperliquid charges the sender 1 USDC (on top) for the first transfer to a new address; after the payout we refund it to the sending account (redemptions from 0.1 XMR2). Not idempotent.
Request body
JSON, Content-Type: application/json, max 4 KB.
| Name | Type | Description |
|---|---|---|
xmrAddressrequired | string | Monero address for the payout (starts with 4 or 8, 95 characters). |
turnstile | string | Only after a 428: the Turnstile token for captcha.sitekey. |
Responses
201Redemption created.
| Field | Type | Description |
|---|---|---|
id | string | Order ID. |
sendTo | string | This order's own Hyperliquid address: send the XMR2 here. |
note | string | Human-readable next step. |
400Invalid address or malformed JSON.
{
"error": "xmrAddress must be a Monero address (4 or 8…, 95 characters)"
}428Several unpaid orders from you (or many in total): confirm with Turnstile, then repeat the request with turnstile.
{
"error": "You have 3 unpaid orders open: please confirm you are human to create another one.",
"captcha": {
"provider": "turnstile",
"sitekey": "0x4AAAAAAF4fVMIx2sRL4mT2"
}
}503No redemption address free right now; try again in a few minutes.
{
"error": "No redemption address is free right now. Try again in a few minutes."
}429Rate limit reached; retry after the current minute.
{
"error": "rate limit"
}