The Platform API

Videos

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

Videos

Upload, process, and manage video files within a project.

GET/api/v1/projects/:projectId/videosList videos

List videos

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

POST/api/v1/projects/:projectId/videos/uploadUpload video file

Upload video file

Multipart form-data. Field name: video. Max size: 1GB.

curl -X POST https://platform.endlessai.com/api/v1/projects/PROJECT_ID/videos/upload \
  -H "X-Api-Key: YOUR_KEY" \
  -F "video=@/path/to/video.mp4"
POST/api/v1/projects/:projectId/videos/upload-from-urlImport video from URL

Import video from URL

Downloads the video in the background. Returns 202 Accepted.

{ "url": "https://example.com/video.mp4", "name": "Remote Video" }
GET/api/v1/projects/:projectId/videos/:videoIdGet video details

Get video details

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

PUT/api/v1/projects/:projectId/videos/:videoIdUpdate video metadata

Update video metadata

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

DELETE/api/v1/projects/:projectId/videos/:videoIdDelete video

Delete video

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

GET/api/v1/projects/:projectId/videos/:videoId/statusGet processing status

Get processing status

Poll this endpoint until status is completed.

{
  "videoId": "VIDEO_ID",
  "status": "completed",
  "includeInQA": true
}
POST/api/v1/projects/:projectId/videos/:videoId/processBetaProcess a video

Process a video

Beta: this operation may change before it is final.

Queues analysis using the project's processing settings. Poll the video status for completion.

GET/api/v1/projects/:projectId/videos/:videoId/progressPoll processing progress

Poll processing progress

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

GET/api/v1/projects/:projectId/videos/:videoId/summaryGet video summary

Get video summary

Returns the video's summary. Use .../smart-scan/summary for its Overview scan summary.

GET/api/v1/projects/:projectId/videos/:videoId/thumbnailGet thumbnail URL

Get thumbnail URL

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

POST/api/v1/projects/:projectId/videos/:videoId/reprocessReprocess with specific tasks

Reprocess with specific tasks

Call processing-capabilities first to find the tasks available for this video.

{ "tasks": ["generate_summary"] }
POST/api/v1/projects/:projectId/videosRegister a video by name or URL

Register a video by name or URL

Creates the video record without starting processing. To import and process a video from a URL, use upload-from-url. Send name or url. Returns 201. Needs write access.

{ "name": "Gate camera 2026-10-01", "url": "https://example.com/gate.mp4" }
GET/api/v1/projects/:projectId/videos/:videoId/transcode/estimateCheck whether a video needs converting for playback

Check whether a video needs converting for playback

needed is true when converting would let the video play in every supported browser. Conversion does not use tokens.

{
            "video_id": "VIDEO_ID",
            "needed": true,
            "verdict": "needs_transcode",
            "in_progress": false,
            "billed": false,
            "estimate": { "duration_sec": 1740, "minutes": 29, "resolution_factor": 1 }
          }
POST/api/v1/projects/:projectId/videos/:videoId/transcodeConvert a video for playback

Convert a video for playback

Queues the conversion and returns 202; follow progress through the video status. 409 when there is nothing to convert or a conversion is already running. Needs write access.

// Response (202 Accepted)
          { "queued": true, "billed": false, "estimate": { "duration_sec": 1740, "minutes": 29, "resolution_factor": 1 } }