Skip to main content

Bridge

Direct conversion between XMR (Monero) and XMR1 (wrapped Monero on Hyperliquid).

No Authentication Required

The Bridge API is public and does not require an API key.

Overview

DirectionFromToUse Case
DepositXMRXMR1Get XMR1 to trade on Hyperliquid
WithdrawXMR1XMRConvert XMR1 back to native Monero

Endpoints

Get Current Rates

Get the current XMR/XMR1 exchange rate.

GET /v1/bridge/rates

Example Request:

curl https://api.wagyu.xyz/v1/bridge/rates

Response:

{
"rates": [
{
"exchange": "Wagyu",
"rate": 628.45,
"eta": "Instant"
}
],
"wagyuRate": {
"rate": 628.45,
"eta": "Instant"
}
}

Create Deposit Order (XMR → XMR1)

Create an order to deposit XMR and receive XMR1 on Hyperliquid.

POST /v1/bridge/deposit

Request Body:

FieldTypeRequiredDescription
toAddressstringYesYour Hyperliquid address (0x...)

Example Request:

curl -X POST https://api.wagyu.xyz/v1/bridge/deposit \
-H "Content-Type: application/json" \
-d '{"toAddress": "0xYourHyperliquidAddress"}'

Response:

{
"orderId": "dep_A1B2C3",
"depositAddress": "87R3FdKPwdeHoHcC6AZWrFe5...",
"destination": "0xYourHyperliquidAddress",
"expiresAt": "2026-01-19T14:00:00.000Z"
}

Next Steps:

  1. Send any amount of XMR to depositAddress
  2. Wait for 20 confirmations (~40 minutes)
  3. XMR1 will appear in your Hyperliquid wallet

Create Withdraw Order (XMR1 → XMR)

Create an order to withdraw XMR1 and receive XMR.

POST /v1/bridge/withdraw

Request Body:

FieldTypeRequiredDescription
toAddressstringYesYour Monero address

Example Request:

curl -X POST https://api.wagyu.xyz/v1/bridge/withdraw \
-H "Content-Type: application/json" \
-d '{"toAddress": "4YourMoneroAddress..."}'

Response:

{
"orderId": "wd_X1Y2Z3",
"depositAddress": "0x...",
"destination": "4YourMoneroAddress...",
"expiresAt": "2026-01-19T14:00:00.000Z"
}

Next Steps:

  1. Transfer XMR1 to depositAddress on Hyperliquid
  2. XMR will be sent to your Monero address within minutes

Get Order Status

Check the status of a bridge order.

GET /v1/bridge/order/:orderId

Example Request:

curl https://api.wagyu.xyz/v1/bridge/order/dep_A1B2C3

Response:

{
"id": "dep_A1B2C3",
"type": "deposit",
"status": "completed",
"amount": "1.50000000",
"confirmations": 20,
"requiredConfirmations": 20,
"tx_in": "xmr_transaction_hash...",
"tx_out": "hyperliquid_transaction_hash...",
"created_at": "2026-01-19T12:00:00.000Z",
"completed_at": "2026-01-19T12:42:00.000Z"
}

Order Statuses:

StatusDescription
awaiting_depositWaiting for deposit
pending_confirmationsDeposit detected, waiting for confirmations
processingConverting XMR ↔ XMR1
completedDone
failedFailed (see failure_reason)
expiredNo deposit within 2 hours

Code Examples

JavaScript

const BASE_URL = 'https://api.wagyu.xyz';

// Deposit XMR → XMR1
async function depositXmr(hyperliquidAddress) {
const response = await fetch(`${BASE_URL}/v1/bridge/deposit`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ toAddress: hyperliquidAddress }),
});
return response.json();
}

// Withdraw XMR1 → XMR
async function withdrawXmr(moneroAddress) {
const response = await fetch(`${BASE_URL}/v1/bridge/withdraw`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ toAddress: moneroAddress }),
});
return response.json();
}

// Check status
async function getStatus(orderId) {
const response = await fetch(`${BASE_URL}/v1/bridge/order/${orderId}`);
return response.json();
}

Python

import requests

BASE_URL = 'https://api.wagyu.xyz'

def deposit_xmr(hyperliquid_address):
"""Deposit XMR to get XMR1 on Hyperliquid"""
response = requests.post(
f'{BASE_URL}/v1/bridge/deposit',
json={'toAddress': hyperliquid_address}
)
return response.json()

def withdraw_xmr(monero_address):
"""Withdraw XMR1 to get XMR"""
response = requests.post(
f'{BASE_URL}/v1/bridge/withdraw',
json={'toAddress': monero_address}
)
return response.json()

def get_status(order_id):
"""Check order status"""
response = requests.get(f'{BASE_URL}/v1/bridge/order/{order_id}')
return response.json()

Timing

DirectionConfirmationsEstimated Time
XMR → XMR120 blocks~40 minutes
XMR1 → XMRInstant on HL~2 minutes