Getting started
Quickstart
Create a free account, copy your API key from the dashboard and make your first request:
curl "https://data4ai.xyz/api/v1/esports/results?game=counter-strike-2&limit=5" \
-H "X-Api-Key: YOUR_API_KEY"Common tasks
The fastest way to get what you need: pick a question and copy the request. Always pass game when you filter by team, so results of different games (CS2, LoL…) are never mixed.
Discover the dataset
What does the dataset cover right now?
Start here. Every game with its number of teams, tournaments, active tournaments and matches. Free — no credits used.
GET/api/v1/esports/games
Which teams are there in a game?
All teams of a game, strongest (Elo) first. Use offset to page through.
GET/api/v1/esports/teams?game=counter-strike-2&limit=100
Which tournaments are active now?
Tournaments of a game that still have matches to play or were played in the last 7 days.
GET/api/v1/esports/tournaments?game=counter-strike-2&status=active
Esports Results
Latest results of a team
Last matches of a team in one game, with scores, winner and both Elos. NAVI and Natus Vincere both work.
GET/api/v1/esports/results?game=counter-strike-2&team=Natus%20Vincere&limit=10
Upcoming matches with win probabilities
Next scheduled matches of a game, with Elo and market win probabilities for each side.
GET/api/v1/esports/matches/upcoming?game=league-of-legends&limit=10
A team's Elo and recent form
Find a team by name: Elo rating, region and last-10 form (wins, losses, streak).
GET/api/v1/esports/teams?game=dota-2&name=Aurora
Ranking of the strongest teams
Teams of a game sorted by Elo, strongest first.
GET/api/v1/esports/teams?game=valorant&sort=elo&limit=20
All results of a tournament
Finished matches of a tournament (partial name), newest first.
GET/api/v1/esports/results?game=counter-strike-2&tournament=ESL%20Pro%20League&limit=25
Freelancer Jobs
Freelance jobs by skill
Newest public freelance jobs with a given skill tag, with budget and location.
GET/api/v1/jobs/freelance?tag=react&limit=10
Want to try them without code? Open the API Playground →
Authentication
Authenticate every request with your API key in the X-Api-Key header. You can also use Authorization: Bearer <key>. Keep your key secret — rotate it from the dashboard if it leaks.
X-Api-Key: YOUR_API_KEYResponse format
Responses follow JSON:API conventions: a data array of resources (id, type, attributes) and a meta object with total, limit and offset.
Errors & credits
Only successful (2xx) responses consume credits. Every response includes X-Credits-Used and X-Credits-Limit headers.
Esports Results
Esports matches
Finished results (newest first) and upcoming matches (soonest first) share the same shape. Every call consumes 1 credit.
GET /api/v1/esports/results
Finished matches with score, winner and pre-match signals.
GET /api/v1/esports/matches/upcoming
Scheduled and live matches with win probabilities.
GET /api/v1/esports/matches/:id
A single match by id.
Query parameters
| game | enum | One of: counter-strike-2, league-of-legends, valorant, dota-2, age-of-empires, brawl-stars, ea-sports-fc |
| team | string | Team name, partial match |
| tournament | string | Tournament name, partial match |
| from | date | Match date from (YYYY-MM-DD), inclusive |
| to | date | Match date to (YYYY-MM-DD), inclusive |
| limit | integer | Results per page, 1–100 (default 25) |
| offset | integer | Pagination offset (default 0) |
Signals for prediction models
Each match includes both teams’ current Elo and a prediction object: elo_win_probability (from the Elo difference) and market_win_probability (implied by the prediction market). Values are [team1, team2] and sum to 1.
1{2 "data": [3 {4 "id": "cs2-iem-cologne-natus-vinc-team-vital-1006",5 "type": "esports_match",6 "attributes": {7 "game": "counter-strike-2",8 "tournament": "IEM Cologne",9 "tournament_tier": "S",10 "best_of": 3,11 "scheduled_at": "2026-10-06T15:00:00Z",12 "status": "finished",13 "teams": [14 { "id": "cs2-natus-vincere", "name": "Natus Vincere", "elo": 1612.4, "score": 1 },15 { "id": "cs2-team-vitality", "name": "Team Vitality", "elo": 1688.0, "score": 2 }16 ],17 "winner": "Team Vitality",18 "prediction": {19 "elo_win_probability": [0.393, 0.607],20 "market_win_probability": [0.426, 0.574]21 }22 }23 }24 ],25 "meta": { "total": 1840, "limit": 1, "offset": 0 }26}Games, teams & tournaments
Team strength and context: Elo rating, region, last-10 form (wins, losses, streak) and tournament metadata. The team profile also includes the current roster and achievements — placements, tier, prize money and a titles/podiums summary.
GET /api/v1/esports/games
Index of the dataset: per game, number of teams, tournaments, active tournaments and matches. Free (no credits).
GET /api/v1/esports/teams
Teams sorted by Elo, with recent form.
GET /api/v1/esports/teams/:id
Full team profile: recent results with scores, roster, achievements.
GET /api/v1/esports/tournaments
Tournaments with status (active / upcoming / finished), matches played and pending, tier and prize pool.
Query parameters — /esports/teams
| game | enum | One of: counter-strike-2, league-of-legends, valorant, dota-2, age-of-empires, brawl-stars, ea-sports-fc |
| name | string | Team name or short name, partial match |
| region | string | Region code: EU, NA, KR, CN, BR, CIS, APAC… |
| sort | elo · name | elo (default, strongest first) or name |
| limit | integer | Results per page, 1–100 (default 25) |
| offset | integer | Pagination offset (default 0) |
1{2 "data": {3 "id": "cs2-natus-vincere",4 "type": "esports_team",5 "attributes": {6 "name": "Natus Vincere",7 "short_name": "NAVI",8 "game": "counter-strike-2",9 "region": "EU",10 "elo": 1612.4,11 "form": { "last_n": 10, "wins": 6, "losses": 4, "win_rate": 0.6, "streak": "LWWLWWLWWL" },12 "recent_results": [13 { "opponent": "VIT", "score": "1-2", "win": false, "date": "2026-10-06T15:00:00Z", "tournament": "IEM Cologne" }14 ],15 "roster": [16 { "name": "s1mple", "real_name": "Oleksandr Kostyliev", "role": null, "nationality": "Ukraine", "join_date": "2016-08-04" }17 ],18 "achievements": [19 { "tournament": "IEM Cologne 2026", "tier": "S-Tier", "place": "1st", "place_num": 1, "prize": "$400,000", "prize_usd": 400000, "final_opponent": "Vitality", "final_score": "2:1", "date": "2026-06-22" }20 ],21 "achievements_summary": { "count": 10, "titles": 3, "podiums": 6, "total_prize_usd": 1250000 }22 }23 }24}Query parameters — /esports/tournaments
| game | enum | One of: counter-strike-2, league-of-legends, valorant, dota-2, age-of-empires, brawl-stars, ea-sports-fc |
| status | active · upcoming · finished | active (matches still to play or played in the last 7 days), upcoming or finished |
| name | string | Tournament name, partial match |
| limit | integer | Results per page, 1–100 (default 25) |
| offset | integer | Pagination offset (default 0) |
1{2 "data": [3 {4 "id": "counter-strike-2",5 "type": "esports_game",6 "attributes": {7 "name": "Counter-Strike 2",8 "teams": 93,9 "tournaments": 49,10 "active_tournaments": 6,11 "finished_matches": 268,12 "upcoming_matches": 5,13 "last_match_at": "2026-10-09T08:30:00Z"14 }15 }16 ]17}Freelancer Jobs
Freelance jobs
Public freelance postings only — drafts and private hires are never returned. Each call consumes 1 credit.
GET /api/v1/jobs/freelance
Public freelance jobs, newest first.
GET /api/v1/jobs/freelance/:id
A single job with full description and how to apply.
Query parameters
| q | string | Text to search in the job title |
| category | string | Exact category |
| tag | string | Skill tag, e.g. react |
| job_type | string | Exact job type |
| location | string | Location, partial match (e.g. worldwide) |
| language | string | Posting language: en, es, de… |
| min_budget | number | Minimum budget (max of the range ≥ value) |
| freelance | boolean | true / false |
| from | date | Published from (YYYY-MM-DD) |
| to | date | Published to (YYYY-MM-DD) |
| limit | integer | Results per page, 1–100 (default 25) |
| offset | integer | Pagination offset (default 0) |
curl "https://data4ai.xyz/api/v1/jobs/freelance?tag=react&limit=1" \
-H "X-Api-Key: YOUR_API_KEY"1{2 "data": [3 {4 "id": "1b4e28ba-2fa1-11d2-883f-0016d3cca427",5 "type": "freelance_job",6 "attributes": {7 "title": "React developer for SaaS dashboard",8 "company": { "name": "Acme", "logo_url": null },9 "category": "development",10 "job_type": "freelance",11 "published_at": "2026-10-07T10:00:00Z",12 "location": "Worldwide",13 "budget": { "min": 500, "max": 1500, "currency": "USD", "pricing": "fixed" },14 "tags": ["react", "typescript"],15 "language": "en",16 "freelance": true,17 "apply_url": "https://..."18 }19 }20 ],21 "meta": { "total": 312, "limit": 1, "offset": 0 }22}MCP (AI agents)
MCP server
POST /mcp
Our remote MCP server exposes the same data as tools for AI agents over Streamable HTTP. Claude, ChatGPT and Claude Code connect with OAuth (log in and approve); other clients can send the API key as a Bearer token. Tool calls are billed like API calls.
Available tools
{
"mcpServers": {
"data4ai": {
"url": "https://data4ai.xyz/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}