Voltrade Partner API
Embed Voltrade's crypto trading competitions, deals, and live leaderboards directly in your product — and let your users join competitions from your own UI. One bearer key, clean JSON, full attribution.
Overview
The Voltrade Partner API is a versioned REST API that exposes our competitions and deals — including real-time leaderboards — and lets approved partners register their users into competitions programmatically. Responses are JSON with a consistent envelope; money is returned as strings and timestamps as ISO-8601 UTC.
Why integrate
Live competitions & deals
Pull our full catalog of active trading competitions and exchange deals — names, prize pools, rules, dates, venues, tokens — and render them natively in your UI.
Real-time leaderboards
Per-competition rankings with points (VXP), capped + uncapped volume, PnL, and server-computed projected USD rewards. Identical to what voltrade.xyz shows.
One-call registration
Onboard your users into a competition from your own UI with a single API call — no redirect, no wallet popup on our side.
Attribution & analytics
Every user you bring is tracked to your key. See users referred, registrations, volume driven, and your estimated referral VXP — queryable any time.
Reward transparency
Prize pools, distribution mode, leaderboard tiers, payout rails, lottery, and claim info — everything needed to explain rewards to your users.
Simple, secure auth
A single bearer key per partner, scoped and rate-limited. Read-only by default; registration is enabled per-partner.
Getting access
API access is granted to vetted partners. There's no integration cost to read our data — get in touch, tell us about your platform, and we'll issue you a key (read-only, or with registration enabled if you want to onboard users). Partners that drive registrations are credited as the referrer and can earn referral VXP on the activity they bring.
Authentication
Every request needs your API key. Pass it as a bearer token (or the x-api-key header). Keys are server-side secrets — call from your backend, never expose them in a browser.
Authorization: Bearer vt_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxScopes: read (all GET endpoints) and optionally register (the registration endpoints).
Conventions
Every response shares one shape:
{ "data": <payload>, "error": null, "meta": { "page": 1, "limit": 25, "total": 42 } }
// on error:
{ "data": null, "error": { "code": "unauthorized", "message": "…" } }Rate limits are per-key, per-minute; each response includes X-RateLimit-Limit / -Remaining / -Reset. A 429 means slow down until reset.
| Status | code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing/invalid/expired/revoked key |
| 403 | forbidden | Key lacks the required scope |
| 404 | not_found | Not found or not public |
| 422 | unsupported_campaign | Can't register via API (see below) |
| 429 | rate_limited | Rate limit exceeded |
Endpoints
Competitions
| GET | /competitions | List published competitions (filter by status, venue, exchange; paginated). |
| GET | /competitions/{slug} | Full competition detail: meta, reward rules, eligibility, scoring, lottery, tracked token. |
| GET | /competitions/{slug}/leaderboard | Ranked participants with VXP, capped + uncapped volume, and projected USD rewards. |
Deals
| GET | /deals | List active deals (filter by type, venue, featured; paginated). |
| GET | /deals/{slug} | Full deal detail: reward, requirements, tiers, claim caps. |
| GET | /deals/{slug}/leaderboard | Claim leaderboard for dashboard-enabled deals. |
Venues & account
| GET | /venues | Venue catalog (name, logo, supported markets/chains). |
| GET | /stats | Your usage + attribution stats (users referred, volume driven, referral VXP). |
| GET | /ping | Authenticated health check — echoes your key's identity and scopes. |
Registration (requires the register scope)
| POST | /competitions/{slug}/register | Register one of your users (by wallet) into a competition. |
| POST | /deals/{slug}/register | Register one of your users for a dashboard-enabled deal. |
Response objects
The fields returned by the read endpoints. List endpoints return the core fields; the {slug} detail endpoints add the reward/eligibility/scoring objects.
Competition
| Field | Type | Description |
|---|---|---|
| slug | string | Unique competition identifier (used in URLs). |
| name / description / sponsor | string | Display copy. |
| url | string | Canonical Voltrade competition page. |
| exchange / exchangeLink | string | Venue enum + trading link. |
| venue | object | { name, slug, logo }. |
| marketType / type / leaderboardSystem | enum | SPOT|PERPETUAL · VOLUME|PNL · POINTS|VOLUME|ROI|CUSTOM. |
| status | enum | SCHEDULED | ACTIVE | PAUSED | ENDED. |
| startAt / endAt | ISO datetime | Campaign window (UTC). |
| trackingChain | string|null | On-chain chain for DEX campaigns. |
| trackedToken | object|null | { symbol, name, address, logoUrl }. |
| prizePoolUsd | string | Displayed prize pool (USD). |
| rewardPayoutRail / partnerRewardName | enum / string | VOLTRADE_MANUAL|MERKL|PARTNER_DIRECT. |
| lottery | object | { active, prizeUsd, frequency, slots }. |
| requirements | object | { requireTwitter, minTradeCount, minDepositUsd }. |
| stats | object | { participantCount, totalVolumeUsd, totalPoints }. |
| rewards (detail only) | object | { distributionMode, leaderboardTiers[], rewardToken{…}, proofOfRewardUrls[], customRewardText }. |
| eligibility / scoring (detail only) | object | Eligibility thresholds + points/volume multipliers, caps. |
Leaderboard entry (competition)
| Field | Type | Description |
|---|---|---|
| rank | number | Position (ties share a rank). |
| walletAddress / displayName / traderSlug | string | Trader identity. |
| totalPoints | number | VXP earned (capped). |
| totalVolumeUsd | string | Capped volume — what points are based on. |
| uncappedTotalVolumeUsd | string | Raw traded volume (matches the on-site Total Volume column). |
| totalPnlUsd / totalPnlPercent | string / number | Realized PnL, if tracked. |
| totalLotteryRewardUsd | string | Lottery winnings to date. |
| challengesCompleted | number | Bonus challenges completed. |
| twitterConnected | boolean | Whether the trader linked X. |
| tradeCount | number | Eligible trades. |
| projectedRewardUsd | number|null | Server-computed projected payout. |
Deal
| Field | Type | Description |
|---|---|---|
| slug / title / shortDescription | string | Identity + display copy. |
| type / status | enum | Deal type (FEE_REBATE, THRESHOLD_REWARDS, …) + status. |
| url | string | Canonical Voltrade deal page. |
| venue | object|null | { name, slug, logo }. |
| reward | object | { type, value, currency, description, payoutRail, partnerRewardName }. |
| requirements | object | { minVolumeUsd, minTradeCount, minDepositUsd, newUsersOnly }. |
| startAt / endAt / claimDeadline | ISO datetime | Deal window + claim deadline. |
| claims | object | { max, maxPerUser, current, spotsLeft }. |
| dashboardEnabled | boolean | Whether a leaderboard is available. |
| tiers / qualificationRules (detail only) | array / object | Threshold tiers / hybrid qualification config. |
Leaderboard entry (deal)
| Field | Type | Description |
|---|---|---|
| rank | number | Position by volume progress. |
| walletAddress / displayName / traderSlug | string | Trader identity. |
| volumeProgressUsd | string | Volume traded toward the deal. |
| tradeCountProgress | number | Qualifying trades. |
| rewardEarnedUsd | string|null | Reward secured so far. |
| status | enum | Claim status. |
| qualifiedAt | ISO datetime|null | When the user qualified (hybrid/threshold). |
Example: competition leaderboard response
GET /api/v1/competitions/<slug>/leaderboard?limit=2
{ "data": [
{ "rank": 1, "walletAddress": "0x0cc1…32ee", "displayName": "lucky",
"traderSlug": "0x0cc1…32ee", "totalPoints": 119316,
"totalVolumeUsd": "119319.79", "uncappedTotalVolumeUsd": "120006.00",
"totalPnlUsd": "0", "totalPnlPercent": null, "totalLotteryRewardUsd": "0",
"challengesCompleted": 0, "twitterConnected": false, "tradeCount": 0,
"projectedRewardUsd": 627.95 }
],
"error": null,
"meta": { "page": 1, "limit": 2, "total": 46, "orderBy": "points" } }Registering users
With the register scope, register a user by wallet address from your backend:
POST /api/v1/competitions/{slug}/register
Authorization: Bearer vt_live_…
Content-Type: application/json
{ "walletAddress": "0xabc…" }No end-user wallet signature is required — your platform attests the user's consent. This is supported for wallet-matched competitions. Competitions that need a user action you can't perform (a verified Twitter connection, a linked Blofin/dYdX account, or a Solana wallet) return a clear 422; send those users to Voltrade to register.
Attribution & stats
Every registration is tagged to your key, so GET /stats reports the users you referred, registrations, volume driven, and your estimated referral VXP — no setup required. Provide a referral code with your key and we attribute the activity to you.
GET /api/v1/stats
{ "data": {
"registrations": { "competitions": 42, "deals": 5, "uniqueUsers": 38 },
"activity": { "totalVolumeUsd": "1250000.00", "totalPointsEarnedByUsers": 980000 },
"attribution": { "code": "YOURCODE", "usersReferred": 38, "referralVxpEstimated": 98000 },
"perCompetition": [ … ]
} }Examples
KEY=vt_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BASE=https://voltrade.xyz/api/v1
# List active competitions
curl -s -H "Authorization: Bearer $KEY" "$BASE/competitions?status=ACTIVE&limit=10"
# Leaderboard with projected rewards
curl -s -H "Authorization: Bearer $KEY" "$BASE/competitions/<slug>/leaderboard?limit=50"
# Register a user
curl -s -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"walletAddress":"0xabc…"}' "$BASE/competitions/<slug>/register"
# Your usage stats
curl -s -H "Authorization: Bearer $KEY" "$BASE/stats"Support
Questions, higher rate limits, or want registration enabled? Reach the team on Telegram or X. See also the partner overview.