StorytellerContent API

Endpoint reference

Methods, parameters and responses from the served OpenAPI document.

This reference is generated from the exact document served at /v1/openapi.json. Document version: 0.2.0. It is an NBA integration view of the generic API, describing the sample index and feed route.

Sample and live replay timestamps

The generated response description below uses sample behavior: an empty replay reports the fixture’s first event, or an earlier requested asOf. Live feeds instead use the feed’s creation time, or that earlier asOf. A live read without replay reports the latest publication commit time. See Replay.

/v1/fixtures

GET — List the sample fixtures and the feeds each serves

The Game Pulse sample games, newest first. The retained Portland version 1 example (0022501147) is served at its feed route but is not listed.

ParameterLocationRequiredFormatDescription
If-None-MatchheaderNostring
StatusMeaningResponse headers
200The fixture index.ETag; Access-Control-Allow-Origin; Access-Control-Expose-Headers
304The snapshot has not changed.ETag; Access-Control-Allow-Origin; Access-Control-Expose-Headers
405Only GET, HEAD and OPTIONS are supported.Allow
Complete OpenAPI operation
{
  "operationId": "listNbaAiInsightsFixtures",
  "summary": "List the sample fixtures and the feeds each serves",
  "description": "The Game Pulse sample games, newest first. The retained Portland version 1 example (0022501147) is served at its feed route but is not listed.",
  "parameters": [
    {
      "$ref": "#/components/parameters/IfNoneMatch"
    }
  ],
  "responses": {
    "200": {
      "description": "The fixture index.",
      "headers": {
        "ETag": {
          "$ref": "#/components/headers/ETag"
        },
        "Access-Control-Allow-Origin": {
          "$ref": "#/components/headers/AccessControlAllowOrigin"
        },
        "Access-Control-Expose-Headers": {
          "$ref": "#/components/headers/AccessControlExposeHeaders"
        }
      },
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/FixtureIndex"
          }
        }
      }
    },
    "304": {
      "$ref": "#/components/responses/NotModified"
    },
    "405": {
      "$ref": "#/components/responses/MethodNotAllowed"
    }
  }
}

HEAD — The fixture index headers without a body

ParameterLocationRequiredFormatDescription
If-None-MatchheaderNostring
StatusMeaningResponse headers
200The GET headers.ETag; Access-Control-Allow-Origin; Access-Control-Expose-Headers
304The snapshot has not changed.ETag; Access-Control-Allow-Origin; Access-Control-Expose-Headers
Complete OpenAPI operation
{
  "operationId": "headNbaAiInsightsFixtures",
  "summary": "The fixture index headers without a body",
  "parameters": [
    {
      "$ref": "#/components/parameters/IfNoneMatch"
    }
  ],
  "responses": {
    "200": {
      "description": "The GET headers.",
      "headers": {
        "ETag": {
          "$ref": "#/components/headers/ETag"
        },
        "Access-Control-Allow-Origin": {
          "$ref": "#/components/headers/AccessControlAllowOrigin"
        },
        "Access-Control-Expose-Headers": {
          "$ref": "#/components/headers/AccessControlExposeHeaders"
        }
      }
    },
    "304": {
      "$ref": "#/components/responses/NotModified"
    }
  }
}

OPTIONS — CORS preflight

StatusMeaningResponse headers
204CORS preflight accepted.Access-Control-Allow-Origin; Access-Control-Allow-Methods; Access-Control-Allow-Headers
Complete OpenAPI operation
{
  "operationId": "preflightNbaAiInsightsFixtures",
  "summary": "CORS preflight",
  "responses": {
    "204": {
      "$ref": "#/components/responses/Preflight"
    }
  }
}

/v1/fixtures/{fixtureId}/feeds/{feedKey}

GET — Get the complete active NBA AI Insights snapshot for one fixture

A bundled sample fixture, or the deployment's public live feed for the fixture, served with Cache-Control: no-store. No authentication.

ParameterLocationRequiredFormatDescription
fixtureIdpathYesstringNBA game ID used as the integrating client's stable fixture identifier.
feedKeypathYesstringClient-recognized feed key. The NBA feed is pulse.
atActionqueryNointegerReplay: keep only items whose content.actionNumber (the NBA play-by-play actionNumber they attach to) is at or before this value. Sample games and public live feeds; the Portland version 1 fixture returns 400.
asOfqueryNostringReplay: keep only items whose publishedAt is at or before this RFC 3339 date-time, which must carry a time zone (encode + as %2B). Combined with atAction, an item must satisfy both. Sample games and public live feeds; the Portland version 1 fixture returns 400.
If-None-MatchheaderNostring
StatusMeaningResponse headers
200Complete currently consumable NBA AI Insights snapshot, ordered by active-revision publishedAt newest first with id as the tie-break. With atAction or asOf, the replay snapshot at that point: the same order, snapshotAt recomputed from the items kept (an empty replay snapshot reports the fixture's first play-by-play event time, or asOf when that is earlier) and its own ETag.ETag; Access-Control-Allow-Origin; Access-Control-Expose-Headers
304The snapshot has not changed.ETag; Access-Control-Allow-Origin; Access-Control-Expose-Headers
400Request could not be fulfilled.
404Request could not be fulfilled.
405Only GET, HEAD and OPTIONS are supported.Allow
Complete OpenAPI operation
{
  "operationId": "getNbaAiInsightsFixtureFeed",
  "summary": "Get the complete active NBA AI Insights snapshot for one fixture",
  "description": "A bundled sample fixture, or the deployment's public live feed for the fixture, served with Cache-Control: no-store. No authentication.",
  "parameters": [
    {
      "$ref": "#/components/parameters/FixtureId"
    },
    {
      "$ref": "#/components/parameters/FeedKey"
    },
    {
      "$ref": "#/components/parameters/AtAction"
    },
    {
      "$ref": "#/components/parameters/AsOf"
    },
    {
      "$ref": "#/components/parameters/IfNoneMatch"
    }
  ],
  "responses": {
    "200": {
      "description": "Complete currently consumable NBA AI Insights snapshot, ordered by active-revision publishedAt newest first with id as the tie-break. With atAction or asOf, the replay snapshot at that point: the same order, snapshotAt recomputed from the items kept (an empty replay snapshot reports the fixture's first play-by-play event time, or asOf when that is earlier) and its own ETag.",
      "headers": {
        "ETag": {
          "$ref": "#/components/headers/ETag"
        },
        "Access-Control-Allow-Origin": {
          "$ref": "#/components/headers/AccessControlAllowOrigin"
        },
        "Access-Control-Expose-Headers": {
          "$ref": "#/components/headers/AccessControlExposeHeaders"
        }
      },
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/NbaAiInsightsFeed"
          }
        }
      }
    },
    "304": {
      "$ref": "#/components/responses/NotModified"
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/MethodNotAllowed"
    }
  }
}

HEAD — The snapshot headers without a body

ParameterLocationRequiredFormatDescription
fixtureIdpathYesstringNBA game ID used as the integrating client's stable fixture identifier.
feedKeypathYesstringClient-recognized feed key. The NBA feed is pulse.
atActionqueryNointegerReplay: keep only items whose content.actionNumber (the NBA play-by-play actionNumber they attach to) is at or before this value. Sample games and public live feeds; the Portland version 1 fixture returns 400.
asOfqueryNostringReplay: keep only items whose publishedAt is at or before this RFC 3339 date-time, which must carry a time zone (encode + as %2B). Combined with atAction, an item must satisfy both. Sample games and public live feeds; the Portland version 1 fixture returns 400.
If-None-MatchheaderNostring
StatusMeaningResponse headers
200The GET headers.ETag; Access-Control-Allow-Origin; Access-Control-Expose-Headers
304The snapshot has not changed.ETag; Access-Control-Allow-Origin; Access-Control-Expose-Headers
400Invalid replay parameter.
404Unknown fixture or feed, or a feed the deployment does not serve publicly.
Complete OpenAPI operation
{
  "operationId": "headNbaAiInsightsFixtureFeed",
  "summary": "The snapshot headers without a body",
  "parameters": [
    {
      "$ref": "#/components/parameters/FixtureId"
    },
    {
      "$ref": "#/components/parameters/FeedKey"
    },
    {
      "$ref": "#/components/parameters/AtAction"
    },
    {
      "$ref": "#/components/parameters/AsOf"
    },
    {
      "$ref": "#/components/parameters/IfNoneMatch"
    }
  ],
  "responses": {
    "200": {
      "description": "The GET headers.",
      "headers": {
        "ETag": {
          "$ref": "#/components/headers/ETag"
        },
        "Access-Control-Allow-Origin": {
          "$ref": "#/components/headers/AccessControlAllowOrigin"
        },
        "Access-Control-Expose-Headers": {
          "$ref": "#/components/headers/AccessControlExposeHeaders"
        }
      }
    },
    "304": {
      "$ref": "#/components/responses/NotModified"
    },
    "400": {
      "description": "Invalid replay parameter."
    },
    "404": {
      "description": "Unknown fixture or feed, or a feed the deployment does not serve publicly."
    }
  }
}

OPTIONS — CORS preflight

ParameterLocationRequiredFormatDescription
fixtureIdpathYesstringNBA game ID used as the integrating client's stable fixture identifier.
feedKeypathYesstringClient-recognized feed key. The NBA feed is pulse.
StatusMeaningResponse headers
204CORS preflight accepted.Access-Control-Allow-Origin; Access-Control-Allow-Methods; Access-Control-Allow-Headers
Complete OpenAPI operation
{
  "operationId": "preflightNbaAiInsightsFixtureFeed",
  "summary": "CORS preflight",
  "parameters": [
    {
      "$ref": "#/components/parameters/FixtureId"
    },
    {
      "$ref": "#/components/parameters/FeedKey"
    }
  ],
  "responses": {
    "204": {
      "$ref": "#/components/responses/Preflight"
    }
  }
}

Other public resources

These GET routes also support HEAD. They are served alongside the resource paths in the OpenAPI document.

PathResponse
/v1/openapi.jsonNBA integration OpenAPI document
/v1/content-feed.schema.jsonGeneric feed and item JSON Schema
/v1/nba-ai-insights-feed.schema.jsonNBA definitions and structures
/v1/fixtures/0022501147/assets/{file}Shot-chart SVG assets referenced by the Portland feed

For full response structures, read Item types. The error guide also covers unexpected server failures.

On this page