Niravi Docs
GitHub ↗ Get a key ↗

Search

Find moments across every video in your workspace — by meaning, not just keywords.

POST /api/v1/search runs a multimodal embedding search over frames, transcripts, and scene descriptions, fused into one ranked list.

curl https://api.niravi.io/api/v1/search \
  -H "X-API-Key: $NIRAVI_API_KEY" -H "Content-Type: application/json" \
  -d '{"query": "two people arguing in a kitchen", "limit": 10}'
FieldTypeNotes
querystringrequired — natural-language description
limitintresults to return (server default applies if omitted)
video_idstringrestrict to a single video
search_optionsobjectadvanced tuning (fusion weights, modalities)
rerankboolapply a second-pass re-ranker

Each hit carries video_id, timestamp, frame_url, and a score.

for hit in client.search("two people arguing in a kitchen", limit=10):
    print(hit.video_id, hit.timestamp, hit.score)
const hits = await niravi.search("two people arguing in a kitchen", { limit: 10 });

Typed search narrows to a single dimension — POST /api/v1/search/{type} where type is character, location, music, or emotion.

curl https://api.niravi.io/api/v1/search/emotion \
  -H "X-API-Key: $NIRAVI_API_KEY" -H "Content-Type: application/json" \
  -d '{"query": "tense and suspenseful"}'
client.magic_search("character", "a man in a red jacket")
client.magic_search("location", "a rainy city street at night")
await niravi.magicSearch("music", "upbeat synth");
await niravi.magicSearch("emotion", "joyful");

Search a single video instead of the whole corpus by passing video_id (semantic) or scoping a guide’s per-video endpoints — see Videos & processing.