---
updatedAt: 2026-06-11T14:40:07.000Z
agentTools:
  projectIndex: https://developers.pandascore.co/llms.txt
---

# Getting started

This page will walk you through everything you need to know to get up and running with the API

## 1. How the data is structured

Before making your first request, it's worth understanding how PandaScore organises esports data. Everything flows from the top down:

**League → Series → Tournament → Match → Game**

* A **League** is the top-level competition (e.g. *ESL Pro League*).
* A **Series** is a single time-bound occurrence of that league (e.g. *ESL Pro League Season 21*).
* A **Tournament** is a stage within that series (e.g. *Group Stage*, *Playoffs*).
* A **Match** is a head-to-head between two teams within a tournament.
* A **Game** is a single map or game within that match (e.g. Map 1 of a best-of-3).

📖 Full breakdown: [Fundamentals](https://developers.pandascore.co/docs/fundamentals)

***

## 2. Authentication

All API requests require your token, passed as a query parameter:

```
https://api.pandascore.co/matches/upcoming?token=YOUR_TOKEN
```

You can find your token in your [PandaScore dashboard](https://app.pandascore.co/dashboard/main).

📖 Full details: [Authentication](https://developers.pandascore.co/docs/authentication) | [Rate & connection limits](https://developers.pandascore.co/docs/rate-and-connections-limits)

***

## 3. Key concepts to know before you build

These three topics come up in almost every integration. Read them before you start polling:

### Match lifecycle & the `complete` field

Matches move through several statuses (`not_started` → `running` → `finished`). For matches with detailed statistics, there's an additional field you need to know about: **`complete`**.

* `complete = false` after a game finishes means post-game statistics are still being processed. **Do not consume stats yet.**
* `complete = true` means statistics are finalised and ready to use.

📖 [Match lifecycle](https://developers.pandascore.co/docs/matches-lifecycle) | [Match formats](https://developers.pandascore.co/docs/match-formats)

***

### Coverage levels: `detailed_stats` and `live_supported`

Not every tournament has the same level of coverage. Two fields tell you exactly what to expect:

| Field            | Value   | What it means                                                |
| ---------------- | ------- | ------------------------------------------------------------ |
| `detailed_stats` | `false` | Fixtures and results only — no post-game statistics          |
| `detailed_stats` | `true`  | Full post-game statistics will be available                  |
| `live_supported` | `true`  | In-game live data is available for this tournament's matches |

Use these as filters to fetch tournaments relevant to your use case. For example, to get only live-supported upcoming tournaments:

```
GET /tournaments/upcoming?filter[live_supported]=true
```

Or to only get matches that will have statistics:

```
GET /matches/upcoming?filter[detailed_stats]=true
```

📖 [Filtering and sorting](https://developers.pandascore.co/docs/filtering-and-sorting) | [Tournaments in-depth](https://developers.pandascore.co/docs/tournaments-in-depth)

***

### Pagination

API responses are paginated by default (50 results per page). Use `page` and `per_page` parameters to navigate:

```
GET /matches/upcoming?page=2&per_page=100
```

`per_page` maximum is 100.

📖 [Pagination](https://developers.pandascore.co/docs/pagination)

***

## 4. Fixtures & schedule endpoints

These endpoints are available on **all plans** and form the backbone of any integration.

### Matches

| What you need          | Endpoint                      |
| ---------------------- | ----------------------------- |
| Upcoming matches       | `GET /matches/upcoming`       |
| Live / running matches | `GET /matches/running`        |
| Past matches           | `GET /matches/past`           |
| A specific match       | `GET /matches/{id}`           |
| Match opponents        | `GET /matches/{id}/opponents` |

📖 [API Reference — Matches](https://developers.pandascore.co/reference/get_matches_upcoming)

***

### Tournaments, leagues & series

| What you need           | Endpoint                          |
| ----------------------- | --------------------------------- |
| Upcoming tournaments    | `GET /tournaments/upcoming`       |
| Tournament standings    | `GET /tournaments/{id}/standings` |
| Tournament brackets     | `GET /tournaments/{id}/brackets`  |
| Tournament rosters      | `GET /tournaments/{id}/rosters`   |
| Matches in a tournament | `GET /tournaments/{id}/matches`   |
| List all leagues        | `GET /leagues`                    |
| Matches in a league     | `GET /leagues/{id}/matches`       |
| List all series         | `GET /series`                     |

📖 [API Reference — Tournaments](https://developers.pandascore.co/reference/get_tournaments_upcoming)

***

### Players & teams

| What you need                 | Endpoint                        |
| ----------------------------- | ------------------------------- |
| A specific player             | `GET /players/{id}`             |
| A specific team               | `GET /teams/{id}`               |
| A player's match history      | `GET /players/{id}/matches`     |
| A player's tournament history | `GET /players/{id}/tournaments` |
| A team's match history        | `GET /teams/{id}/matches`       |
| A team's series history       | `GET /teams/{id}/series`        |

<Callout icon="💡" theme="default">
  ### **Tip:** To trace a player's team history across their career, use `GET /players/{id}/tournaments` — this returns the team they played for in each tournament, which is the most reliable way to track roster changes.
</Callout>

📖 [API Reference — Players](https://developers.pandascore.co/reference/get_players_playeridorslug) | [Teams](https://developers.pandascore.co/reference/get_teams_teamidorslug)

***

### Currently live matches (WebSocket)

| What you need                             | Endpoint     |
| ----------------------------------------- | ------------ |
| All currently open live WebSocket streams | `GET /lives` |

This endpoint lists all matches currently streaming live data, including the WebSocket URLs for frames and events. WebSocket connections open **15 minutes before** the scheduled match start time.

📖 [API Reference — Lives](https://developers.pandascore.co/reference/get_lives) | [WebSockets overview](https://developers.pandascore.co/docs/websockets-overview)

***

## 5. Keeping your data in sync

If you're building a database or pipeline, you don't need to re-poll every endpoint to catch updates. The **incidents feed** gives you a stream of all changes, additions, and deletions across the API — think of it like a changelog you can poll regularly.

| What you need                             | Endpoint         |
| ----------------------------------------- | ---------------- |
| All recent changes, additions & deletions | `GET /incidents` |
| Only new additions                        | `GET /additions` |
| Only updated objects                      | `GET /changes`   |
| Only deleted objects                      | `GET /deletions` |

This covers everything: match reschedules, roster changes, score corrections, tournament updates. Available on **all plans**.

📖 [API Reference — Incidents](https://developers.pandascore.co/reference/get_incidents) | [Tracking changes](https://developers.pandascore.co/docs/tracking-changes)

***

## 6. CS2 endpoint naming

One thing that trips up almost every CS2 integration: **all CS2 endpoints use the `/csgo/` prefix**, not `/cs2/`. This is for legacy reasons and applies across the board:

```
GET /csgo/matches/upcoming
GET /csgo/games/{id}
GET /csgo/players/{id}/stats
```

📖 [Counter-Strike 2 migration guide](https://developers.pandascore.co/docs/counter-strike-2-migration)

***

## 7. Testing with the Sandbox

If you're on the **Pro Live plan**, you don't need to wait for a live match to test your WebSocket integration. The sandbox lets you replay a CS or LoL game on demand at adjustable speeds.

**Start a LoL replay:**

```
POST https://live.pandascore.co/api/lol/replay
```

**Start a CS replay:**

```
POST https://live.pandascore.co/api/csgo/replay
```

Both return WebSocket URLs for frames and events. You can control `playback_speed` (1×, 1.5×, 2×) and set a starting point in-game (`ingame_timestamp` for LoL, `round_number` for CS).

📖 [Sandbox environment](https://developers.pandascore.co/docs/sandbox-environment)

***

## 8. Frequently asked questions

Browse common integration questions, including:

* When will post-game stats be available after a match?
* What is a game advantage?
* Why am I getting a CORS error?
* How do I find player team history?

📖 [FAQ](https://developers.pandascore.co/docs/frequently-asked-questions)

***

## 10. Get support

The fastest way to get help is to join our Slack community. Once you're in, we'll set up a private channel for you and your team — it's the best place to ask API questions, flag data issues, and give feedback.

👉 [Join the PandaScore Slack](https://join.slack.com/t/pandascore/shared_invite/zt-3ljcjj4mo-5q0ON2~qdef5umvzqq3mZw)

***

## What's next?

Head to the **[Game Data Reference](https://developers.pandascore.co/docs/plan-reference)** to see exactly which endpoints are available on your plan for Counter-Strike, League of Legends, Dota 2, and Valorant.

<br />