# GET /v1/market-summary/daily

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

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

GET /v1/market-summary/daily returns one row per day for each league and market type of straight markets (markets, contracts traded, open interest), the day's straight totals, and the day's parlays: COMBO markets, taker trades, notional and the legs histogram. Novig's daily files list parlays with no league or market type, checked 12 Nov 2026, so parlays are one row per day. (Source: [Novig docs: Trades CSV](https://docs.novig.com/public-data/trades.md))

## What it returns

Novig publishes a markets file and a trades file every day. Parlays (COMBO) are most of the rows in both, and nobody else serves them in aggregate. This endpoint folds both files into a small daily table that never expires: `kind: straight` rows per league and market type, a `kind: total` row (league `ALL`, market type `STRAIGHT`) with the day's straight totals, and a `kind: combo` row (league `ALL`, market type `COMBO`) for parlays.

## Parameters

Query and path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| date | string (YYYY-MM-DD) | No | One day. Free reads only the last 7 days. |
| since | string (ISO 8601) | No | Only days at or after this time. Free reads only the last 7 days. |
| league | string | No | League code, or `ALL` for the day totals and parlays. |
| market_type | string | No | Market type, such as `POINTS`, or `COMBO` for parlays. |
| kind | string | No | `straight`, `total` or `combo`. |
| limit | integer | No | Rows per page, 1 to 1,000. Default 100. Free returns at most 100. |
| cursor | string | No | `meta.next_cursor` from the previous page. |


## Request

```bash
curl -s "https://novigapi.com/api/v1/market-summary/daily?kind=combo&limit=1" \
  -H "Authorization: Bearer nv_..."
```

## Response

The parlay market count and contracts are the real 11 Nov 2026 figures from Novig's markets file. The trade counts, notional and legs are illustrative of the shape.

```json
{
  "data": [
    {
      "date": "2026-11-11",
      "league": "ALL",
      "market_type": "COMBO",
      "kind": "combo",
      "markets": 67913,
      "finalized": null,
      "active": null,
      "contracts": 38839321.28,
      "open_interest": null,
      "taker_trades": 61204,
      "notional": 1702113.5,
      "legs": {
        "2": 21011,
        "3": 17890,
        "4": 10102
      },
      "observed_at": "2026-11-12T20:27:17.000Z",
      "source_age_seconds": 0,
      "edge_cached": true
    }
  ],
  "meta": {
    "observed_at": "2026-11-12T20:27:17.000Z",
    "source_age_seconds": 0,
    "edge_cached": true,
    "next_cursor": "eyJkIjoiMjAyNi0xMS0xMSIsImwiOiJBTEwiLCJ0IjoiQ09NQk8ifQ",
    "limit": 1,
    "count": 1,
    "plan": "developer",
    "credits_charged": 3,
    "credits_remaining": 9874,
    "credit_policy": "credits_v1"
  }
}
```

## Fields

Response fields

| Field | Type | Description |
| --- | --- | --- |
| date | string | Eastern trading day of the file. |
| league, market_type | string | League code and market type for straight rows; `ALL` and `STRAIGHT` or `COMBO` for the day rows. |
| kind | string | `straight`, `total` or `combo`. |
| markets | integer | Markets in the day's file. |
| finalized, active | integer or null | Of those, how many were finalized or still active. |
| contracts | number or null | Contracts traded that day, as Novig's markets file reports dailyVolume. |
| open_interest | number or null | Open interest summed over the markets. |
| taker_trades, notional | number or null | From the trades file: taker fills and their quantity. Combo and total rows only. |
| legs | object or null | Parlays only: taker parlay fills by number of legs. |
| 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

Weighted 3x: 3 credits per call per 100 rows requested (the `limit` you send, default 100, maximum 1,000; Free pages hold at most 100 rows). A default page costs 3 credits. 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}"}

rows = requests.get("https://novigapi.com/api/v1/market-summary/daily", params={"kind": "combo", "limit": 30}, headers=HEADERS, timeout=10).json()["data"]
for d in rows:
    print(d["date"], d["markets"], "parlays", d["contracts"], "contracts")
```

## JavaScript

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

const { data } = await (await fetch("https://novigapi.com/api/v1/market-summary/daily?date=2026-11-11&league=NBA", { headers })).json();
console.table(data.map((d) => ({ type: d.market_type, markets: d.markets, contracts: d.contracts })));
```

## Notes and edge cases

- Straight rows come from Novig's markets file; the day rows also use the trades file. A day appears once its files are loaded.
- Parlay legs are not broken out by league in Novig's files, so there is no per-league parlay row.

## Sources

- [Novig docs: Markets CSV](https://docs.novig.com/public-data/markets.md)
- [Novig docs: Trades CSV](https://docs.novig.com/public-data/trades.md)

---

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.
