Wagyu Public API 🐮

Base URL: https://api.wagyu.xyz


Rate Limits

EndpointLimit
Order creation (POST /v1/order, POST /v1/bridge/deposit, POST /v1/bridge/withdraw)5/min per IP
Status checks (GET /v1/order/:id, GET /v1/bridge/order/:id)20/min per IP
Quotes (POST /v1/quote)20/min per IP
All other endpoints20/min per IP

Error Responses

All errors return JSON:

{ "error": "Error message here" }
HTTP CodeMeaning
400Bad request (invalid input)
404Order not found
429Rate limit exceeded
500Server error

Swap API

Cross-chain swaps between any assets.

Flow

  1. Get quote (optional, for preview)
  2. Create order → get depositAddress and depositChainId
  3. Send tokens to depositAddress on the correct chain
  4. Poll order status until completed
  5. Funds arrive at your toAddress

Get Supported Chains

curl https://api.wagyu.xyz/v1/chains

Response:

{ "chains": [ { "chainId": 42161, "name": "Arbitrum", "nativeToken": "ETH", "minSwapUsd": 15 }, { "chainId": 0, "name": "Monero", "nativeToken": "XMR", "minSwapUsd": 25 } ], "defaultMinSwapUsd": 15 }

Get Quote

# USDC on Arbitrum → XMR (100 USDC) curl -X POST https://api.wagyu.xyz/v1/quote \ -H "Content-Type: application/json" \ -d '{ "fromChainId": 42161, "toChainId": 0, "fromToken": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", "toToken": "XMR", "fromAmount": "100000000" }'

Request:

FieldTypeDescription
fromChainIdnumberSource chain ID (0 = Monero)
toChainIdnumberDestination chain ID (0 = Monero)
fromTokenstringToken address or "XMR"
toTokenstringToken address or "XMR"
fromAmountstringAmount in smallest units

Response:

{ "fromAmount": "100000000", "fromAmountUsd": "100", "fromSymbol": "USDC", "toAmount": "220000000000", "toAmountUsd": "99.00", "toSymbol": "XMR", "estimatedTime": 300, "gasCostUsd": "0.50", "minReceived": "0.213400" }

Create Swap Order

curl -X POST https://api.wagyu.xyz/v1/order \ -H "Content-Type: application/json" \ -d '{ "fromChainId": 42161, "toChainId": 0, "fromToken": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", "toToken": "XMR", "fromAmount": "100000000", "toAddress": "4AdUndXHHZ..." }'

Request:

FieldTypeDescription
fromChainIdnumberSource chain ID
toChainIdnumberDestination chain ID
fromTokenstringToken address or "XMR"
toTokenstringToken address or "XMR"
fromAmountstringAmount in smallest units
toAddressstringDestination address

Response:

{ "orderId": "ABC123", "depositAddress": "0x...", "depositChain": "Arbitrum", "depositChainId": 42161, "depositToken": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", "depositTokenSymbol": "USDC", "depositAmount": "100000000", "toAddress": "4AdUndXHHZ...", "expectedOutput": "220000000000", "expiresAt": "2026-01-11T12:00:00.000Z", "status": "awaiting_deposit" }

⚠️ Send exactly depositAmount of depositToken to depositAddress on chain depositChainId


Get Swap Order Status

curl https://api.wagyu.xyz/v1/order/ABC123

Response:

{ "orderId": "ABC123", "status": "completed", "depositAddress": "0x...", "depositChainId": 42161, "depositTokenSymbol": "USDC", "depositAmount": "100000000", "depositTxHash": "0x...", "toAddress": "4AdUndXHHZ...", "expectedOutput": "220000000000", "actualOutput": "219500000000", "createdAt": "2026-01-11T10:00:00.000Z", "completedAt": "2026-01-11T10:05:00.000Z" }
StatusDescription
awaiting_depositWaiting for deposit
deposit_detectedDeposit seen, waiting for confirmations
deposit_confirmedConfirmed, executing swap
executing_swapSwap in progress
completedDone
failedFailed (see errorMessage)
expiredNo deposit before expiry

Bridge API

Converts between XMR (Monero) and XMR1 (Hyperliquid L1 token).

Flow

  1. Create order → get depositAddress
  2. Send funds to depositAddress
  3. Poll order status until completed
  4. Funds arrive at your destination

Get Rates

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

Response:

{ "rates": [ { "exchange": "Wagyu", "rate": 496.55, "eta": "Instant" }, { "exchange": "FixedFloat", "rate": 498.67, "eta": "~30min" } ], "wagyuRate": { "rate": 496.55, "eta": "Instant" } }

Create Deposit Order (XMR → XMR1)

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

Request:

FieldTypeDescription
toAddressstringHyperliquid address (0x...)

Response:

{ "orderId": "dep_ABC123", "depositAddress": "8...", "destination": "0x...", "expiresAt": "2026-01-11T12:00:00.000Z" }
  • Send XMR to depositAddress, receive XMR1 at destination

Create Withdraw Order (XMR1 → XMR)

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

Request:

FieldTypeDescription
toAddressstringMonero address

Response:

{ "orderId": "wd_ABC123", "depositAddress": "0x...", "destination": "4YourMoneroAddress...", "expiresAt": "2026-01-11T12:00:00.000Z" }
  • Send XMR1 to depositAddress on Hyperliquid, receive XMR at destination

Get Bridge Order Status

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

Response:

{ "id": "dep_ABC123", "type": "deposit", "status": "completed", "amount": "1.5", "confirmations": 20, "requiredConfirmations": 20, "tx_in": "xmr_txid...", "tx_out": "hl_txid...", "created_at": "2026-01-11T10:00:00.000Z", "completed_at": "2026-01-11T10:40:00.000Z" }
StatusDescription
awaiting_depositWaiting for deposit
pending_confirmationsDeposit detected, waiting for confirmations
processingProcessing the transfer
completedDone
failedFailed (see failure_reason)
expiredNo deposit received before expiry

Chain IDs

ChainID
Monero0
Ethereum1
BSC56
Base8453
Arbitrum42161
Solana1151111081099710
Bitcoin20000000000001

Token Decimals

TokenDecimalsExample
XMR121 XMR = 1000000000000
USDC61 USDC = 1000000
ETH181 ETH = 1000000000000000000

Notes

  • Orders expire after 2 hours if no deposit is received
  • Minimum swap: $15-40 depending on chain
  • XMR confirmations required: 20 blocks
  • A fee system will be available soon

Moo 🐮.