# GET /v1/events

> Independent. Not affiliated with, endorsed by or sponsored by Novig.

Canonical: https://novigapi.com/docs/endpoints/events
Facts checked: 2026-11-12

GET /v1/events lists Novig games and events with league, sport, home and away teams, status such as OPEN_PREGAME, and the start time in UTC. On paid plans data is at most about 10 seconds old. On 12 Nov 2026 Novig's public catalog cached its event list at the edge for 15 seconds. (Source: [Novig API reference: List events](https://docs.novig.com/api-reference/catalog/list-events.md))

## What it returns

One row per event, ordered by start time. An event is a game, a fight or a futures question, and every market hangs off one. We split Novig's description into home and away team names, and count the event's open markets. Without `status`, open events (pregame, in game or delayed) come back.

Statuses follow Novig's lifecycle: `OPEN_PREGAME`, `OPEN_INGAME`, `CLOSED_PREGAME`, `DELAYED` and the closed and settled states. The move from pregame to in-game matters for fees, because Novig charges the taker fee on game markets only while the event is `OPEN_INGAME`.

## Parameters

Query and path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| league | string | No | League code, such as `NBA`. |
| status | string | No | `open`, `closed`, `settled`, `suspended` or `all`. |
| limit | integer | No | Rows per page, 1 to 1,000. Default 50. Free returns at most 100. |
| cursor | string | No | `meta.next_cursor` from the previous page. |


## Request

```bash
curl -s "https://novigapi.com/api/v1/events?league=NBA&status=open&limit=3" \
  -H "Authorization: Bearer nv_..."
```

## Response

Three real NBA events from Novig's public catalog on 12 Nov 2026; the open market counts are illustrative. Start times are converted from Novig's milliseconds to ISO UTC: 1794531900000 is 2026-11-13T01:05:00Z, which is 8:05 p.m. ET on 12 Nov.

```json
{
  "data": [
    {
      "event_id": "01a1ca90-4a76-7503-acc5-4d5bfbf1c1d5",
      "league": "NBA",
      "sport": "BASKETBALL",
      "description": "Toronto Raptors @ Philadelphia 76ers",
      "home_team": "Philadelphia 76ers",
      "away_team": "Toronto Raptors",
      "status": "OPEN_PREGAME",
      "starts_at": "2026-11-13T00:05:00.000Z",
      "open_markets": 41,
      "observed_at": "2026-11-12T17:23:56.000Z",
      "source_age_seconds": 9,
      "edge_cached": true
    },
    {
      "event_id": "01a1ca90-4b5d-71a1-a88c-d1e37989760e",
      "league": "NBA",
      "sport": "BASKETBALL",
      "description": "Detroit Pistons @ Washington Wizards",
      "home_team": "Washington Wizards",
      "away_team": "Detroit Pistons",
      "status": "OPEN_PREGAME",
      "starts_at": "2026-11-13T00:05:00.000Z",
      "open_markets": 38,
      "observed_at": "2026-11-12T17:23:56.000Z",
      "source_age_seconds": 9,
      "edge_cached": true
    },
    {
      "event_id": "01a1cac7-5c83-7e41-ba84-afe1af0c1ca6",
      "league": "NBA",
      "sport": "BASKETBALL",
      "description": "Dallas Mavericks @ Minnesota Timberwolves",
      "home_team": "Minnesota Timberwolves",
      "away_team": "Dallas Mavericks",
      "status": "OPEN_PREGAME",
      "starts_at": "2026-11-13T01:05:00.000Z",
      "open_markets": 77,
      "observed_at": "2026-11-12T17:23:56.000Z",
      "source_age_seconds": 9,
      "edge_cached": true
    }
  ],
  "meta": {
    "observed_at": "2026-11-12T17:23:56.000Z",
    "source_age_seconds": 6,
    "edge_cached": true,
    "next_cursor": "eyJzIjoiMjAyNi0xMS0xM1QwMTowNTowMC4wMDAwMDBaIiwiaWQiOiIwMWExY2FjNy01YzgzLTdlNDEtYmE4NC1hZmUxYWYwYzFjYTYifQ",
    "limit": 3,
    "count": 3,
    "plan": "developer",
    "credits_charged": 1,
    "credits_remaining": 9874,
    "credit_policy": "credits_v1"
  }
}
```

## Fields

Response fields

| Field | Type | Description |
| --- | --- | --- |
| event_id | string | Novig event id. |
| league | string | League code. |
| sport | string | Sport, such as `BASKETBALL`. |
| description | string | Novig's label, such as `Dallas Mavericks @ Minnesota Timberwolves`. |
| home_team | string or null | Team after the @ in Novig's description (the first team in an `A vs B` label). Null for futures and other non-game events. |
| away_team | string or null | Team before the @. |
| status | string | Novig event status, such as `OPEN_PREGAME`, `OPEN_INGAME`, `DELAYED`, `FINAL` or `CANCELED`. The `status` filter takes the simpler `open`, `closed`, `settled`, `suspended` (delayed) or `all`. |
| starts_at | string (ISO 8601) | Scheduled start in UTC. |
| open_markets | integer | Markets on this event that are open in our copy of Novig's catalog. |
| observed_at | string (ISO 8601) or null | When our collector last read this row from Novig. |
| source_age_seconds | integer or null | Seconds between that read and our answer. |
| edge_cached | boolean | True when the value came through Novig's public CDN, which may serve a copy up to its cache time (5 to 10 seconds) older. |
| meta.next_cursor | string or null | Pass as `cursor` to get the next page. Null on the last page. |
| meta.limit, meta.count | integer | The page size used and the rows on this page. |
| meta.observed_at | string (ISO 8601) | When our collector read the oldest row in this answer from Novig's public catalog. Each row also carries its own `observed_at`. |
| meta.source_age_seconds | integer | Seconds between that read and our response. On paid plans this stays at about 10 or less. |
| meta.edge_cached | boolean | True when Novig's edge cache served any of the reads, so the source copy may itself be a few seconds old. |
| meta.plan, credits_charged, credits_remaining, credit_policy | string, integer | Your plan, what this call cost, the credits left this month and the credit rules version. |


## Credit cost

1 credit per call per 100 rows requested (the `limit` you send, default 50, maximum 1,000; Free pages hold at most 100 rows). A default page costs 1 credit. Errors and 304 Not Modified cost 0; the `X-Credits-Cost` header and `meta.credits_charged` state the price of every call.

## Python

```python
import os
import requests

KEY = os.environ["NOVIGAPI_API_KEY"]  # nv_...
HEADERS = {"Authorization": f"Bearer {KEY}"}

r = requests.get("https://novigapi.com/api/v1/events", params={"league": "NBA", "status": "open"}, headers=HEADERS, timeout=10)
r.raise_for_status()
for e in r.json()["data"]:
    print(e["starts_at"], e["away_team"], "at", e["home_team"], e["open_markets"], "markets", e["event_id"])
```

## JavaScript

```javascript
const KEY = process.env.NOVIGAPI_API_KEY; // nv_...
const headers = { Authorization: "Bearer " + KEY };

const res = await fetch("https://novigapi.com/api/v1/events?league=NBA&status=open", { headers });
const { data } = await res.json();
const tonight = data.filter((e) => new Date(e.starts_at) < new Date(Date.now() + 12 * 3600 * 1000));
console.table(tonight.map((e) => ({ id: e.event_id, game: e.description, starts: e.starts_at })));
```

## Notes and edge cases

- Times are always UTC. An 8:05 p.m. ET tip-off on 12 Nov shows as 01:05 on 13 Nov.
- Futures and specials have no home or away team; both fields are null. Their `starts_at` is Novig's date for the question, which can be today even when the market settles months later.
- To turn a team name into the slug other endpoints take, look it up in [GET /v1/teams](https://novigapi.com/docs/endpoints/teams).
- Novig may list a game well ahead of time. The 12 Nov 2026 NBA list already held games starting in late December.
- Status can lag the real game state by a few seconds, because it comes from the same polled catalog.

## Sources

- [Novig API reference: List events](https://docs.novig.com/api-reference/catalog/list-events.md)
- [Novig docs: Event lifecycle](https://docs.novig.com/api/concepts/event-lifecycle.md)
- [Novig docs: Universe model](https://docs.novig.com/api/concepts/universe-model.md)
- [Novig API docs](https://docs.novig.com)

---

Get a free API key: https://novigapi.com/sign-up . Docs: https://novigapi.com/docs . MCP: https://novigapi.com/api/mcp . Operated by Stunning Couches LLC. Independent. Not affiliated with, endorsed by or sponsored by Novig.
