Story0.API

Reference

API reference

Base URL https://api.story0.com. Authenticate with Authorization: Bearer s0_live_…. Errors are RFC 9457 problem documents. Generated from the OpenAPI 3.1 contract, version 2026-11-01.

Assets

post/v1/uploads

Start an upload

Returns a short-lived URL. PUT the file bytes to it with the listed headers, then complete the upload to get an asset.

Request body

filenamestring
max length 255
content_typestring
max length 100
bytesinteger

Response 201 · Upload

idrequiredstring
objectrequired"upload"
statusrequired"pending" | "completed" | "expired"
upload_urlrequiredstring
PUT the file bytes here with the listed headers.
methodrequired"PUT"
headersrequiredobject
chunk_size_multiplerequiredinteger
Chunked uploads send `Content-Range` chunks in multiples of this size (except the last).
expires_atrequiredstring
asset_idrequiredstring | null

Responses

201 Upload session401 Missing or invalid credentials422 The request is not valid
curl -X POST "https://api.story0.com/v1/uploads" \
  -H "Authorization: Bearer $STORY0_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content_type": "video/mp4"
  }'
post/v1/uploads/{id}/complete

Complete an upload

Creates an asset from the uploaded bytes. The asset is processing until its media facts are read, usually within seconds.

Parameters

idpathrequiredstring

Response 200 · Asset

idrequiredstring
objectrequired"asset"
statusrequired"processing" | "ready" | "failed" | "deleted"
sourcerequired"upload" | "url"
filenamerequiredstring | null
livemoderequiredboolean
mediarequiredobject | null
duration_secondsrequirednumber | null
widthrequirednumber | null
heightrequirednumber | null
fpsrequirednumber | null
video_codecrequiredstring | null
has_audiorequiredboolean | null
bytesrequirednumber | null
sha256requiredstring | null
errorrequiredobject | null
created_atrequiredstring
ready_atrequiredstring | null
retentionrequiredobject
media_expires_atrequiredstring

Responses

200 The new asset401 Missing or invalid credentials404 Not found422 The request is not valid
curl -X POST "https://api.story0.com/v1/uploads/id_…/complete" \
  -H "Authorization: Bearer $STORY0_API_KEY"
post/v1/assets

Create an asset from a URL

Fetches a direct link to a video file. Platform pages (YouTube, Instagram, TikTok) are not fetched; upload those files instead.

Request body

urlrequiredstring
filenamestring
max length 255

Response 200 · Asset

idrequiredstring
objectrequired"asset"
statusrequired"processing" | "ready" | "failed" | "deleted"
sourcerequired"upload" | "url"
filenamerequiredstring | null
livemoderequiredboolean
mediarequiredobject | null
duration_secondsrequirednumber | null
widthrequirednumber | null
heightrequirednumber | null
fpsrequirednumber | null
video_codecrequiredstring | null
has_audiorequiredboolean | null
bytesrequirednumber | null
sha256requiredstring | null
errorrequiredobject | null
created_atrequiredstring
ready_atrequiredstring | null
retentionrequiredobject
media_expires_atrequiredstring

Responses

200 The new asset401 Missing or invalid credentials422 The request is not valid
curl -X POST "https://api.story0.com/v1/assets" \
  -H "Authorization: Bearer $STORY0_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "…"
  }'
get/v1/assets

List assets

Parameters

limitqueryinteger
cursorquerystring

Response 200 · AssetList

objectrequired"list"
datarequiredAsset[]
idrequiredstring
objectrequired"asset"
statusrequired"processing" | "ready" | "failed" | "deleted"
sourcerequired"upload" | "url"
filenamerequiredstring | null
livemoderequiredboolean
mediarequiredobject | null
duration_secondsrequirednumber | null
widthrequirednumber | null
heightrequirednumber | null
fpsrequirednumber | null
video_codecrequiredstring | null
has_audiorequiredboolean | null
bytesrequirednumber | null
sha256requiredstring | null
errorrequiredobject | null
created_atrequiredstring
ready_atrequiredstring | null
retentionrequiredobject
media_expires_atrequiredstring
has_morerequiredboolean
next_cursorrequiredstring | null

Responses

200 Assets, newest first401 Missing or invalid credentials
curl "https://api.story0.com/v1/assets" \
  -H "Authorization: Bearer $STORY0_API_KEY"
get/v1/assets/{id}

Retrieve an asset

Parameters

idpathrequiredstring

Response 200 · Asset

idrequiredstring
objectrequired"asset"
statusrequired"processing" | "ready" | "failed" | "deleted"
sourcerequired"upload" | "url"
filenamerequiredstring | null
livemoderequiredboolean
mediarequiredobject | null
duration_secondsrequirednumber | null
widthrequirednumber | null
heightrequirednumber | null
fpsrequirednumber | null
video_codecrequiredstring | null
has_audiorequiredboolean | null
bytesrequirednumber | null
sha256requiredstring | null
errorrequiredobject | null
created_atrequiredstring
ready_atrequiredstring | null
retentionrequiredobject
media_expires_atrequiredstring

Responses

200 The asset401 Missing or invalid credentials404 Not found
curl "https://api.story0.com/v1/assets/id_…" \
  -H "Authorization: Bearer $STORY0_API_KEY"
delete/v1/assets/{id}

Delete an asset's media

Deletes the stored media now. Results that already exist stay available until their own expiry.

Parameters

idpathrequiredstring

Response 200 · Asset

idrequiredstring
objectrequired"asset"
statusrequired"processing" | "ready" | "failed" | "deleted"
sourcerequired"upload" | "url"
filenamerequiredstring | null
livemoderequiredboolean
mediarequiredobject | null
duration_secondsrequirednumber | null
widthrequirednumber | null
heightrequirednumber | null
fpsrequirednumber | null
video_codecrequiredstring | null
has_audiorequiredboolean | null
bytesrequirednumber | null
sha256requiredstring | null
errorrequiredobject | null
created_atrequiredstring
ready_atrequiredstring | null
retentionrequiredobject
media_expires_atrequiredstring

Responses

200 The deleted asset401 Missing or invalid credentials404 Not found
curl -X DELETE "https://api.story0.com/v1/assets/id_…" \
  -H "Authorization: Bearer $STORY0_API_KEY"

Segments

post/v1/segments

Segment a video

partition labels every moment of the range with exactly one of your labels or uncertain. extract returns only the moments that match the instruction. Returns a job; the result is a Segmentation.

Request body

inputrequiredInput
Exactly one of `asset_id` (uploaded or fetched media) or `url` (a direct link to a video file).
asset_idstring
urlstring
moderequired"partition" | "extract"
`partition` labels the whole range; `extract` returns only matching moments.
instructionrequiredstring
min length 3, max length 2000
labelsLabel[]
Required for `partition`: the mutually exclusive states.· min 2 items, max 12 items
keyrequiredstring
descriptionrequiredstring
min length 1, max length 500
uncertaintyobject
Label used where evidence is insufficient. Default `uncertain`.
labelstring
boundariesobject
Boundary snapping. Only `none` is available today.
snap"none"
samplingobject
Frames per second inspected. Default: 2 up to 2 minutes, 1 up to 10, then fewer.
fpsnumber
≥ 0.1, ≤ 4
rangeobject
Analyse only this range, in seconds from the start.
startnumber
≥ 0
endnumber
constraintsobject
`extract` only: moment length and count limits.
min_secondsnumber
≤ 600
max_secondsnumber
≤ 3600
max_segmentsinteger
≤ 500
billingBillingOptions
The total this request may cost, including any preparation. Work stops before exceeding it.
max_chargeMoney
currencyrequired"USD"
amountrequiredstring
metadataobject
Up to 20 key-value pairs (keys up to 40 characters, values up to 500) echoed on the job.

Response 200 · Job

idrequiredstring
objectrequired"job"
operationrequired"screen" | "segment"
statusrequired"queued" | "running" | "succeeded" | "failed" | "cancelled"
livemoderequiredboolean
request_idrequiredstring | null
The request that created the job.
asset_idrequiredstring | null
stagerequiredstring | null
progressrequirednumber | null
resultrequiredobject | null
idrequiredstring
objectrequiredstring | null
urlrequiredstring
errorrequiredobject | null
chargerequiredobject
currencyrequired"USD"
estimaterequiredstring | null
max_chargerequiredstring
totalrequiredstring | null
created_atrequiredstring
started_atrequiredstring | null
finished_atrequiredstring | null
metadatarequiredobject

Responses

200 Replayed: the same idempotency key and request202 Accepted: the job is queued401 Missing or invalid credentials402 Not enough credits, or the work would exceed `max_charge`422 The request is not valid429 Too many requests
curl -X POST "https://api.story0.com/v1/segments" \
  -H "Authorization: Bearer $STORY0_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "asset_id": "asset_…"
    },
    "mode": "partition",
    "instruction": "Partition the whole video by whether a dog is visible."
  }'
get/v1/segments/{id}

Retrieve a segmentation

Parameters

idpathrequiredstring

Response 200 · Segmentation

idrequiredstring
objectrequired"segmentation"
job_idrequiredstring
asset_idrequiredstring
livemoderequiredboolean
fixtureboolean
moderequired"partition" | "extract"
enginerequiredstring
time_unitrequired"seconds"
duration_secondsrequirednumber
rangerequiredobject
startrequirednumber
endrequirednumber
coveragerequiredobject
timelinerequired"complete"
sampled_framesrequirednumber
frame_interval_secondsrequirednumber
uncertain_secondsrequirednumber
modalitiesrequiredstring[]
boundary_resolution_secondsrequirednumber
segmentsrequiredobject[]
idrequiredstring
startrequirednumber
endrequirednumber
labelrequiredstring
titlestring
reviewrequiredReview
requiredrequiredboolean
Whether a person should check this before relying on it. It says nothing about rights or permission to publish.
reasonsrequiredstring[]
Why review is suggested: `insufficient_evidence`, `partly_uncertain`, `padded_to_min_seconds`, `split_at_max_seconds`, `no_frames_sampled` or `not_answered`.
evidencerequiredEvidence[]
idrequiredstring
kindrequired"seen"
startrequirednumber
endrequirednumber
descriptionrequiredstring
configrequiredobject
provenancerequiredobject
enginerequiredstring
analysis_reusedrequiredboolean
api_versionrequiredstring
receiptrequiredReceipt
currencyrequired"USD"
totalrequiredstring
itemsrequiredobject[]
itemrequiredstring
amountrequiredstring
unit_price_per_minuterequiredstring
billable_secondsrequirednumber
price_versionrequiredstring
retentionrequiredobject
result_expires_atrequiredstring
media_expires_atrequiredstring
created_atrequiredstring

Responses

200 The segmentation401 Missing or invalid credentials404 Not found
curl "https://api.story0.com/v1/segments/id_…" \
  -H "Authorization: Bearer $STORY0_API_KEY"

Screenings

post/v1/screenings

Screen a video against categories

Answers each category with match, no_match or uncertain, with the frames that support a match. Returns a job; the result is a Screening.

Request body

inputrequiredInput
Exactly one of `asset_id` (uploaded or fetched media) or `url` (a direct link to a video file).
asset_idstring
urlstring
categoriesrequiredLabel[]
min 1 items, max 20 items
keyrequiredstring
descriptionrequiredstring
min length 1, max length 500
billingBillingOptions
The total this request may cost, including any preparation. Work stops before exceeding it.
max_chargeMoney
currencyrequired"USD"
amountrequiredstring
metadataobject
Up to 20 key-value pairs (keys up to 40 characters, values up to 500) echoed on the job.

Response 200 · Job

idrequiredstring
objectrequired"job"
operationrequired"screen" | "segment"
statusrequired"queued" | "running" | "succeeded" | "failed" | "cancelled"
livemoderequiredboolean
request_idrequiredstring | null
The request that created the job.
asset_idrequiredstring | null
stagerequiredstring | null
progressrequirednumber | null
resultrequiredobject | null
idrequiredstring
objectrequiredstring | null
urlrequiredstring
errorrequiredobject | null
chargerequiredobject
currencyrequired"USD"
estimaterequiredstring | null
max_chargerequiredstring
totalrequiredstring | null
created_atrequiredstring
started_atrequiredstring | null
finished_atrequiredstring | null
metadatarequiredobject

Responses

200 Replayed: the same idempotency key and request202 Accepted: the job is queued401 Missing or invalid credentials402 Not enough credits, or the work would exceed `max_charge`422 The request is not valid429 Too many requests
curl -X POST "https://api.story0.com/v1/screenings" \
  -H "Authorization: Bearer $STORY0_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "asset_id": "asset_…"
    },
    "categories": [
      {
        "key": "animals",
        "description": "Animals doing something surprising or funny"
      },
      {
        "key": "sports",
        "description": "Skilled action sports with a clear payoff"
      }
    ]
  }'
get/v1/screenings/{id}

Retrieve a screening

Parameters

idpathrequiredstring

Response 200 · Screening

idrequiredstring
objectrequired"screening"
job_idrequiredstring
asset_idrequiredstring
livemoderequiredboolean
fixtureboolean
enginerequiredstring
time_unitrequired"seconds"
duration_secondsrequirednumber
categoriesrequiredobject[]
keyrequiredstring
outcomerequired"match" | "no_match" | "uncertain"
scorerequiredobject
valuerequirednumber
kindrequired"model_estimate"
calibratedrequiredfalse
observationrequiredstring
evidencerequiredobject[]
kindrequired"seen"
startrequirednumber
endrequirednumber
reviewrequiredReview
requiredrequiredboolean
Whether a person should check this before relying on it. It says nothing about rights or permission to publish.
reasonsrequiredstring[]
Why review is suggested: `insufficient_evidence`, `partly_uncertain`, `padded_to_min_seconds`, `split_at_max_seconds`, `no_frames_sampled` or `not_answered`.
matchedrequiredstring[]
coveragerequiredobject
sampled_framesrequirednumber
modalitiesrequiredstring[]
configrequiredobject
provenancerequiredobject
enginerequiredstring
analysis_reusedrequiredboolean
api_versionrequiredstring
receiptrequiredReceipt
currencyrequired"USD"
totalrequiredstring
itemsrequiredobject[]
itemrequiredstring
amountrequiredstring
unit_price_per_minuterequiredstring
billable_secondsrequirednumber
price_versionrequiredstring
retentionrequiredobject
result_expires_atrequiredstring
media_expires_atrequiredstring
created_atrequiredstring

Responses

200 The screening401 Missing or invalid credentials404 Not found
curl "https://api.story0.com/v1/screenings/id_…" \
  -H "Authorization: Bearer $STORY0_API_KEY"

Jobs

get/v1/jobs/{id}

Retrieve a job

Returns the job's current state. With wait, the request is held for up to that many seconds and answers as soon as the job finishes, so completion is seen within a fraction of a second without rapid polling. Or listen for the job.* webhooks.

Parameters

idpathrequiredstring
waitquerynumber | null
Seconds to wait for the job to finish (0–30).

Response 200 · Job

idrequiredstring
objectrequired"job"
operationrequired"screen" | "segment"
statusrequired"queued" | "running" | "succeeded" | "failed" | "cancelled"
livemoderequiredboolean
request_idrequiredstring | null
The request that created the job.
asset_idrequiredstring | null
stagerequiredstring | null
progressrequirednumber | null
resultrequiredobject | null
idrequiredstring
objectrequiredstring | null
urlrequiredstring
errorrequiredobject | null
chargerequiredobject
currencyrequired"USD"
estimaterequiredstring | null
max_chargerequiredstring
totalrequiredstring | null
created_atrequiredstring
started_atrequiredstring | null
finished_atrequiredstring | null
metadatarequiredobject

Responses

200 The job401 Missing or invalid credentials404 Not found
curl "https://api.story0.com/v1/jobs/id_…" \
  -H "Authorization: Bearer $STORY0_API_KEY"
get/v1/jobs

List jobs

Parameters

limitqueryinteger
cursorquerystring
statusquery"queued" | "running" | "succeeded" | "failed" | "cancelled"

Response 200 · JobList

objectrequired"list"
datarequiredJob[]
idrequiredstring
objectrequired"job"
operationrequired"screen" | "segment"
statusrequired"queued" | "running" | "succeeded" | "failed" | "cancelled"
livemoderequiredboolean
request_idrequiredstring | null
The request that created the job.
asset_idrequiredstring | null
stagerequiredstring | null
progressrequirednumber | null
resultrequiredobject | null
idrequiredstring
objectrequiredstring | null
urlrequiredstring
errorrequiredobject | null
chargerequiredobject
currencyrequired"USD"
estimaterequiredstring | null
max_chargerequiredstring
totalrequiredstring | null
created_atrequiredstring
started_atrequiredstring | null
finished_atrequiredstring | null
metadatarequiredobject
has_morerequiredboolean
next_cursorrequiredstring | null

Responses

200 Jobs, newest first401 Missing or invalid credentials
curl "https://api.story0.com/v1/jobs" \
  -H "Authorization: Bearer $STORY0_API_KEY"
post/v1/jobs/{id}/cancel

Cancel a job

A queued job is cancelled at once and costs nothing. A running job stops at its next checkpoint; if it finishes first, it completes and is billed.

Parameters

idpathrequiredstring

Response 200 · Job

idrequiredstring
objectrequired"job"
operationrequired"screen" | "segment"
statusrequired"queued" | "running" | "succeeded" | "failed" | "cancelled"
livemoderequiredboolean
request_idrequiredstring | null
The request that created the job.
asset_idrequiredstring | null
stagerequiredstring | null
progressrequirednumber | null
resultrequiredobject | null
idrequiredstring
objectrequiredstring | null
urlrequiredstring
errorrequiredobject | null
chargerequiredobject
currencyrequired"USD"
estimaterequiredstring | null
max_chargerequiredstring
totalrequiredstring | null
created_atrequiredstring
started_atrequiredstring | null
finished_atrequiredstring | null
metadatarequiredobject

Responses

200 The job's current state401 Missing or invalid credentials404 Not found
curl -X POST "https://api.story0.com/v1/jobs/id_…/cancel" \
  -H "Authorization: Bearer $STORY0_API_KEY"

Billing

post/v1/estimates

Estimate a charge

Quotes an operation for a ready asset, or for a duration you supply.

Request body

operationrequired"screen" | "segment"
inputrequiredobject
asset_idstring
duration_secondsnumber

Response 200 · Estimate

objectrequired"estimate"
operationrequired"screen" | "segment"
billable_secondsrequirednumber
currencyrequired"USD"
totalrequiredstring
itemsrequiredobject[]
itemrequiredstring
amountrequiredstring
unit_price_per_minuterequiredstring
price_versionrequiredstring
expires_atrequiredstring

Responses

200 The estimate401 Missing or invalid credentials404 Not found422 The request is not valid
curl -X POST "https://api.story0.com/v1/estimates" \
  -H "Authorization: Bearer $STORY0_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "screen",
    "input": {
      "asset_id": "asset_…"
    }
  }'
get/v1/balance

Retrieve the balance

Response 200 · Balance

objectrequired"balance"
currencyrequired"USD"
availablerequiredstring
heldrequiredstring
creditsrequiredinteger

Responses

200 The balance401 Missing or invalid credentials
curl "https://api.story0.com/v1/balance" \
  -H "Authorization: Bearer $STORY0_API_KEY"
get/v1/usage

Summarize usage

Live charges by day and operation. Test-mode work is never billed and is not included.

Parameters

daysqueryinteger

Response 200 · Usage

objectrequired"usage"
currencyrequired"USD"
periodrequiredobject
startrequiredstring
endrequiredstring
totalsrequiredobject
jobsrequiredinteger
billable_secondsrequirednumber
amountrequiredstring
daysrequiredobject[]
daterequiredstring
operationrequired"screen" | "segment"
jobsrequiredinteger
billable_secondsrequirednumber
amountrequiredstring

Responses

200 Usage for the period401 Missing or invalid credentials
curl "https://api.story0.com/v1/usage" \
  -H "Authorization: Bearer $STORY0_API_KEY"
get/v1/prices

List prices

The current price list. No authentication required.

Response 200 · PriceList

objectrequired"price_list"
currencyrequired"USD"
price_versionrequiredstring
minimum_billable_secondsrequiredinteger
operationsrequiredobject
free_creditrequiredstring
credit_packsrequiredobject[]
amountrequiredstring
creditsrequiredinteger

Responses

200 Prices per minute of video
curl "https://api.story0.com/v1/prices" \
  -H "Authorization: Bearer $STORY0_API_KEY"

Webhooks

post/v1/webhook_endpoints

Create a webhook endpoint

Story0 signs every delivery with the Standard Webhooks scheme. The signing secret is returned only here.

Request body

urlrequiredstring
events"job.succeeded" | "job.failed" | "job.cancelled" | "asset.ready" | "asset.failed" | "ping" | "*"[]
Default: every `job.*` event.· min 1 items
descriptionstring
max length 200

Response 201 · WebhookEndpoint

idrequiredstring
objectrequired"webhook_endpoint"
urlrequiredstring
eventsrequiredstring[]
descriptionrequiredstring | null
secretstring
Shown once, at creation. Starts with `whsec_`.
statusrequired"enabled" | "disabled"
created_atrequiredstring

Responses

201 The endpoint, with its secret401 Missing or invalid credentials422 The request is not valid
curl -X POST "https://api.story0.com/v1/webhook_endpoints" \
  -H "Authorization: Bearer $STORY0_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/story0/webhooks"
  }'
get/v1/webhook_endpoints

List webhook endpoints

Response 200 · WebhookEndpointList

objectrequired"list"
datarequiredWebhookEndpoint[]
idrequiredstring
objectrequired"webhook_endpoint"
urlrequiredstring
eventsrequiredstring[]
descriptionrequiredstring | null
secretstring
Shown once, at creation. Starts with `whsec_`.
statusrequired"enabled" | "disabled"
created_atrequiredstring
has_morerequiredboolean
next_cursorrequiredstring | null

Responses

200 Endpoints401 Missing or invalid credentials
curl "https://api.story0.com/v1/webhook_endpoints" \
  -H "Authorization: Bearer $STORY0_API_KEY"
delete/v1/webhook_endpoints/{id}

Disable a webhook endpoint

Parameters

idpathrequiredstring

Response 200 · WebhookEndpoint

idrequiredstring
objectrequired"webhook_endpoint"
urlrequiredstring
eventsrequiredstring[]
descriptionrequiredstring | null
secretstring
Shown once, at creation. Starts with `whsec_`.
statusrequired"enabled" | "disabled"
created_atrequiredstring

Responses

200 The disabled endpoint401 Missing or invalid credentials404 Not found
curl -X DELETE "https://api.story0.com/v1/webhook_endpoints/id_…" \
  -H "Authorization: Bearer $STORY0_API_KEY"
post/v1/webhook_endpoints/{id}/test

Send a test event

Queues a signed ping event to this endpoint only.

Parameters

idpathrequiredstring

Response 202 · Event

idrequiredstring
objectrequired"event"
typerequiredstring
datarequiredobject
created_atrequiredstring

Responses

202 The queued event401 Missing or invalid credentials404 Not found
curl -X POST "https://api.story0.com/v1/webhook_endpoints/id_…/test" \
  -H "Authorization: Bearer $STORY0_API_KEY"
get/v1/webhook_endpoints/{id}/deliveries

List recent deliveries

Parameters

idpathrequiredstring

Response 200 · WebhookDeliveryList

objectrequired"list"
datarequiredWebhookDelivery[]
idrequiredstring
objectrequired"webhook_delivery"
event_idrequiredstring
event_typerequiredstring
statusrequired"pending" | "delivered" | "failed"
attemptsrequiredinteger
last_statusrequiredinteger | null
last_errorrequiredstring | null
created_atrequiredstring
delivered_atrequiredstring | null
has_morerequiredboolean
next_cursorrequiredstring | null

Responses

200 The 50 most recent deliveries401 Missing or invalid credentials404 Not found
curl "https://api.story0.com/v1/webhook_endpoints/id_…/deliveries" \
  -H "Authorization: Bearer $STORY0_API_KEY"
get/v1/events

List events

Every event is recorded, whether or not an endpoint was subscribed. Use this to reconcile after downtime.

Parameters

limitqueryinteger
cursorquerystring
typequerystring

Response 200 · EventList

objectrequired"list"
datarequiredEvent[]
idrequiredstring
objectrequired"event"
typerequiredstring
datarequiredobject
created_atrequiredstring
has_morerequiredboolean
next_cursorrequiredstring | null

Responses

200 Events, newest first401 Missing or invalid credentials
curl "https://api.story0.com/v1/events" \
  -H "Authorization: Bearer $STORY0_API_KEY"

Feedback

post/v1/feedback

Record feedback on a result

Append-only. Feedback never changes the result it refers to.

Request body

result_idrequiredstring
segment_idstring
For segmentations: the interval the feedback is about.
categorystring
For screenings: the category the feedback is about.
kindrequired"correct" | "incorrect" | "relabel" | "note"
labelstring
For `relabel`: the label the reviewer chose.· max length 40
startnumber
≥ 0
endnumber
commentstring
max length 2000
actorstring
Who gave the feedback, in your own terms (an email or user id).· max length 200

Responses

201 The recorded feedback401 Missing or invalid credentials404 Not found422 The request is not valid
curl -X POST "https://api.story0.com/v1/feedback" \
  -H "Authorization: Bearer $STORY0_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "result_id": "seg_01jbx8…",
    "kind": "correct"
  }'