Open app

More products

Markdown

Public data and statistics

These routes need no key and no session. They are what you need for dashboards, aggregators, research and status pages.

#Protocol statistics

GET /v2/stats/daily returns totals, the last 24 hours, and one row per day:

Metric Value
Orders, all time 44,207
Completed orders, all time 35,874
Volume, all time (USD) $1,329,602,700
Orders, last 24 hours 747
Volume, last 24 hours (USD) $34,700,689

Live from GET /v2/stats/daily, read when this page was built (4 Nov 2026, 08:24 UTC).

Parameter Use
days 1–365 trailing days, ending today (default 14).
includeMetadata true adds metadata: asOf, the day basis (created_at_utc), which products are counted, and whether legacy orders are included.
curl
curl 'https://api-beta.wagyu.xyz/v2/stats/daily?days=2&includeMetadata=true'
JavaScript
const res = await fetch('https://api-beta.wagyu.xyz/v2/stats/daily?days=2&includeMetadata=true'
);
const data = await res.json();
Python
import requests

res = requests.get('https://api-beta.wagyu.xyz/v2/stats/daily?days=2&includeMetadata=true', timeout=30)
data = res.json()
Response · 200 · captured 4 Nov 2026, 08:24 UTC
{
  "metadata": {
    "asOf": "2026-11-04T08:24:47.251Z",
    "dayBasis": "created_at_utc",
    "currentProducts": [
      "swap",
      "bridge",
      "coinflip"
    ],
    "volumeIncludesLegacy": true,
    "orderCountsIncludeLegacy": false,
    "legacyAsOf": "2026-10-19T15:40:51.844Z",
    "unvaluedLegacyCompletedOrders": 2044
  },
  "stats24h": {
    "orders": 747,
    "completed": 580,
    "failed": 4,
    "swaps": 565,
    "bridge": 157,
    "volumeUsd": 34700689.326225616
  },
  "totals": {
    "orders": 44207,
    "completed": 35874,
    "failed": 221,
    "swaps": 38423,
    "bridge": 4496,
    "volumeUsd": 1329602700.2141101
  },
  "daily": [
    {
      "orders": 216,
      "completed": 165,
      "failed": 2,
      "swaps": 171,
      "bridge": 44,
      "volumeUsd": 8524549.7325113,
      "date": "2026-11-04"
    },
    {
      "orders": 749,
      "completed": 574,
      "failed": 2,
      "swaps": 565,
      "bridge": 148,
      "volumeUsd": 30252326.080876924,
      "date": "2026-11-03"
    },
    {
      "orders": 553,
      "completed": 359,
      "failed": 5,
      "swaps": 459,
      "bridge": 61,
      "volumeUsd": 9631538.066724319,
      "date": "2026-11-02"
    }
  ]
}

Volume totals include legacy orders; order counts do not (metadata.volumeIncludesLegacy, metadata.orderCountsIncludeLegacy).

#How long a swap takes

GET /v2/swaps/route-stats gives the median time of completed swaps per route over the last 30 days. Use it to tell users how long a route usually takes, instead of guessing from elapsed time. The busiest routes right now:

Route Completed swaps (30 days) Median time
ETH (Arbitrum) → ETH (Ethereum) 1,423 70 s
XMR (Monero) → ETH (Ethereum) 1,154 14 min
ETH (Ethereum) → XMR (Monero) 1,065 2.3 min
XMR (Monero) → SOL (Solana) 944 13 min
XMR (Monero) → USDT (Ethereum) 492 13 min
SOL (Solana) → XMR (Monero) 467 79 s
BTC (Bitcoin) → XMR (Monero) 424 32 min
XMR (Monero) → USDC (Ethereum) 326 14 min
USDC (Ethereum) → XMR (Monero) 323 2.7 min
USDT (Ethereum) → XMR (Monero) 302 2.3 min
ETH (Ethereum) → USDT (Ethereum) 289 76 s
XMR (Monero) → BTC (Bitcoin) 256 26 min
XMR (Monero) → DAI (Ethereum) 215 16 min
ETH (Ethereum) → SOL (Solana) 215 85 s

Live from GET /v2/swaps/route-stats, read when this page was built (4 Nov 2026, 08:24 UTC).

  • Routes are keyed by fromChainId, fromToken, toChainId and toToken, with the same token values as quotes.
  • medianSeconds is null when a route has fewer than minimumSamples swaps in the window.
  • The window and its basis are in the response: windowDays, windowStart, cohort, basis.

#Recent activity

Route Returns
GET /v2/recent-swaps The latest completed swaps: assets, chains, atomic amounts with their decimals, timestamps.
GET /v2/bridges/recent The latest completed bridge orders.
curl
curl 'https://api-beta.wagyu.xyz/v2/recent-swaps'
JavaScript
const res = await fetch('https://api-beta.wagyu.xyz/v2/recent-swaps'
);
const data = await res.json();
Python
import requests

res = requests.get('https://api-beta.wagyu.xyz/v2/recent-swaps', timeout=30)
data = res.json()
Response · 200 · captured 4 Nov 2026, 08:24 UTC
[
  {
    "orderId": "e04d5edad1e06c69",
    "status": "completed",
    "from": "XMR",
    "fromChainId": 0,
    "fromAmount": "19230000000000",
    "fromTokenDecimals": 12,
    "to": "USDT",
    "toChainId": 728126428,
    "toAmount": "12186867722",
    "toTokenDecimals": 6,
    "createdAt": "2026-11-04T08:17:53.988Z",
    "completedAt": "2026-11-04T08:24:01.286Z"
  },
  {
    "orderId": "727efc9c37970943",
    "status": "completed",
    "from": "SOL",
    "fromChainId": 1151111081099710,
    "fromAmount": "1000000000",
    "fromTokenDecimals": 9,
    "to": "XMR",
    "toChainId": 0,
    "toAmount": "137103960000",
    "toTokenDecimals": 12,
    "createdAt": "2026-11-04T08:14:17.835Z",
    "completedAt": "2026-11-04T08:16:36.261Z"
  }
]

orderId in these lists is an opaque row key, stable across polls. It is not the order's id and opens nothing. Both lists also stream over WebSockets.

#Monero nodes

GET /v2/nodes lists recommended monerod endpoints for a self-custody wallet:

  • node.wagyu.xyz:18089

Live from GET /v2/nodes, read when this page was built (4 Nov 2026, 08:24 UTC).

#Points

Route Returns
GET /v2/points/{address} One address's volume, points (wagyu), rank, trade count and the points formula.
GET /v2/points/leaderboard The ranked leaderboard. limit is 1–200 (default 25).

Tip: every page is also plain Markdown, and /llms.txt indexes them for AI tools.