Skip to main content

Prerequisites

Before you begin, you’ll need:
  • An API key — create and manage keys in the API Dashboard
  • At least one completed project with generated highlights
  • A project ID from GET /v1/tasks/{task_id}/info, your dashboard, or your project management workflow
Current highlights generate otio_edit automatically. Package creation requires the matched highlights to be OTIO-ready because the package EDL is built from those source highlight edits.

Overview

Highlight packages are created from one or more project IDs. Narrative selects highlights from filters such as event type, team, or player, or you can pass exact highlight IDs when you want precise control. The basic flow is:
  1. Get the project ID for the stream task.
  2. Discover available package options for a project.
  3. Create a package from project IDs and filters.
  4. Poll the package through queued and processing until it is complete or failed.
  5. Retrieve the EDL and rendered video URL.

Step 1: Get the Project ID

If you started from a stream task, fetch the generated project ID from task info:
Use task.project_id in the response. If it is null, retry after the task has started producing project data.

Step 2: Discover Package Options

Use your project ID to discover available event types, teams, players, fights, highlight IDs, and OTIO readiness:
Response:
Use these values directly in package creation:

Step 3: Create a Package with Filters

Send the project ID plus the filters you want Narrative to use. name is optional; omit it if you do not need to store a display name.
Response:
Save the returned package id. Package creation can take up to about a minute, and status moves through queued, then usually processing, before reaching complete or failed.
Set render_video to "ffmpeg" to receive a rendered video plus the EDL, or "none" to create only the OTIO EDL.

MMA: Create a Package from Specific Fights

For MMA projects, highlight-options returns fights. To create a package from specific fights, pass project-scoped fight numbers in fight_filter:
selected_fights is accepted as an alias for fight_filter if your UI uses that naming. Use selected_edit_ids when you want to select exact highlights instead of asking the API to resolve the eligible highlights from fights and filters.

Step 4: Poll the Package

Poll the package ID returned by the create call:
While the package is running, status may be "queued" or "processing". When status is "complete", the response includes otio_timeline and, if render_video was "ffmpeg", video_url:

Step 5: Sync Packages for a Dashboard

If you are building a UI that shows all packages for an account, use the batch endpoint instead of calling GET /highlight-packages/{id} for every package:
Store the ETag header from a 200 response and send it back on later polls:
The API returns 304 Not Modified when no package data, status, EDL, or rendered edit state changed for that account/filter/page.

Next Steps

Create Highlight Package

Full request and response reference

Batch Highlight Packages

Sync many package EDLs in one request

Get Project Highlight Options

Discover event types, fights, players, and highlight IDs

OTIO Format

Understand the package EDL format