# Public data and statistics

> Public Wagyu API routes for protocol volume, median swap times per route, recent swaps and bridges, Monero nodes and points, all without authentication.

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 -->
```bash
curl 'https://api-beta.wagyu.xyz/v2/stats/daily?days=2&includeMetadata=true'
```

<!-- JavaScript -->
```javascript
const res = await fetch('https://api-beta.wagyu.xyz/v2/stats/daily?days=2&includeMetadata=true'
);
const data = await res.json();
```

<!-- Python -->
```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 -->
```json
{
  "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 -->
```bash
curl 'https://api-beta.wagyu.xyz/v2/recent-swaps'
```

<!-- JavaScript -->
```javascript
const res = await fetch('https://api-beta.wagyu.xyz/v2/recent-swaps'
);
const data = await res.json();
```

<!-- Python -->
```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 -->
```json
[
  {
    "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](https://docs.wagyu.xyz/live-updates.md#public-activity-feeds).

## 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). |

---
Source: https://docs.wagyu.xyz/public-data · Built from the live Wagyu API on 2026-11-04.
