The Platform API

Overview Scan

Manage your videos, ask questions, and build applications with the Platform API. Explore the operations below for request details, responses, and examples.

Overview Scan

Overview scan creates a searchable summary of a video's content. Use the endpoint below to start a scan or update an existing summary.

POST/api/v1/projects/:projectId/videos/:videoId/smart-scanTrigger (or re-run) a smart scan

Trigger (or re-run) a smart scan

Body is optional. Pass dry_run: true to plan without persisting or billing, or aconfig_override object (quality, strategy, …). Returns 202 when queued.

{ "config_override": { "quality": "balanced" }, "dry_run": false }
GET/api/v1/projects/:projectId/videos/:videoId/smart-scanGet scan status + last run

Get scan status + last run

Send the request to https://platform.endlessai.com/api/v1/projects/:projectId/videos/:videoId/smart-scan using your project key or user token.

GET/api/v1/projects/:projectId/videos/:videoId/smart-scan/summaryGet the Overview scan summary

Get the Overview scan summary

Send the request to https://platform.endlessai.com/api/v1/projects/:projectId/videos/:videoId/smart-scan/summary using your project key or user token.

GET/api/v1/projects/:projectId/videos/:videoId/scenesList scenes for a video

List scenes for a video

Query: min_time, max_time, source, min_importance, limit.

GET/api/v1/projects/:projectId/scenes/:sceneIdGet a single scene

Get a single scene

Send the request to https://platform.endlessai.com/api/v1/projects/:projectId/scenes/:sceneId using your project key or user token.

GET/api/v1/projects/:projectId/scenes/searchSearch video scenes by text

Search video scenes by text

Send the request to https://platform.endlessai.com/api/v1/projects/:projectId/scenes/search using your project key or user token.

GET/api/v1/projects/:projectId/frames/searchSemantic search over indexed frames

Semantic search over indexed frames

Send the request to https://platform.endlessai.com/api/v1/projects/:projectId/frames/search using your project key or user token.

GET/api/v1/projects/:projectId/videos/:videoId/smart-scan/summariesList a video's scan summaries, newest first

List a video's scan summaries, newest first

Every summary written for the video, including the rolling summaries of a live scan. Query: limit.

{
            "video_id": "VIDEO_ID",
            "summaries": [
              { "id": "SUMMARY_ID", "created_at": "2026-10-01T09:30:00Z", "content": "Two trucks unload at bay 2..." }
            ]
          }
GET/api/v1/projects/:projectId/videos/:videoId/utterancesGet the video's timed transcript

Get the video's timed transcript

Speech in the video, in order, with start and end times in seconds. Speakers are labelled anonymously (SPEAKER_00, SPEAKER_01, …).

{
            "video_id": "VIDEO_ID",
            "count": 2,
            "utterances": [
              { "speaker_id": "SPEAKER_00", "t_start": 3.2, "t_end": 5.9, "text": "Bay two is clear." },
              { "speaker_id": "SPEAKER_01", "t_start": 6.4, "t_end": 8.1, "text": "Backing in now." }
            ]
          }
POST/api/v1/projects/:projectId/streams/:streamId/live-scanStart a live scan on a stream

Start a live scan on a stream

Scans a live stream continuously, writing rolling summaries and raising alerts for what you watch for. Body is optional: settings saved with live-scan/config are used. Returns 202; 409 if a scan is already running. Needs write access.

{ "watch": { "watch_for": ["person climbing the fence"] }, "summaries": true }
GET/api/v1/projects/:projectId/streams/:streamId/live-scanGet live scan status

Get live scan status

state is idle when no scan is running.

{
            "stream_id": "STREAM_ID",
            "state": "running",
            "startedAt": "2026-10-01T09:00:00.000Z",
            "timeoutSec": 3600,
            "lastSampleAt": "2026-10-01T09:42:10.000Z",
            "stopReason": null
          }
DELETE/api/v1/projects/:projectId/streams/:streamId/live-scanStop a live scan

Stop a live scan

Stops the scan and turns it off for the stream, so it does not restart on its own. Needs write access.

GET/api/v1/projects/:projectId/streams/:streamId/live-scan/configGet a stream's live scan settings

Get a stream's live scan settings

Send the request to https://platform.endlessai.com/api/v1/projects/:projectId/streams/:streamId/live-scan/config using your project key or user token.

PUT/api/v1/projects/:projectId/streams/:streamId/live-scan/configUpdate a stream's live scan settings

Update a stream's live scan settings

Send only the fields to change. fps: above 0, up to 10. timeout_sec: 60–86400 seconds, or 0 to run until stopped — it keeps using tokens until you stop it. Needs write access.

{
            "enabled": true,
            "watch_for": ["person climbing the fence", "vehicle in the fire lane"],
            "fps": 1,
            "timeout_sec": 3600
          }