Developers

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.

Base URL: https://voltrade.xyz/api/v1

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_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Scopes: 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.

StatuscodeMeaning
401unauthorizedMissing/invalid/expired/revoked key
403forbiddenKey lacks the required scope
404not_foundNot found or not public
422unsupported_campaignCan't register via API (see below)
429rate_limitedRate limit exceeded

Endpoints

Competitions

GET/competitionsList 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}/leaderboardRanked participants with VXP, capped + uncapped volume, and projected USD rewards.

Deals

GET/dealsList active deals (filter by type, venue, featured; paginated).
GET/deals/{slug}Full deal detail: reward, requirements, tiers, claim caps.
GET/deals/{slug}/leaderboardClaim leaderboard for dashboard-enabled deals.

Venues & account

GET/venuesVenue catalog (name, logo, supported markets/chains).
GET/statsYour usage + attribution stats (users referred, volume driven, referral VXP).
GET/pingAuthenticated health check — echoes your key's identity and scopes.

Registration (requires the register scope)

POST/competitions/{slug}/registerRegister one of your users (by wallet) into a competition.
POST/deals/{slug}/registerRegister 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

FieldTypeDescription
slugstringUnique competition identifier (used in URLs).
name / description / sponsorstringDisplay copy.
urlstringCanonical Voltrade competition page.
exchange / exchangeLinkstringVenue enum + trading link.
venueobject{ name, slug, logo }.
marketType / type / leaderboardSystemenumSPOT|PERPETUAL · VOLUME|PNL · POINTS|VOLUME|ROI|CUSTOM.
statusenumSCHEDULED | ACTIVE | PAUSED | ENDED.
startAt / endAtISO datetimeCampaign window (UTC).
trackingChainstring|nullOn-chain chain for DEX campaigns.
trackedTokenobject|null{ symbol, name, address, logoUrl }.
prizePoolUsdstringDisplayed prize pool (USD).
rewardPayoutRail / partnerRewardNameenum / stringVOLTRADE_MANUAL|MERKL|PARTNER_DIRECT.
lotteryobject{ active, prizeUsd, frequency, slots }.
requirementsobject{ requireTwitter, minTradeCount, minDepositUsd }.
statsobject{ participantCount, totalVolumeUsd, totalPoints }.
rewards (detail only)object{ distributionMode, leaderboardTiers[], rewardToken{…}, proofOfRewardUrls[], customRewardText }.
eligibility / scoring (detail only)objectEligibility thresholds + points/volume multipliers, caps.

Leaderboard entry (competition)

FieldTypeDescription
ranknumberPosition (ties share a rank).
walletAddress / displayName / traderSlugstringTrader identity.
totalPointsnumberVXP earned (capped).
totalVolumeUsdstringCapped volume — what points are based on.
uncappedTotalVolumeUsdstringRaw traded volume (matches the on-site Total Volume column).
totalPnlUsd / totalPnlPercentstring / numberRealized PnL, if tracked.
totalLotteryRewardUsdstringLottery winnings to date.
challengesCompletednumberBonus challenges completed.
twitterConnectedbooleanWhether the trader linked X.
tradeCountnumberEligible trades.
projectedRewardUsdnumber|nullServer-computed projected payout.

Deal

FieldTypeDescription
slug / title / shortDescriptionstringIdentity + display copy.
type / statusenumDeal type (FEE_REBATE, THRESHOLD_REWARDS, …) + status.
urlstringCanonical Voltrade deal page.
venueobject|null{ name, slug, logo }.
rewardobject{ type, value, currency, description, payoutRail, partnerRewardName }.
requirementsobject{ minVolumeUsd, minTradeCount, minDepositUsd, newUsersOnly }.
startAt / endAt / claimDeadlineISO datetimeDeal window + claim deadline.
claimsobject{ max, maxPerUser, current, spotsLeft }.
dashboardEnabledbooleanWhether a leaderboard is available.
tiers / qualificationRules (detail only)array / objectThreshold tiers / hybrid qualification config.

Leaderboard entry (deal)

FieldTypeDescription
ranknumberPosition by volume progress.
walletAddress / displayName / traderSlugstringTrader identity.
volumeProgressUsdstringVolume traded toward the deal.
tradeCountProgressnumberQualifying trades.
rewardEarnedUsdstring|nullReward secured so far.
statusenumClaim status.
qualifiedAtISO datetime|nullWhen 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.