Skip to main content
Moment-returning APIs provide timestamped Shot objects for the matching parts of a video. Each Shot identifies the source video and exact time range, so an application can inspect the evidence, play an individual moment, or combine several results into one stream. Use return_fields to include the stored index rows associated with each result.

Basic result

A Shot includes: Example:

APIs that return shots

These APIs return Shot objects:
aggregate() does not return shots; it returns aggregate rows. ask() returns an answer plus optional source shots.

Play a result

You can play an individual shot:
Or use the URL directly when present:
If a stream URL is not already present, generate it from the shot timestamps:

Return hydrated index rows

return_fields selects which indexes to hydrate for each matched scene. Hydrated rows are available in shot.metadata["indexes"], not shot.fields. For a single index:
For high-level search across multiple indexes:
A hydrated Shot then looks like:
For debugging, request all stored index rows for each matched scene:
Accepted return_fields values:
return_fields currently selects indexes, not individual fields. A hydrated index value is a list because one scene can map to multiple rows, such as several object labels or brand mentions.

Compile many results into one stream

For semantic_search() or query() results, compile the SearchResult directly:
For high-level search(), compile the nested SearchResult:
Or build a stream from Shot timestamps:
Generated streams are playable HLS URLs.

Ask sources

ask() returns an answer and, when include_sources=True, supporting Shot objects.

Result controls

Hydrated index rows can make responses larger. Keep return_fields narrow for broad search previews and use "all" mainly for debugging or final inspection.

Next steps

Search APIs

Retrieve indexed moments.

Hybrid and Collection Search

Combine results across indexes and videos.