DH
7 min read·Updated 2026-06-12

API Conventions

Shared rules for every external endpoint: auth, precision, coverage, pagination, validation, errors, and operational limits.

Authenticate every request

All external API calls use the same base URL and authentication header. The API is read-only: requests in this namespace are GET requests with query parameters, not JSON request bodies.

Request
bash
curl -sS "https://api.dexhunt.app/api/developer/v1/networks" \
  -H "X-API-Key: hlsk_your_developer_key"
Example response
json
{
  "items": [
    {
      "network": "hyperliquid",
      "displayName": "Hyperliquid",
      "active": true,
      "strategyEnabled": true,
      "scanAssetCount": 250
    }
  ],
  "nextCursor": null
}

Token usage

Successful developer-token requests are recorded by method, path, response status, and day. Keep tokens server-side and rotate them if they are exposed.

Interpret coverage and field types

DexHunt scans discovered wallets and aggregates their current state. Wallet and market responses do not claim global exchange coverage unless the response explicitly says so.

Coverage

Returned data covers wallets discovered and scanned by DexHunt. It is the right scope for wallet intelligence and tracked positioning.

scanned_wallets

Decimals

All monetary, price, PnL, ratio, and percentage fields are strings. Parse them with decimal-safe libraries.

JSON string

Timestamps

Times are UTC ISO-8601 strings unless a field is named time, where epoch milliseconds are also included.

UTC

Nullable analytics

Fields enriched from Elasticsearch wallet profiles or live upstream data can be null when unavailable.

Null is signal absence

Page through results

Paginated endpoints return an items array and a nextCursor. Send the cursor back unchanged to fetch the next page. Treat cursors as opaque even when they look like an offset or timestamp.

Request
bash
curl -sS "https://api.dexhunt.app/api/developer/v1/networks/hyperliquid/wallets?limit=2&cursor=2" \
  -H "X-API-Key: hlsk_your_developer_key"
Example response
json
{
  "items": [
    {
      "address": "0x2222222222222222222222222222222222222222",
      "accountTotalValue": "940000.25",
      "totalPositionValue": "210000.00",
      "observedAt": "2026-06-12T12:03:00Z"
    }
  ],
  "nextCursor": null,
  "total": 3,
  "coverage": "scanned_wallets"
}

Directory limits

Wallets, market positions, rankings, activity, and liquidation levels default to 25 or 100 depending on the surface and cap at 200 or 1000.

endpoint-specific

Wallet activity limits

Open orders, fills, funding, and transfers default to 100 rows and cap at 500 rows.

100 / 500

Timeseries limits

Candles, open interest, and positioning default to 500 points and cap at 5000 points.

500 / 5000

News limits

Market news defaults to 30 rows and caps at 100 rows.

30 / 100

Validate query values

Validation is strict enough to prevent ambiguous routes and unsafe query values. Invalid parameters return 400 bad_requestwith a problem-detail response.

network

Network ids are normalized to lowercase and must match ^[a-z][a-z0-9_-]{1,63}$.

example: hyperliquid

asset

Assets allow letters, numbers, colon, underscore, and hyphen. Builder-style symbols such as xyz:SP500 are valid.

max 128 chars

address

Wallet addresses are normalized to lowercase and must be 0x plus 40 hex characters.

0x...

direction

Directional filters accept long or short. Wallet list direction can also return neutral as a derived value.

long | short

Request
bash
curl -sS "https://api.dexhunt.app/api/developer/v1/networks/hyperliquid/markets/BTC/candles?interval=2m" \
  -H "X-API-Key: hlsk_your_developer_key"
Example response
json
{
  "type": "about:blank",
  "title": "Bad Request",
  "status": 400,
  "detail": "Unsupported interval",
  "instance": "/api/developer/v1/networks/hyperliquid/markets/BTC/candles",
  "code": "bad_request",
  "requestId": "f1f3f4a9-2b51-47e9-9966-2e6d78c4b0a3"
}

Use supported intervals

The timeseries endpoints share the same interval and time-window parser. Supported intervals are:

1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, 1d, 3d, 1w, and 1M.

The from, to, and cursor parameters accept either an ISO instant such as 2026-06-12T12:00:00Z or epoch milliseconds such as 1781265600000.

Handle problem details

Errors use RFC7807 problem details with application/problem+json. The response includes a stable code and a requestId that can be passed to support.

Request
bash
curl -sS "https://api.dexhunt.app/api/developer/v1/networks"
Example response
json
{
  "type": "about:blank",
  "title": "Unauthorized",
  "status": 401,
  "detail": "Invalid or missing API key",
  "instance": "/api/developer/v1/networks",
  "code": "unauthorized",
  "requestId": "7d9c42f7-0dd0-4d4b-82dc-2c4d83b7f68a"
}

400

The path or query is invalid, a required parameter is missing, or the requested network is unsupported.

bad_request

401

The X-API-Key header is absent, malformed, revoked, or unknown.

unauthorized

404

The resource is absent, such as an unknown wallet profile or market symbol.

not_found

503

A live upstream source is temporarily unavailable. Wallet activity endpoints can return this in API-only deployments.

service_unavailable

Plan for availability

The current Java server does not publish a fixed per-token GET limit for /api/developer/v1 and does not return rate-limit headers. Integrations should still use timeouts, retry transient 503 responses with backoff, and be prepared for 429 if edge-level limits are added later.

Live passthrough endpoints

Open orders, fills, funding, and transfers read live wallet activity from Hyperliquid through the server-side limiter. These endpoints can be slower or temporarily unavailable compared with cached analytics endpoints.

What to do next