> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sportrix.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /sports — List Sports on the Passthrough API

> GET /v1/pinnacle/sports returns the sports currently passed through from the sportsbook, as an array of id and name pairs. Requires the odds scope.

Returns the sports this sportsbook stack is currently ingesting. This is the entry point for the catalog — the `id` values it returns are what you pass to [`GET /leagues`](/passthrough/leagues) and [`GET /matches`](/passthrough/matches).

```text theme={null}
GET https://passthrough.sportrix.ai/v1/pinnacle/sports
```

**Scope:** `odds` · **Sportsbook grant:** `pinnacle`

## Request

No query parameters.

```bash theme={null}
curl https://passthrough.sportrix.ai/v1/pinnacle/sports \
  -H "X-API-Key: sk_your_api_key_here"
```

## Response

A bare JSON array, sorted ascending by `id`.

```json theme={null}
[
  { "id": 3, "name": "Baseball" },
  { "id": 12, "name": "E Sports" }
]
```

The stack ingests more than one sport at a time, so this array typically has multiple entries. What appears depends on which per-sport ingest workers are running upstream.

### Sport object

| Field  | Type    | Description                                                          |
| ------ | ------- | -------------------------------------------------------------------- |
| `id`   | integer | The sportsbook's sport id. Use it as the `sport` parameter elsewhere |
| `name` | string  | Human-readable sport name                                            |

<Note>
  This endpoint reflects what is **being passed through right now**, not a static catalog of everything the sportsbook offers. A sport appears once its feed has connected and seeded, so an empty array during a cold start is expected rather than an error. If it stays empty, check the `feed_healthy` flag on your WebSocket heartbeat, or contact [SportriX support](mailto:support@sportrix.ai).
</Note>

<Note>
  This response is also **filtered by your key's [per-sport grants](/passthrough/authentication#per-sport-grants)** — sports you are not granted are silently absent. If a sport you expect is missing, first confirm the grant on your key before assuming the feed is down.
</Note>

## Errors

| Status | Cause                                              |
| ------ | -------------------------------------------------- |
| `401`  | Missing, unknown, or inactive API key              |
| `403`  | Key lacks the `odds` scope or the `pinnacle` grant |
| `503`  | Authentication backend unavailable                 |

This endpoint does not return `403` on a per-sport grant — it silently filters instead. See [Per-sport grants](/passthrough/authentication#per-sport-grants) and [Authentication](/passthrough/authentication) for the exact error bodies.
