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
| Direction | From | To | Use Case |
|---|---|---|---|
| Deposit | XMR | XMR1 | Get XMR1 to trade on Hyperliquid |
| Withdraw | XMR1 | XMR | Convert 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:
| Field | Type | Required | Description |
|---|---|---|---|
toAddress | string | Yes | Your 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:
- Send any amount of XMR to
depositAddress - Wait for 20 confirmations (~40 minutes)
- 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:
| Field | Type | Required | Description |
|---|---|---|---|
toAddress | string | Yes | Your 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:
- Transfer XMR1 to
depositAddresson Hyperliquid - 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:
| Status | Description |
|---|---|
awaiting_deposit | Waiting for deposit |
pending_confirmations | Deposit detected, waiting for confirmations |
processing | Converting XMR ↔ XMR1 |
completed | Done |
failed | Failed (see failure_reason) |
expired | No 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
| Direction | Confirmations | Estimated Time |
|---|---|---|
| XMR → XMR1 | 20 blocks | ~40 minutes |
| XMR1 → XMR | Instant on HL | ~2 minutes |