Skip to main content

API Documentation

Access Apex Legends ban tracking data, player stats, match history, leaderboards, map rotation, and server status via our REST API.

Get API Key

Base URL

https://apexbantracker.com/api/v1

Quick Start

Get up and running in under a minute. Here's how to make your first API call:

1. Get your API key

Sign up and subscribe to a plan from the developer dashboard. You'll receive an API key starting with bp_.

2. Make a request

Pass your API key in the Authorization header:

curl -X GET "https://apexbantracker.com/api/v1/stats" \
  -H "Authorization: Bearer bp_your_api_key_here"

3. Parse the JSON response

{
  "totalTrackedPlayers": 15000,
  "masterPlusPlayers": 5000,
  "bannedPlayers": 1250,
  "activePlayers": 13750
}

Code Examples

Python

import requests

API_KEY = "bp_your_api_key_here"
BASE_URL = "https://apexbantracker.com/api/v1"

headers = {"Authorization": f"Bearer {API_KEY}"}

# Get player by UID
response = requests.get(f"{BASE_URL}/player/1234567890", headers=headers)
player = response.json()
print(f"{player['username']} - Rank: {player['rankTier']} ({player['rankScore']} RP)")

# Search for players
response = requests.get(
    f"{BASE_URL}/players/search",
    params={"q": "ninja", "limit": 5},
    headers=headers
)
for p in response.json():
    print(f"  {p['username']} ({p['platform']}) - {p['rankScore']} RP")

JavaScript / Node.js

const API_KEY = "bp_your_api_key_here";
const BASE_URL = "https://apexbantracker.com/api/v1";

const headers = { Authorization: `Bearer ${API_KEY}` };

// Get player by UID
const playerRes = await fetch(
  `${BASE_URL}/player/1234567890?platform=PC`, { headers }
);
const player = await playerRes.json();
console.log(`${player.username} - ${player.rankTier} (${player.rankScore} RP)`);

// Get recent bans
const bansRes = await fetch(`${BASE_URL}/bans/recent?limit=5`, { headers });
const bans = await bansRes.json();
bans.forEach(b => console.log(`${b.username} banned at ${b.bannedAt}`));

C# / .NET

using var client = new HttpClient();
client.DefaultRequestHeaders.Add(
    "Authorization", "Bearer bp_your_api_key_here"
);

var baseUrl = "https://apexbantracker.com/api/v1";

// Get player by UID
var playerJson = await client.GetStringAsync(
    $"{baseUrl}/player/1234567890?platform=PC"
);
Console.WriteLine(playerJson);

// Get leaderboard
var leaderboardJson = await client.GetStringAsync(
    $"{baseUrl}/leaderboard?platform=PC&pageSize=10"
);
Console.WriteLine(leaderboardJson);

Authentication

All API requests require a valid API key. You can pass your key using any of these methods:

Authorization Header

Recommended
Authorization: Bearer bp_your_api_key_here

X-Api-Key Header

X-Api-Key: bp_your_api_key_here

Query Parameter

GET /api/v1/stats?api_key=bp_your_api_key_here

Note: Query parameter auth is less secure as the key may appear in server logs. Use headers when possible.

Plans & Pricing

Simple monthly plans, cancel anytime. Every plan includes the full endpoint set — ban data, player profiles, leaderboards, map rotation, and server status — the tiers differ only in rate limits.

Basic

$5/month

For hobbyist developers and small projects

  • 2 requests/second
  • 1,000 requests/day
  • 30,000 requests/month
  • All endpoints included
Subscribe

Pro

Popular

$10/month

For professional developers and growing applications

  • 5 requests/second
  • 10,000 requests/day
  • 300,000 requests/month
  • All endpoints included
Subscribe

Enterprise

$15/month

For large-scale applications and commercial use

  • 15 requests/second
  • 100,000 requests/day
  • 3,000,000 requests/month
  • All endpoints included
Subscribe

Ban, unban, EAC-update, and ban-wave Discord webhook alerts are free with any account — no API plan required. Need higher limits or a custom agreement? Get in touch.

Rate Limits

Rate limits are enforced per API key and vary by your subscription plan. When you exceed a limit, you'll receive a 429 response with a Retry-After header.

PlanPricePer SecondPer DayPer Month
Basic$5/mo2 req/s1,000 req/day30,000 req/month
Pro$10/mo5 req/s10,000 req/day300,000 req/month
Enterprise$15/mo15 req/s100,000 req/day3,000,000 req/month

To subscribe, create a key from the Developer Dashboard — see Plans & Pricing above.

Response Headers

Every API response includes these headers so you can track your usage:

X-RateLimit-Plan: pro
X-RateLimit-Limit-Day: 10000
X-RateLimit-Limit-Second: 5

Error Codes

All errors return a JSON object with error and code fields:

{
  "error": "Daily request limit of 1000 exceeded",
  "code": "DAILY_LIMIT"
}
HTTP StatusCodeDescription
401MISSING_API_KEYNo API key was provided in the request
401INVALID_KEYThe API key does not exist or is malformed
403KEY_SUSPENDEDAPI key is suspended due to a payment issue
403KEY_EXPIREDThe subscription associated with this key has expired
403KEY_REVOKEDThis API key has been revoked by the owner
429DAILY_LIMITYou have exceeded your plan's daily request limit
429MONTHLY_LIMITYou have exceeded your plan's monthly request limit
404-The requested resource was not found
500-An unexpected server error occurred

Endpoints

All endpoints return JSON. Timestamps are in UTC ISO 8601 format.

GET/api/v1/player/{uid}

Get detailed player information by UID. Returns rank, ban status, online status, current legend, and more.

Parameters

NameLocationTypeRequiredDescription
uidpathstringYesThe player's unique identifier (numeric UID)
platformquerystringNoPlatform filter: PC, PS4, X1, or Switch. Defaults to all platforms.

Example Request

curl -X GET "https://apexbantracker.com/api/v1/player/1234567890?platform=PC" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "uid": "1234567890",
  "username": "ExamplePlayer",
  "platform": "PC",
  "rankScore": 18500,
  "rankTier": "Master",
  "rankLadderPosition": 342,
  "isMasterOrAbove": true,
  "isPredator": false,
  "isBanned": false,
  "bannedAt": null,
  "unbannedAt": null,
  "banCount": 0,
  "currentLegend": "Wraith",
  "accountLevel": 500,
  "isOnline": true,
  "isInMatch": false,
  "lastUpdated": "2026-03-17T12:00:00Z"
}
GET/api/v1/players/search

Search for players by username. Returns a list of matching players sorted by rank score (highest first).

Parameters

NameLocationTypeRequiredDescription
qquerystringYesUsername to search for (case-insensitive, partial match)
limitqueryintegerNoMaximum number of results to return. Range: 1-100, default: 25

Example Request

curl -X GET "https://apexbantracker.com/api/v1/players/search?q=ninja&limit=10" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "uid": "1234567890",
    "username": "ExamplePlayer",
    "platform": "PC",
    "rankScore": 18500,
    "ladderPosition": 342,
    "isBanned": false,
    "isOnline": true,
    "currentLegend": "Wraith",
    "accountLevel": 500
  }
]
GET/api/v1/players/trending

Get the most-looked-up players over a rolling window, ranked by lookup count.

Parameters

NameLocationTypeRequiredDescription
limitqueryintegerNoMaximum number of results. Range: 1-25, default: 8
windowHoursqueryintegerNoRolling window in hours. Range: 1-168, default: 24

Example Request

curl -X GET "https://apexbantracker.com/api/v1/players/trending?limit=5&windowHours=24" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "uid": "1234567890",
    "platform": "PC",
    "username": "ExamplePlayer",
    "rankScore": 18500,
    "rankLadderPosition": 342,
    "rankTier": "Master",
    "isPredator": false,
    "isBanned": false,
    "lookupCount": 57
  }
]
GET/api/v1/player/{uid}/ban-history

Get the ban/unban event history for a specific player. Returns up to 50 events, newest first.

Parameters

NameLocationTypeRequiredDescription
uidpathstringYesThe player's unique identifier (numeric UID)

Example Request

curl -X GET "https://apexbantracker.com/api/v1/player/1234567890/ban-history" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "eventType": "BAN",
    "eventDate": "2026-02-15T08:30:00Z",
    "rankScoreAtBan": 22000,
    "ladderPositionAtBan": 45,
    "banSeconds": 0
  },
  {
    "eventType": "UNBAN",
    "eventDate": "2026-03-01T14:00:00Z",
    "rankScoreAtBan": null,
    "ladderPositionAtBan": null,
    "banSeconds": 0
  }
]
GET/api/v1/player/{uid}/matches

Get a player's ranked match history with RP changes, legends used, and kill estimates. Newest first.

Parameters

NameLocationTypeRequiredDescription
uidpathstringYesThe player's unique identifier (numeric UID)
limitqueryintegerNoMaximum number of results. Range: 1-100, default: 50
offsetqueryintegerNoNumber of results to skip for pagination. Default: 0

Example Request

curl -X GET "https://apexbantracker.com/api/v1/player/1234567890/matches?limit=25" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "rpChange": 120,
    "finalRp": 18620,
    "finalLadderPosition": 339,
    "legend": "Wraith",
    "matchTime": "2026-03-17T11:20:00Z",
    "estimatedKills": {
      "minKills": 3,
      "maxKills": 6,
      "mostLikelyKills": 4,
      "mostLikelyPlacement": 2,
      "minPlacement": 2,
      "maxPlacement": 3,
      "confidence": "medium"
    }
  }
]
GET/api/v1/player/{uid}/rp-history

Get a player's all-time RP curve, downsampled to one point per UTC day (the day's final match).

Parameters

NameLocationTypeRequiredDescription
uidpathstringYesThe player's unique identifier (numeric UID)

Example Request

curl -X GET "https://apexbantracker.com/api/v1/player/1234567890/rp-history" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "date": "2026-03-16T00:00:00Z",
    "rp": 18500,
    "ladderPosition": 342
  },
  {
    "date": "2026-03-17T00:00:00Z",
    "rp": 18620,
    "ladderPosition": 339
  }
]
GET/api/v1/player/{uid}/aliases

Get the full username (alias) history recorded for a player, newest first.

Parameters

NameLocationTypeRequiredDescription
uidpathstringYesThe player's unique identifier (numeric UID)
platformquerystringNoPlatform filter: PC, PS4, X1, or Switch. Defaults to all platforms.

Example Request

curl -X GET "https://apexbantracker.com/api/v1/player/1234567890/aliases" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "username": "CurrentName",
    "firstSeenAt": "2026-02-01T10:00:00Z",
    "lastSeenAt": "2026-03-17T12:00:00Z"
  },
  {
    "username": "OldName",
    "firstSeenAt": "2025-11-12T08:00:00Z",
    "lastSeenAt": "2026-01-31T22:00:00Z"
  }
]
GET/api/v1/bans

Get all currently banned players with pagination. Returns players with negative ladder positions (banned by EAC).

Parameters

NameLocationTypeRequiredDescription
pagequeryintegerNoPage number, starting from 1. Default: 1
pageSizequeryintegerNoNumber of results per page. Range: 1-100, default: 50

Example Request

curl -X GET "https://apexbantracker.com/api/v1/bans?page=1&pageSize=25" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "totalCount": 1250,
  "page": 1,
  "pageSize": 25,
  "totalPages": 50,
  "players": [
    {
      "uid": "9876543210",
      "username": "BannedPlayer",
      "platform": "PC",
      "rankScore": 20000,
      "rankTier": "Master",
      "rankLadderPosition": -1,
      "isBanned": true,
      "bannedAt": "2026-03-10T14:00:00Z",
      "banCount": 2,
      "lastUpdated": "2026-03-17T08:00:00Z"
    }
  ]
}
GET/api/v1/bans/recent

Get the most recently banned players. Useful for monitoring new bans as they happen.

Parameters

NameLocationTypeRequiredDescription
limitqueryintegerNoMaximum number of results. Range: 1-100, default: 10

Example Request

curl -X GET "https://apexbantracker.com/api/v1/bans/recent?limit=5" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "uid": "9876543210",
    "username": "RecentlyBanned",
    "platform": "PC",
    "rankScore": 19000,
    "rankTier": "Master",
    "rankLadderPosition": -1,
    "bannedAt": "2026-03-17T10:00:00Z",
    "banCount": 1,
    "lastUpdated": "2026-03-17T10:05:00Z"
  }
]
GET/api/v1/bans/recent-unbans

Get players who were recently unbanned. Useful for tracking false-positive ban reversals.

Parameters

NameLocationTypeRequiredDescription
limitqueryintegerNoMaximum number of results. Range: 1-100, default: 10

Example Request

curl -X GET "https://apexbantracker.com/api/v1/bans/recent-unbans?limit=5" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "uid": "5555555555",
    "username": "RecentlyUnbanned",
    "platform": "PC",
    "rankScore": 17000,
    "rankTier": "Master",
    "rankLadderPosition": 200,
    "unbannedAt": "2026-03-16T20:00:00Z",
    "banCount": 1,
    "lastUpdated": "2026-03-16T20:05:00Z"
  }
]
GET/api/v1/bans/search

Search within banned players by username or UID.

Parameters

NameLocationTypeRequiredDescription
qquerystringYesUsername or UID to search for (case-insensitive, partial match)
limitqueryintegerNoMaximum number of results. Range: 1-100, default: 50

Example Request

curl -X GET "https://apexbantracker.com/api/v1/bans/search?q=cheater&limit=10" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "uid": "9876543210",
    "username": "BannedPlayer",
    "platform": "PC",
    "rankScore": 20000,
    "rankTier": "Master",
    "rankLadderPosition": -1,
    "isBanned": true,
    "bannedAt": "2026-03-10T14:00:00Z",
    "banCount": 2,
    "lastUpdated": "2026-03-17T08:00:00Z"
  }
]
GET/api/v1/bans/most-banned

Get the players with the highest all-time ban counts (repeat offenders with 2+ bans), sorted by ban count.

Parameters

NameLocationTypeRequiredDescription
limitqueryintegerNoMaximum number of results. Range: 1-50, default: 10

Example Request

curl -X GET "https://apexbantracker.com/api/v1/bans/most-banned?limit=10" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

[
  {
    "uid": "9876543210",
    "username": "RepeatOffender",
    "tag": null,
    "platform": "PC",
    "rankTier": "ApexPredator",
    "rankScore": 22000,
    "isPredator": true,
    "isBanned": true,
    "banCount": 5,
    "lastBannedAt": "2026-03-15T09:00:00Z"
  }
]
GET/api/v1/leaderboard

Get the ranked leaderboard for a specific platform. Returns top players sorted by ladder position.

Parameters

NameLocationTypeRequiredDescription
platformquerystringNoPlatform to query: PC, PS4, X1, or Switch. Default: PC
pagequeryintegerNoPage number, starting from 1. Default: 1
pageSizequeryintegerNoResults per page. Range: 1-100, default: 50

Example Request

curl -X GET "https://apexbantracker.com/api/v1/leaderboard?platform=PC&page=1&pageSize=10" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "platform": "PC",
  "totalCount": 750,
  "page": 1,
  "pageSize": 10,
  "predatorThresholdRp": 25000,
  "predatorCount": 750,
  "masterCount": 5000,
  "players": [
    {
      "uid": "1111111111",
      "username": "TopPredator",
      "platform": "PC",
      "rankScore": 35000,
      "rankTier": "Apex Predator",
      "rankLadderPosition": 1,
      "currentLegend": "Bangalore",
      "isOnline": false,
      "isInMatch": false,
      "accountLevel": 500,
      "lastUpdated": "2026-03-17T11:30:00Z"
    }
  ]
}
GET/api/v1/leaderboard/movers

Get the biggest RP gainers and losers over a rolling window, aggregated from recent matches.

Parameters

NameLocationTypeRequiredDescription
platformquerystringNoPlatform to query: PC, PS4, X1, or Switch. Default: PC
windowHoursqueryintegerNoRolling window in hours. Range: 1-24, default: 1
limitqueryintegerNoMaximum gainers/losers each. Range: 1-50, default: 5

Example Request

curl -X GET "https://apexbantracker.com/api/v1/leaderboard/movers?platform=PC&windowHours=1&limit=5" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "gainers": [
    {
      "uid": "1111111111",
      "username": "OnAHeater",
      "platform": "PC",
      "rankScore": 26000,
      "rankLadderPosition": 120,
      "rankTier": "Apex Predator",
      "isPredator": true,
      "rpDelta": 480,
      "matchCount": 6,
      "rpHistory": [
        80,
        95,
        60,
        120,
        75,
        50
      ],
      "isInMatch": true
    }
  ],
  "losers": [
    {
      "uid": "2222222222",
      "username": "RoughNight",
      "platform": "PC",
      "rankScore": 24500,
      "rankLadderPosition": 300,
      "rankTier": "Apex Predator",
      "isPredator": true,
      "rpDelta": -260,
      "matchCount": 5,
      "rpHistory": [
        -60,
        -40,
        -80,
        -30,
        -50
      ],
      "isInMatch": false
    }
  ],
  "windowHours": 1
}
GET/api/v1/predator-cutoff

Get the current Apex Predator RP cutoff for a platform, plus Predator and Master player counts. Lightweight alternative to pulling a full leaderboard page.

Parameters

NameLocationTypeRequiredDescription
platformquerystringNoPlatform to query: PC, PS4, X1, or Switch. Default: PC

Example Request

curl -X GET "https://apexbantracker.com/api/v1/predator-cutoff?platform=PC" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "platform": "PC",
  "predatorThresholdRp": 25000,
  "predatorCount": 750,
  "masterCount": 5000,
  "generatedAt": "2026-03-17T12:00:00Z"
}
GET/api/v1/map-rotation

Get the current and upcoming ranked map rotation. Maps cycle in a fixed order on 4.5 hour slots.

Example Request

curl -X GET "https://apexbantracker.com/api/v1/map-rotation" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "current": {
    "map": "E-District",
    "startedAt": "2026-03-17T09:30:00Z",
    "endsAt": "2026-03-17T14:00:00Z",
    "remainingSeconds": 7200
  },
  "upcoming": [
    {
      "map": "Storm Point",
      "startsAt": "2026-03-17T14:00:00Z",
      "endsAt": "2026-03-17T18:30:00Z"
    },
    {
      "map": "World's Edge",
      "startsAt": "2026-03-17T18:30:00Z",
      "endsAt": "2026-03-17T23:00:00Z"
    }
  ],
  "rotation": [
    "World's Edge",
    "E-District",
    "Storm Point"
  ],
  "slotDurationHours": 4.5
}
GET/api/v1/stats

Get overall platform statistics. Returns aggregate counts of tracked, banned, and active players.

Example Request

curl -X GET "https://apexbantracker.com/api/v1/stats" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "totalTrackedPlayers": 15000,
  "masterPlusPlayers": 5000,
  "bannedPlayers": 1250,
  "activePlayers": 13750
}
GET/api/v1/stats/ban-stats

Get detailed aggregated ban statistics: current vs all-time bans, Predator vs Master splits, temp bans, repeat offenders, and last-24h activity.

Example Request

curl -X GET "https://apexbantracker.com/api/v1/stats/ban-stats" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "totalBans": 1250,
  "allTimeBans": 3400,
  "predatorBans": 400,
  "masterBans": 700,
  "otherBans": 150,
  "tempBans": 120,
  "repeatOffenders": 90,
  "last24Hours": 35
}
GET/api/v1/stats/rank-distribution

Get the rank tier distribution for a platform, from Apex Predator down to Rookie IV. Note: this covers the tracked population, which skews heavily toward Predator/Master.

Parameters

NameLocationTypeRequiredDescription
platformquerystringNoPlatform to query: PC, PS4, X1, or Switch. Default: PC

Example Request

curl -X GET "https://apexbantracker.com/api/v1/stats/rank-distribution?platform=PC" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "platform": "PC",
  "population": 14000,
  "notSeenThisSplit": 3200,
  "predatorCount": 750,
  "masterCount": 5000,
  "predatorThresholdRp": 25000,
  "medianRp": 17200,
  "p90Rp": 24000,
  "maxRp": 35000,
  "buckets": [
    {
      "label": "Apex Predator",
      "tier": "Predator",
      "minRp": 25000,
      "count": 750,
      "percent": 5.4
    },
    {
      "label": "Master",
      "tier": "Master",
      "minRp": 16000,
      "count": 5000,
      "percent": 35.7
    }
  ],
  "generatedAt": "2026-03-17T12:00:00Z"
}
GET/api/v1/lobbies/recent

Get recently-finished Predator lobbies — which tracked Predators were in the same match, with confirmed squads.

Parameters

NameLocationTypeRequiredDescription
limitqueryintegerNoMaximum number of lobbies. Range: 1-50, default: 12

Example Request

curl -X GET "https://apexbantracker.com/api/v1/lobbies/recent?limit=5" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "lobbies": [
    {
      "lobbyId": "PC:1774000000",
      "platform": "PC",
      "startedAt": "2026-03-17T11:00:00Z",
      "endedAt": "2026-03-17T11:22:00Z",
      "trackedPredatorCount": 6,
      "confirmedSquadCount": 2,
      "members": [
        {
          "uid": "1111111111",
          "username": "TopPredator",
          "platform": "PC",
          "ladderPosition": 1,
          "rankScore": 35000,
          "rankTier": "Apex Predator",
          "currentLegend": "Bangalore",
          "isPartyFull": true,
          "isJoinable": false,
          "squadId": "S1",
          "anchorApproximate": false
        }
      ]
    }
  ]
}
GET/api/v1/status/servers

Get live Apex game server status from the most recent probe cycle, grouped by category.

Example Request

curl -X GET "https://apexbantracker.com/api/v1/status/servers" \
  -H "Authorization: Bearer bp_your_api_key_here"

Example Response

{
  "checkedAt": "2026-03-17T12:00:00Z",
  "categories": [
    {
      "category": "EA Login",
      "endpoints": [
        {
          "category": "EA Login",
          "name": "US East",
          "host": "example.ea.com",
          "port": 443,
          "status": "up",
          "latencyMs": 23
        }
      ]
    }
  ]
}

Try it out

See API requests in action. The terminal below shows live example calls.

apexbantracker-api
$

Request & Response

Here's what a typical API call looks like — request on the left, response on the right.

Request (cURL)
curl -X GET "https://apexbantracker.com/api/v1/player/1234567890" \
  -H "Authorization: Bearer bp_your_api_key_here" \
  -H "Content-Type: application/json"
Response (JSON)
{
  "uid": "1234567890",
  "username": "ExamplePlayer",
  "platform": "PC",
  "rankScore": 18500,
  "rankTier": "Master",
  "rankLadderPosition": 342,
  "isBanned": false,
  "banCount": 0,
  "isOnline": true,
  "currentLegend": "Wraith"
}