API reference
List Hyperliquid fills
GET
/v2/swaps/{id}/fillsPage saved execution receipts with an owner session or destination proof.
Authentication: Required: the order’s owner session in X-Session-ID, or the destination proof ?verify=<destination-address> (read-only).
#Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
before |
query | string (pattern ^[1-9]\d{0,18}$) |
No | Cursor returned as nextCursor by the previous page. |
limit |
query | integer (1–200) | No (default 200) |
Maximum fills per page, from 1 to 200. |
id |
path | string (pattern ^[A-Za-z0-9:_-]{1,128}$) |
Yes | Public order identifier. Not a credential: every read still requires the owner session or the destination proof. |
#Response
200 returns an object with:
fills· array of object · requiredtradeId· string (pattern^\d+$)coin· string (pattern^@\d+$)txHash· string (max 66, pattern^0x(?!0{64}$)[0-9a-fA-F]{64}$)time· integer · requiredside·"Buy"·"Sell"· requiredprice· number · requiredsize· number · requiredvalue· number · requiredfee· number · requiredfeeToken· string · requiredtwapId· integer
status·"pending"·"complete"·"incomplete"· requirednextCursor· string (pattern^[1-9]\d{0,18}$) or null · required
Errors use the standard error envelope: branch on code, never on the message.
#Example
curl
curl 'https://api-beta.wagyu.xyz/v2/swaps/<orderId>/fills?limit=50' \
-H 'x-session-id: <sessionId>'JavaScript
const res = await fetch('https://api-beta.wagyu.xyz/v2/swaps/<orderId>/fills?limit=50', {
headers: {"x-session-id":"<sessionId>"},
});
const data = await res.json();Python
import requests
res = requests.get('https://api-beta.wagyu.xyz/v2/swaps/<orderId>/fills?limit=50', headers={"x-session-id":"<sessionId>"}, timeout=30)
data = res.json()No response is captured for this route: it needs a real order. The response fields above come from the live contract.