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.

POST/api/withdraw

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.

NameTypeDescription
xmrAddressrequiredstringMonero address for the payout (starts with 4 or 8, 95 characters).
turnstilestringOnly after a 428: the Turnstile token for captcha.sitekey.

Responses

201Redemption created.
FieldTypeDescription
idstringOrder ID.
sendTostringThis order's own Hyperliquid address: send the XMR2 here.
notestringHuman-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"
}