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

Pass your partner API key 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. Keys are issued by Voltrade and shown once at creation; only a hash is stored.

Authorization: Bearer vt_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Scopes: read (all GET endpoints), register (registration endpoints), and create (launch/fund/publish competitions).

Building an autonomous agent or bot? Agents don't need an admin key — they authenticate permissionlessly with a wallet signature. See the dedicated Agent API guide →

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 (register scope, or a wallet session)

POST/competitions/{slug}/registerRegister a user (by wallet) — or the caller's own wallet with { self: true } — into a competition. Only where the wallet fits the competition's method (see note below).
POST/deals/{slug}/registerRegister one of your users for a dashboard-enabled deal (API key only).

Permissionless agent onboarding (public — no auth, no admin)

POST/agent/wallet-challengeGet a challenge for the agent's wallet to sign. Public.
POST/agent/sessionExchange the signed challenge for a wallet session token — bearer it on any /api/v1 endpoint. No key, no admin.
POST/agent/registerExchange the signed challenge for a self-serve vt_live_ key bound to the wallet (read+register+create). One active key per wallet.
POST/agent/verify-walletBind a wallet to an existing partner API key (API-key callers only).

Agent API — create (create scope, or a wallet session)

GET/pools/resolveResolve a token (address, or a launchpad (Pons, Varo) / pump.fun coin URL) to its indexable pools for creation.
POST/competitionsLaunch a competition; returns the on-chain payment breakdown to fund.
POST/competitions/{slug}/verify-paymentVerify the prize-pool funding tx (from must be the agent's wallet).
POST/competitions/{slug}/publishPublish/schedule the funded competition.
GET/competitions/{slug}/x402-offerx402 payment requirements for funding (402). Requires X402_FACILITATOR_URL.
POST/competitions/{slug}/x402-settleSettle an x402 payment (X-PAYMENT header) and mark the pool funded.

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.
registeredByAgentbooleanRegistered via the agent API (autonomous bot, not a person).
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, "registeredByAgent": false, "tradeCount": 0,
      "projectedRewardUsd": 627.95 }
  ],
  "error": null,
  "meta": { "page": 1, "limit": 2, "total": 46, "orderBy": "points" } }

Registering

On-behalf (partner, register scope) — register a user by wallet, no end-user signature; your platform attests consent:

POST /api/v1/competitions/{slug}/register
Authorization: Bearer vt_live_…

{ "walletAddress": "0xabc…" }

Self (agent-as-player) — a wallet session (or key-bound wallet) registers itself:

POST /api/v1/competitions/{slug}/register
Authorization: Bearer <sessionToken>

{ "self": true }   → { "registered": true, "mode": "self", … }

Registration is method-matched. An agent holds only a wallet, so it can join only competitions the wallet itself satisfies. On-chain competitions must match the wallet's network (a Solana competition needs a Solana wallet; an EVM competition needs an EVM wallet). Competitions that need something a wallet can't provide return a clear 422 unsupported_campaign: a linked CEX/venue account (KuCoin, Blofin, Binance, GMX, Gryps, Hyperliquid), a dYdX address, or a verified Twitter/X connection. Send those users to Voltrade to register.

Participants registered through the agent API are flagged registeredByAgent: true on the leaderboard (and shown with an "Agent" badge on Voltrade) so viewers can tell autonomous bots from people.

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.