d.prod.pro docs
API

API Overview

d.pro's three API surfaces — Public Data API, d.pro Backend API, and Hyperliquid API — what each covers and when to use which.

d.pro exposes three distinct API surfaces:

  1. d.pro Backend API (dpro-backend) — d.pro-specific features: referrals, OPC, watchlist, cohort, leaderboard, skill market. Authenticated with a wallet JWT.
  2. Public Data API — a key-based REST API for d.pro's HyperLiquid analytics (holders, prices, trending, leaderboard, smart traders) and cross-asset market data (news, assets, klines, equity fundamentals). Free to start; paid tiers raise the rate limit and add monthly credits.
  3. Hyperliquid API — trading execution, market data, account state, WebSocket streams.

For core trading operations (placing orders, reading positions, subscribing to market data), use the Hyperliquid API directly. d.pro's UI wraps it, but you can also call it directly.

For d.pro-exclusive features, use the d.pro Backend API. To pull d.pro's analytics into your own apps with an API key, use the Public Data API.

The d.pro backend runs on Fastify (via NestJS) and exposes a REST API at the base path /api/v1/. All protected endpoints require a JWT token obtained via the authentication flow.

Public Data API

The Public Data API lets you pull d.pro's HyperLiquid analytics — spot/perp holders, mid prices, the liquidation heatmap, trending assets, the trader leaderboard, and HIP-3/HIP-4 smart traders — straight into your own apps and bots. It also covers cross-asset market data across crypto, stocks, ETFs, forex, and commodities.

It is authenticated with an API key (not the wallet JWT used by the rest of the backend API) and controlled with a per-key rate limit (plus a monthly credit quota on paid tiers).

Base URL: https://api.d.pro/api/public/v1

Interactive reference (try requests with your key): https://api.d.pro/api/public/docs

Quickstart

Make your first request to GET /hl/prices/mids (all mid prices, no parameters), sending your key in the x-api-key header. Every response is wrapped in { code, data, msg }code is "0" on success and non-"0" on error, and the payload is in data. See Conventions for the full envelope spec, number encoding, pagination, and error codes.

A successful response to GET /hl/prices/mids looks like this:

{
  "code": "0",
  "msg": "success",
  "data": {
    "mids": { "BTC": "61284.5", "ETH": "2410.3", "PURR": "0.090711" }
  }
}

Read a coin's mid price from data.mids (for example, data.mids.BTC). Numbers come back as strings (to preserve precision) — parse them with a big-decimal library, not floats.

API surfaces

d.pro Backend API

Base URL: https://api.d.pro/api/v1/

Authentication: Bearer JWT (see Authentication)

Modules and endpoints:

ModuleBase PathDescription
Auth/authJWT session management
Referral System/referralCreate codes, bind, claim rewards
OPC/opcWhite-label platform management
Watchlist/watchlistAddress group monitoring
Cohort/cohortComparative analytics
Leaderboard/leaderboardEnhanced leaderboard
Skill Market/skill-marketBrowse and download AI skills
Hyperliquid Proxy/hlProxied Hyperliquid data (with caching)
Revenue/revenueOPC revenue rounds
Claim/claimClaim rounds management

Content type: application/json for all requests and responses.

Pagination: All list endpoints support page and limit query parameters.

Hyperliquid API

All Hyperliquid API calls are POST requests to two endpoints:

EndpointUsage
https://api.hyperliquid.xyz/infoRead-only: market data, account state
https://api.hyperliquid.xyz/exchangeWrite: place orders, transfers, modifications

Request format:

{
  "type": "clearinghouseState",
  "user": "0x..."
}

WebSocket: wss://api.hyperliquid.xyz/ws for real-time subscriptions.

For complete Hyperliquid API documentation, see Hyperliquid's official docs.

d.pro API quick reference

Rate limits

The d.pro API enforces per-IP and per-authenticated-user rate limits. Exceeding the limit returns HTTP 429.

Hyperliquid's API has its own rate limits — see the Hyperliquid rate limits documentation for details.

Error format

d.pro API errors follow standard HTTP semantics:

{
  "statusCode": 401,
  "message": "Unauthorized",
  "error": "Invalid or expired JWT token"
}

Hyperliquid API errors are embedded in HTTP 200 responses:

{
  "status": "err",
  "response": "Order would immediately cross"
}

On this page