Create a recap that summarizes a single game (project) by selecting highlights to fit a target duration. Narrative selects which clips to include based on event importance and editorial fit.Every matched highlight must be OTIO-ready because the public contract is OTIO EDL-first. Current highlights generate otio_edit automatically. Set render_video to "ffmpeg" (default) to receive a rendered concatenated video plus the EDL, or "none" to receive only the merged OTIO timeline EDL without rendering. Highlight selection runs asynchronously after creation: if no highlights match, or a matched highlight is missing otio_edit, the recap transitions to status: "failed" with a failure_reason.
Target duration in seconds (min: 60, max: 3600). Use 0 to auto-size from the sport profile.
exclude_event_types
string[]
No
Event types to exclude from selection (e.g. player_walk_on, kickoff, final_whistle). Non-excluded ceremony types are force-included rather than left to Narrative selection.
selected_edit_ids
string[]
No
Restrict the eligible highlights to these IDs. For MMA fight selection, use the chosen fights’ highlight_ids from project highlight options. Narrative selects and trims within this set. Omitted or empty means no ID restriction. All matched highlights must be OTIO-ready.
recap_mode
string
No
Deprecated and ignored. Recaps are duration-based; the former "standard" / "extended" modes were removed. Accepted for backward compatibility.
sport
string
No
Optional sport hint: soccer, mma, baseball, american_football, or squash. New stream highlights also carry sport metadata for automatic profile selection.
recap_options
object
No
Recap tuning: editorial instructions, duration mode, and sport-specific style — see Recap Options below
fight_ceremony_config
object[]
No
MMA per-fight walk-on / decision selections
render_video
string
No
"ffmpeg" (default) to render a video, or "none" for OTIO timeline EDL only
For a single-fight recap, fetch project highlight options, select the desired entry in fights, and send its nonempty highlight_ids list as selected_edit_ids. For multiple fights, combine their IDs and remove duplicates. See the single-fight recap example.fight_filter and selected_fights belong to the highlight-package API and are ignored by this endpoint. Setting name to a fighter pairing does not restrict the recap to that fight. Fight selection must be expressed through selected_edit_ids.
The recap_options object accepts free-form editorial instructions and a duration mode, alongside sport-specific style knobs:
Parameter
Type
Required
Description
editorial_prompt
string
No
Free-form guidance for Narrative selection (max 2000 chars), e.g. "focus on the home team, keep it tight"
duration_mode
string
No
"exact" (default) to target target_duration_seconds, or "range" to let the recap land anywhere between the min/max bounds below
target_duration_min_seconds
integer
No
Lower bound of the duration range in seconds (min: 60). Required when duration_mode is "range"
target_duration_max_seconds
integer
No
Upper bound of the duration range in seconds (max: 3600, must be ≥ the min). Required when duration_mode is "range"
start_style
string
No
MMA only: "none", "short_walkout", or "full_walkout"
ending_style
string
No
MMA only: "auto" or "decision_or_ending"
pacing
string
No
"balanced" or "action_sprint"
When duration_mode is "range", Narrative selection lands the total recap duration inside [target_duration_min_seconds, target_duration_max_seconds] instead of within ±10% of a single target:
curl -X POST "https://api.narrative-sports.com/v1/recaps" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "project_id": 1, "target_duration_seconds": 240, "recap_options": { "editorial_prompt": "focus on the home team, keep it tight", "duration_mode": "range", "target_duration_min_seconds": 180, "target_duration_max_seconds": 300 } }'
The recap otio_timeline is a merged OTIO Timeline.1 composed from selected highlights’ stored otio_edit payloads. Use Get Project Highlight Options to inspect readiness.Creation stores an OTIO EDL in otio_timeline; the API does not synthesize recap EDLs from editor-project JSON.
Highlight selection runs asynchronously after the recap is created. If no highlights match the given filters, or a matched highlight is missing otio_edit, the recap transitions to status: "failed" with a failure_reason — retrieve it via Get Recap.
American-football recaps use the sport-specific selection profile and preserve
the complete worker-tagged live-play original_moment for every selected
highlight. Replay/reaction footage outside that segment is excluded.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Narrative Sports","colors":{"primary":"#1a1a1a","light":"#FFFFFF","dark":"#1a1a1a"},"logo":{"light":"https://mintcdn.com/narrativesports/vFVZH5QQ1ixolEbk/logo/light.png?fit=max\u0026auto=format\u0026n=vFVZH5QQ1ixolEbk\u0026q=85\u0026s=cce219b4abbc60216b849c6da610484d","dark":"https://mintcdn.com/narrativesports/vFVZH5QQ1ixolEbk/logo/dark.png?fit=max\u0026auto=format\u0026n=vFVZH5QQ1ixolEbk\u0026q=85\u0026s=493ec11a3c51c984270b92582224e7c5"},"favicon":"https://mintcdn.com/narrativesports/EXR3OOJVSaaCir2J/favicon.svg?fit=max\u0026auto=format\u0026n=EXR3OOJVSaaCir2J\u0026q=85\u0026s=d5d9647dda39d612dba46f3e556132aa","api":{"openapi":"openapi.json","playground":{"display":"simple"}},"navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Narrative","href":"https://narrative-sports.com"}},"footer":{"socials":{"x":"https://x.com/narrativevideo","github":"https://github.com/Narrative-Sports","linkedin":"https://www.linkedin.com/company/usenarrative"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"narrativesports","hasAudioNarration":false,"actualSubdomain":"narrativesports","customDomains":["docs.narrative-sports.com"],"gitSource":{"type":"github","owner":"sawhney17","repo":"narrativesports-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a9dc9381837758e26aefc93","collectionId":"0dd93ca2-53be-4876-bcc5-d85f5aa79d0e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a9dc9381837758e26aefc93"},"entitlements":{},"buildId":"6a9dc9381837758e26aefc93","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"API Reference","count":26},{"language":"default","tag":"Getting Started","count":13},{"language":"default","tag":"Introduction","count":8},{"language":"default","tag":"Highlight Packages (Early Beta)","count":5},{"language":"default","tag":"Highlights","count":5},{"language":"default","tag":"Concepts","count":5},{"language":"default","tag":"Recaps","count":4},{"language":"default","tag":"Task Management","count":4},{"language":"default","tag":"Deprecated","count":3},{"language":"default","tag":"License Usage","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":""}],"page":{"pagePath":"api-reference/sports/create-recap","slug":"/api-reference/sports/create-recap","pageMetadata":{"title":"Create Recap","openapi":"POST /v1/recaps","description":"Create a single-game recap from a project","href":"/api-reference/sports/create-recap"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create a single-game recap from a project\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`Create a recap that summarizes a single game (project) by selecting highlights to fit a target duration. Narrative selects which clips to include based on event importance and editorial fit.`}),`\n`,_jsxs(_components.p,{children:[`Every matched highlight must be OTIO-ready because the public contract is OTIO EDL-first. Current highlights generate `,_jsx(_components.code,{children:`otio_edit`}),` automatically. Set `,_jsx(_components.code,{children:`render_video`}),` to `,_jsx(_components.code,{children:`\"ffmpeg\"`}),` (default) to receive a rendered concatenated video plus the EDL, or `,_jsx(_components.code,{children:`\"none\"`}),` to receive only the merged OTIO timeline EDL without rendering. Highlight selection runs asynchronously after creation: if no highlights match, or a matched highlight is missing `,_jsx(_components.code,{children:`otio_edit`}),`, the recap transitions to `,_jsx(_components.code,{children:`status: \"failed\"`}),` with a `,_jsx(_components.code,{children:`failure_reason`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`request`,children:`Request`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.narrative-sports.com/v1/recaps\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer YOUR_API_KEY\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"project_id\": 1,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"target_duration_seconds\": 60,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"exclude_event_types\": [\"kickoff\", \"final_whistle\", \"player_walk_on\"],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"render_video\": \"ffmpeg\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`request-body`,children:`Request Body`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`project_id`})}),_jsx(_components.td,{children:`integer`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Project ID to create a recap from`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`target_duration_seconds`})}),_jsx(_components.td,{children:`integer`}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`Target duration in seconds (min: 60, max: 3600). Use `,_jsx(_components.code,{children:`0`}),` to auto-size from the sport profile.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`exclude_event_types`})}),_jsx(_components.td,{children:`string[]`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Event types to exclude from selection (e.g. `,_jsx(_components.code,{children:`player_walk_on`}),`, `,_jsx(_components.code,{children:`kickoff`}),`, `,_jsx(_components.code,{children:`final_whistle`}),`). Non-excluded ceremony types are force-included rather than left to Narrative selection.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`selected_edit_ids`})}),_jsx(_components.td,{children:`string[]`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Restrict the eligible highlights to these IDs. For MMA fight selection, use the chosen fights’ `,_jsx(_components.code,{children:`highlight_ids`}),` from project highlight options. Narrative selects and trims within this set. Omitted or empty means no ID restriction. All matched highlights must be OTIO-ready.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recap_mode`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Deprecated and ignored. Recaps are duration-based; the former `,_jsx(_components.code,{children:`\"standard\"`}),` / `,_jsx(_components.code,{children:`\"extended\"`}),` modes were removed. Accepted for backward compatibility.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sport`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Optional sport hint: `,_jsx(_components.code,{children:`soccer`}),`, `,_jsx(_components.code,{children:`mma`}),`, `,_jsx(_components.code,{children:`baseball`}),`, `,_jsx(_components.code,{children:`american_football`}),`, or `,_jsx(_components.code,{children:`squash`}),`. New stream highlights also carry sport metadata for automatic profile selection.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recap_options`})}),_jsx(_components.td,{children:`object`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Recap tuning: editorial instructions, duration mode, and sport-specific style — see `,_jsx(_components.a,{href:`#recap-options`,children:`Recap Options`}),` below`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`fight_ceremony_config`})}),_jsx(_components.td,{children:`object[]`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`MMA per-fight walk-on / decision selections`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`render_video`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`\"ffmpeg\"`}),` (default) to render a video, or `,_jsx(_components.code,{children:`\"none\"`}),` for OTIO timeline EDL only`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`selecting-specific-fights`,children:`Selecting Specific Fights`}),`\n`,_jsxs(_components.p,{children:[`For a single-fight recap, fetch `,_jsx(_components.a,{href:`/api-reference/sports/get-project-highlight-options`,children:`project highlight options`}),`, select the desired entry in `,_jsx(_components.code,{children:`fights`}),`, and send its nonempty `,_jsx(_components.code,{children:`highlight_ids`}),` list as `,_jsx(_components.code,{children:`selected_edit_ids`}),`. For multiple fights, combine their IDs and remove duplicates. See the `,_jsx(_components.a,{href:`/game-recap-quickstart#create-a-single-fight-recap`,children:`single-fight recap example`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`fight_filter`}),` and `,_jsx(_components.code,{children:`selected_fights`}),` belong to the highlight-package API and are ignored by this endpoint. Setting `,_jsx(_components.code,{children:`name`}),` to a fighter pairing does not restrict the recap to that fight. Fight selection must be expressed through `,_jsx(_components.code,{children:`selected_edit_ids`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`recap-options`,children:`Recap Options`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`recap_options`}),` object accepts free-form editorial instructions and a duration mode, alongside sport-specific style knobs:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`editorial_prompt`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Free-form guidance for Narrative selection (max 2000 chars), e.g. `,_jsx(_components.code,{children:`\"focus on the home team, keep it tight\"`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`duration_mode`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`\"exact\"`}),` (default) to target `,_jsx(_components.code,{children:`target_duration_seconds`}),`, or `,_jsx(_components.code,{children:`\"range\"`}),` to let the recap land anywhere between the min/max bounds below`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`target_duration_min_seconds`})}),_jsx(_components.td,{children:`integer`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Lower bound of the duration range in seconds (min: 60). Required when `,_jsx(_components.code,{children:`duration_mode`}),` is `,_jsx(_components.code,{children:`\"range\"`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`target_duration_max_seconds`})}),_jsx(_components.td,{children:`integer`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Upper bound of the duration range in seconds (max: 3600, must be ≥ the min). Required when `,_jsx(_components.code,{children:`duration_mode`}),` is `,_jsx(_components.code,{children:`\"range\"`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`start_style`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`MMA only: `,_jsx(_components.code,{children:`\"none\"`}),`, `,_jsx(_components.code,{children:`\"short_walkout\"`}),`, or `,_jsx(_components.code,{children:`\"full_walkout\"`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ending_style`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`MMA only: `,_jsx(_components.code,{children:`\"auto\"`}),` or `,_jsx(_components.code,{children:`\"decision_or_ending\"`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pacing`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`\"balanced\"`}),` or `,_jsx(_components.code,{children:`\"action_sprint\"`})]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`When `,_jsx(_components.code,{children:`duration_mode`}),` is `,_jsx(_components.code,{children:`\"range\"`}),`, Narrative selection lands the total recap duration inside `,_jsx(_components.code,{children:`[target_duration_min_seconds, target_duration_max_seconds]`}),` instead of within ±10% of a single target:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.narrative-sports.com/v1/recaps\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer YOUR_API_KEY\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"project_id\": 1,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"target_duration_seconds\": 240,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recap_options\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"editorial_prompt\": \"focus on the home team, keep it tight\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"duration_mode\": \"range\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"target_duration_min_seconds\": 180,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"target_duration_max_seconds\": 300`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`43`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"queued\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"task_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"def789-ghi012\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`response-fields`,children:`Response Fields`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`id`})}),_jsx(_components.td,{children:`integer`}),_jsxs(_components.td,{children:[`Recap ID — use with `,_jsx(_components.code,{children:`GET /recaps/{id}`}),` to poll for results`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`status`})}),_jsx(_components.td,{children:`string`}),_jsxs(_components.td,{children:[`Initial public status, always `,_jsx(_components.code,{children:`\"queued\"`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`task_id`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`Background task ID`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`polling-for-results`,children:`Polling for Results`}),`\n`,_jsxs(_components.p,{children:[`After creation, poll `,_jsx(_components.a,{href:`/api-reference/sports/get-recap`,children:_jsx(_components.code,{children:`GET /recaps/{id}`})}),` until `,_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`\"complete\"`}),` or `,_jsx(_components.code,{children:`\"failed\"`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`edl-contract`,children:`EDL Contract`}),`\n`,_jsxs(_components.p,{children:[`The recap `,_jsx(_components.code,{children:`otio_timeline`}),` is a merged OTIO `,_jsx(_components.code,{children:`Timeline.1`}),` composed from selected highlights’ stored `,_jsx(_components.code,{children:`otio_edit`}),` payloads. Use `,_jsx(_components.a,{href:`/api-reference/sports/get-project-highlight-options`,children:`Get Project Highlight Options`}),` to inspect readiness.`]}),`\n`,_jsxs(_components.p,{children:[`Creation stores an OTIO EDL in `,_jsx(_components.code,{children:`otio_timeline`}),`; the API does not synthesize recap EDLs from editor-project JSON.`]}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`401`})}),_jsx(_components.td,{children:`Invalid or missing API key`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`403`})}),_jsx(_components.td,{children:`You do not own the specified project`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`422`})}),_jsx(_components.td,{children:`Invalid request body`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`500`})}),_jsx(_components.td,{children:`Server error`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Highlight selection runs asynchronously after the recap is created. If no highlights match the given filters, or a matched highlight is missing `,_jsx(_components.code,{children:`otio_edit`}),`, the recap transitions to `,_jsx(_components.code,{children:`status: \"failed\"`}),` with a `,_jsx(_components.code,{children:`failure_reason`}),` — retrieve it via `,_jsx(_components.a,{href:`/api-reference/sports/get-recap`,children:`Get Recap`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`american-football`,children:`American Football`}),`\n`,_jsxs(_components.p,{children:[`American-football recaps use the sport-specific selection profile and preserve\nthe complete worker-tagged live-play `,_jsx(_components.code,{children:`original_moment`}),` for every selected\nhighlight. Replay/reaction footage outside that segment is excluded.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create Recap","openapi":"POST /v1/recaps","description":"Create a single-game recap from a project","href":"/api-reference/sports/create-recap"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Request","slug":"request","depth":2,"children":[{"title":"Request Body","slug":"request-body","depth":3,"children":[]},{"title":"Selecting Specific Fights","slug":"selecting-specific-fights","depth":3,"children":[]},{"title":"Recap Options","slug":"recap-options","depth":3,"children":[]}]},{"title":"Response","slug":"response","depth":2,"children":[{"title":"Response Fields","slug":"response-fields","depth":3,"children":[]}]},{"title":"Polling for Results","slug":"polling-for-results","depth":2,"children":[]},{"title":"EDL Contract","slug":"edl-contract","depth":2,"children":[]},{"title":"Errors","slug":"errors","depth":2,"children":[]},{"title":"American Football","slug":"american-football","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Recaps"],"summary":"Create Recap","security":["f936b93f-4b08-430e-b0b9-7d8d0dd04e4f"],"requestBody":"6b888865-34fe-4c92-85bb-a79f6c10dce6","responses":{"200":"e3b6d971-0dfc-4224-a365-1b47cb8127be","422":"35ec61e8-2e13-448f-a1cb-a7d949a7d567"},"method":"post","type":"path","servers":["c81bc9a5-fcba-49a1-b74d-e86f2c2f504b"],"path":"/v1/recaps","baseUrlOptions":["https://api.narrative-sports.com"],"title":"Create Recap","description":"Create a single-game recap from a project","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"type":"integer","title":"Project Id","isRequired":true,"uniqueKey":"project_id","typeLabel":"integer"},"target_duration_seconds":{"type":"integer","maximum":3600,"minimum":0,"title":"Target Duration Seconds","isRequired":true,"uniqueKey":"target_duration_seconds","typeLabel":"integer"},"name":{"oneOf":[{"type":"string","title":"Name","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"exclude_event_types":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"exclude_event_types.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Exclude Event Types","uniqueKey":"exclude_event_types.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Exclude Event Types","uniqueKey":"exclude_event_types.oneOf.1","typeLabel":"null"}],"uniqueKey":"exclude_event_types","typeLabel":"string[] | null"},"selected_edit_ids":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"selected_edit_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Selected Edit Ids","uniqueKey":"selected_edit_ids.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Selected Edit Ids","uniqueKey":"selected_edit_ids.oneOf.1","typeLabel":"null"}],"uniqueKey":"selected_edit_ids","typeLabel":"string[] | null"},"recap_mode":{"type":"string","title":"Recap Mode","default":"custom","uniqueKey":"recap_mode","typeLabel":"string"},"fight_ceremony_config":{"oneOf":[{"type":"array","items":{"properties":{"fight_number":{"type":"integer","title":"Fight Number","isRequired":true,"uniqueKey":"fight_ceremony_config.oneOf.0.items.[INDEX].fight_number","typeLabel":"integer"},"include_walkon":{"type":"boolean","title":"Include Walkon","default":false,"uniqueKey":"fight_ceremony_config.oneOf.0.items.[INDEX].include_walkon","typeLabel":"boolean"},"include_decision":{"type":"boolean","title":"Include Decision","default":false,"uniqueKey":"fight_ceremony_config.oneOf.0.items.[INDEX].include_decision","typeLabel":"boolean"}},"type":"object","required":["fight_number"],"title":"FightCeremonyConfig","uniqueKey":"fight_ceremony_config.oneOf.0.items.[INDEX]","typeLabel":"FightCeremonyConfig · object"},"title":"Fight Ceremony Config","uniqueKey":"fight_ceremony_config.oneOf.0","typeLabel":"FightCeremonyConfig · object[]"},{"type":"null","title":"Fight Ceremony Config","uniqueKey":"fight_ceremony_config.oneOf.1","typeLabel":"null"}],"uniqueKey":"fight_ceremony_config","typeLabel":"FightCeremonyConfig · object[] | null"},"render_video":{"type":"string","enum":["ffmpeg","none"],"title":"Render Video","default":"ffmpeg","uniqueKey":"render_video","typeLabel":"enum\u003cstring>"},"sport":{"oneOf":[{"type":"string","title":"Sport","uniqueKey":"sport.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sport","uniqueKey":"sport.oneOf.1","typeLabel":"null"}],"uniqueKey":"sport","typeLabel":"string | null"},"recap_options":{"oneOf":[{"type":"object","title":"RecapOptions","properties":{"start_style":{"oneOf":[{"type":"string","title":"Start Style","enum":["none","short_walkout","full_walkout"],"uniqueKey":"recap_options.oneOf.0.start_style.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Start Style","uniqueKey":"recap_options.oneOf.0.start_style.oneOf.1","typeLabel":"null"}],"uniqueKey":"recap_options.oneOf.0.start_style","typeLabel":"enum\u003cstring> | null"},"ending_style":{"oneOf":[{"type":"string","title":"Ending Style","enum":["auto","decision_or_ending"],"uniqueKey":"recap_options.oneOf.0.ending_style.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Ending Style","uniqueKey":"recap_options.oneOf.0.ending_style.oneOf.1","typeLabel":"null"}],"uniqueKey":"recap_options.oneOf.0.ending_style","typeLabel":"enum\u003cstring> | null"},"pacing":{"oneOf":[{"type":"string","title":"Pacing","enum":["tight_action","balanced","action_sprint"],"uniqueKey":"recap_options.oneOf.0.pacing.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Pacing","uniqueKey":"recap_options.oneOf.0.pacing.oneOf.1","typeLabel":"null"}],"uniqueKey":"recap_options.oneOf.0.pacing","typeLabel":"enum\u003cstring> | null"},"editorial_prompt":{"oneOf":[{"type":"string","title":"Editorial Prompt","maxLength":2000,"uniqueKey":"recap_options.oneOf.0.editorial_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Editorial Prompt","uniqueKey":"recap_options.oneOf.0.editorial_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"recap_options.oneOf.0.editorial_prompt","typeLabel":"string | null"},"duration_mode":{"oneOf":[{"type":"string","title":"Duration Mode","enum":["exact","range","uncapped"],"uniqueKey":"recap_options.oneOf.0.duration_mode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Duration Mode","uniqueKey":"recap_options.oneOf.0.duration_mode.oneOf.1","typeLabel":"null"}],"uniqueKey":"recap_options.oneOf.0.duration_mode","typeLabel":"enum\u003cstring> | null"},"target_duration_min_seconds":{"oneOf":[{"type":"integer","title":"Target Duration Min Seconds","maximum":3600,"minimum":60,"uniqueKey":"recap_options.oneOf.0.target_duration_min_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Target Duration Min Seconds","uniqueKey":"recap_options.oneOf.0.target_duration_min_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"recap_options.oneOf.0.target_duration_min_seconds","typeLabel":"integer | null"},"target_duration_max_seconds":{"oneOf":[{"type":"integer","title":"Target Duration Max Seconds","maximum":3600,"minimum":60,"uniqueKey":"recap_options.oneOf.0.target_duration_max_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Target Duration Max Seconds","uniqueKey":"recap_options.oneOf.0.target_duration_max_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"recap_options.oneOf.0.target_duration_max_seconds","typeLabel":"integer | null"}},"uniqueKey":"recap_options.oneOf.0","typeLabel":"RecapOptions · object"},{"type":"null","uniqueKey":"recap_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"recap_options","typeLabel":"RecapOptions · object | null"}},"type":"object","required":["project_id","target_duration_seconds"],"title":"CreatePublicRecapRequest","uniqueKey":"","typeLabel":"CreatePublicRecapRequest · object"},"examples":{"Example":{"title":"Example","value":{"project_id":123,"target_duration_seconds":1800,"name":"\u003cstring>","exclude_event_types":["\u003cstring>"],"selected_edit_ids":["\u003cstring>"],"recap_mode":"custom","fight_ceremony_config":[{"fight_number":123,"include_walkon":false,"include_decision":false}],"render_video":"ffmpeg","sport":"\u003cstring>","recap_options":{"editorial_prompt":"\u003cstring>","target_duration_min_seconds":1830,"target_duration_max_seconds":1830}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"e3b6d971-0dfc-4224-a365-1b47cb8127be":{"content":{"application/json":{"schema":{"properties":{"id":{"type":"integer","title":"Id","isRequired":true,"uniqueKey":"id","typeLabel":"integer"},"status":{"type":"string","title":"Status","default":"queued","uniqueKey":"status","typeLabel":"string"},"task_id":{"oneOf":[{"type":"string","title":"Task Id","uniqueKey":"task_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Task Id","uniqueKey":"task_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"task_id","typeLabel":"string | null"}},"type":"object","required":["id"],"title":"CreatePublicRecapResponse","uniqueKey":"","typeLabel":"CreatePublicRecapResponse · object"},"examples":{"Example":{"title":"Example","value":{"id":123,"status":"queued","task_id":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Success","exampleType":"generated"},"35ec61e8-2e13-448f-a1cb-a7d949a7d567":{"content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>"}]}}},"exampleType":"generated"}},"description":"Validation Error","exampleType":"generated"}},"security":{"f936b93f-4b08-430e-b0b9-7d8d0dd04e4f":{"HTTPBearer":{"type":"http","scheme":"bearer","scopes":[]}}},"servers":{"c81bc9a5-fcba-49a1-b74d-e86f2c2f504b":{"url":"https://api.narrative-sports.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"HTTPBearer","name":"Authorization"}],"title":"HTTPBearer"}]},"originalFileLocation":"api-reference/sports-openapi.json"},"subdomain":"narrativesports","siteName":"Narrative Sports","title":"Create Recap - Narrative Sports","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-06T20:12:58.105Z","originalFileLocation":"api-reference/sports/create-recap.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create a single-game recap from a project\">\u003cmeta data-mint-head name=\"application-name\" content=\"Narrative Sports\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create Recap - Narrative Sports\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a single-game recap from a project\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Narrative Sports\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.narrative-sports.com/api-reference/sports/create-recap\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://narrativesports.mintlify.app/_mintlify/api/og/v2?division=Recaps\u0026amp;title=Create+Recap\u0026amp;description=Create+a+single-game+recap+from+a+project\u0026amp;theme=585a8363fd89349efb1b7ef9\u0026amp;signature=b213cce392c24f7d1880f1ae76c7c972e463714b33ddc2ba6814888b70e90262\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create Recap - Narrative Sports\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a single-game recap from a project\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://narrativesports.mintlify.app/_mintlify/api/og/v2?division=Recaps\u0026amp;title=Create+Recap\u0026amp;description=Create+a+single-game+recap+from+a+project\u0026amp;theme=585a8363fd89349efb1b7ef9\u0026amp;signature=b213cce392c24f7d1880f1ae76c7c972e463714b33ddc2ba6814888b70e90262\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/narrativesports/RCqu0h0FDoVTr51N/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Narrative Sports\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1a1a1a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.narrative-sports.com/api-reference/sports/create-recap\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/sports/create-recap.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.narrative-sports.com/#organization\",\"name\":\"Narrative Sports\",\"url\":\"https://docs.narrative-sports.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/narrativesports/vFVZH5QQ1ixolEbk/logo/light.png?fit=max\u0026auto=format\u0026n=vFVZH5QQ1ixolEbk\u0026q=85\u0026s=cce219b4abbc60216b849c6da610484d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.narrative-sports.com#website\",\"name\":\"Narrative Sports\",\"url\":\"https://docs.narrative-sports.com\",\"publisher\":{\"@id\":\"https://docs.narrative-sports.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.narrative-sports.com/api-reference/sports/create-recap#webpage\",\"url\":\"https://docs.narrative-sports.com/api-reference/sports/create-recap\",\"name\":\"Create Recap\",\"description\":\"Create a single-game recap from a project\",\"dateModified\":\"2026-09-06T20:12:58.105Z\",\"isPartOf\":{\"@id\":\"https://docs.narrative-sports.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.narrative-sports.com/api-reference/sports/create-recap#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.narrative-sports.com/api-reference/sports/create-recap#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Narrative Sports\",\"item\":\"https://docs.narrative-sports.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create Recap\",\"item\":\"https://docs.narrative-sports.com/api-reference/sports/create-recap\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.narrative-sports.com/api-reference/sports/create-recap#apireference\",\"headline\":\"Create Recap\",\"name\":\"Create Recap\",\"description\":\"Create a single-game recap from a project\",\"url\":\"https://docs.narrative-sports.com/api-reference/sports/create-recap\",\"mainEntityOfPage\":{\"@id\":\"https://docs.narrative-sports.com/api-reference/sports/create-recap#webpage\"},\"dateModified\":\"2026-09-06T20:12:58.105Z\",\"publisher\":{\"@id\":\"https://docs.narrative-sports.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.narrative-sports.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Narrative Sports\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Narrative Sports","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Getting Started","pages":[{"title":"Getting Started","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Overview","href":"/api-reference/sports/introduction"},{"title":"Health","openapi":"GET /health","href":"/api-reference/sports/health"}]},{"group":"Task Creation","pages":[{"title":"Create Task","openapi":"POST /tasks/create-task","href":"/api-reference/sports/create-task"}]},{"group":"Task Management","pages":[{"title":"List Tasks","openapi":"GET /tasks/list-tasks","href":"/api-reference/sports/list-tasks"},{"title":"Get Task Info","openapi":"GET /tasks/{task_id}/info","href":"/api-reference/sports/get-task-info"},{"title":"Extend Task Life","openapi":"POST /tasks/{task_id}/extend-life","href":"/api-reference/sports/extend-task-life"},{"title":"Kill Task","openapi":"POST /tasks/{task_id}/kill","href":"/api-reference/sports/kill-task"}]},{"group":"License Usage","pages":[{"title":"Current License Usage","openapi":"GET /usage/current","href":"/api-reference/sports/current-usage"},{"title":"Download Current Usage","openapi":"GET /usage/current/export","href":"/api-reference/sports/download-usage"}]},{"group":"Deprecated","pages":[{"title":"Warm Up Instance","openapi":"POST /tasks/warmup","href":"/api-reference/sports/warmup"},{"title":"Assign Task","openapi":"POST /tasks/assign-task","href":"/api-reference/sports/assign-task"},{"title":"Get Task Status","openapi":"GET /tasks/{task_id}/status","href":"/api-reference/sports/get-task-status"}]},{"group":"Highlights","pages":[{"title":"List Highlights","openapi":"GET /highlights","href":"/api-reference/sports/list-highlights"},{"title":"Get Highlight","openapi":"GET /highlights/{highlight_id}","href":"/api-reference/sports/get-highlight"},{"title":"Get Signed URL","openapi":"GET /highlights/{highlight_id}/signed-url","href":"/api-reference/sports/get-signed-url"},{"title":"Batch Signed URLs","openapi":"POST /highlights/batch-signed-urls","href":"/api-reference/sports/batch-signed-urls"},{"title":"Get Project Highlight Options","openapi":"GET /projects/{project_id}/highlight-options","href":"/api-reference/sports/get-project-highlight-options"}]},{"group":"Highlight Packages (Early Beta)","pages":[{"title":"Create Highlight Package","openapi":"POST /highlight-packages","href":"/api-reference/sports/create-highlight-package"},{"title":"Get Highlight Package","openapi":"GET /highlight-packages/{package_id}","href":"/api-reference/sports/get-highlight-package"},{"title":"List Highlight Packages","openapi":"GET /highlight-packages","href":"/api-reference/sports/list-highlight-packages"},{"title":"Batch Highlight Packages","openapi":"GET /highlight-packages/batch","href":"/api-reference/sports/batch-highlight-packages"},{"title":"Delete Highlight Package","openapi":"DELETE /highlight-packages/{package_id}","description":"Delete a highlight package","href":"/api-reference/sports/delete-highlight-package"}]},{"group":"Recaps","pages":[{"title":"Create Recap","openapi":"POST /v1/recaps","href":"/api-reference/sports/create-recap"},{"title":"Get Recap","openapi":"GET /v1/recaps/{recap_id}","description":"Get details of a game recap","href":"/api-reference/sports/get-recap"},{"title":"List Recaps","openapi":"GET /v1/recaps","href":"/api-reference/sports/list-recaps"},{"title":"Delete Recap","openapi":"DELETE /v1/recaps/{recap_id}","href":"/api-reference/sports/delete-recap"}]}]}]},"title":"Create Recap - Narrative Sports","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}