Niravi Cloud API
Search, recall, and analyze a library of video, photos and documents over a simple HTTP API, with a TypeScript SDK and an MCP server for Claude.
Everything is one base URL, https://api.niravi.io, and one credential, an API key (nv_…). A key works in its home workspace and any others you grant it (Concepts).
New (2026-10-15): every upload runs on Arrow unless you name a deprecated NiNo tier. Since 2026-10-14: images & documents, object regions, library-wide People and an Arrow-only feature set. The older NiNo pipelines and NiQu (
classic) search are deprecated.
1. Get an API key
Create one in the dashboard → Settings → Developer. Pick the scopes (read and/or write) and an optional expiry. The secret is shown once — store it somewhere safe.
2. Make your first call
A new key’s home workspace is empty, so start with a read-only demo. Keys can read demo_newsroom, demo_enterprise and demo_creator by default; GET /api/v1/workspaces lists what yours can reach.
curl https://api.niravi.io/api/v1/search \
-H "X-API-Key: $NIRAVI_API_KEY" \
-H "X-Workspace-Id: demo_newsroom" \
-H "Content-Type: application/json" \
-d '{"query": "a reporter speaking to the camera", "limit": 5}'
A successful response is an envelope, { "success": true, "data": … }; hits are in data.results. Errors are described in Concepts.
3. Upload, then search your own library
Uploads need a key with the write scope and land in its home workspace.
curl https://api.niravi.io/api/v1/videos \
-H "X-API-Key: $NIRAVI_API_KEY" \
-F "[email protected]"
The response carries a video_id. Processing is asynchronous: poll GET /api/v1/videos/{video_id} until data.video.status is completed (seconds for a photo, about a minute for a short clip). Then search with Arrow:
curl https://api.niravi.io/api/v1/search \
-H "X-API-Key: $NIRAVI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "a man speaking into a microphone", "engine": "arrow", "limit": 5}'
The first search of a new library can take up to 15 seconds while its index loads; after that, searches answer in about a second. A new upload shows up in search within about five minutes of completing.
4. Or use the SDK
// npm install @niravi/sdk
import { connect } from "@niravi/sdk";
const demo = connect("nv_...", { workspace: "demo_newsroom" });
const hits = await demo.search("a reporter speaking to the camera", { limit: 5 });
const niravi = connect("nv_..."); // the key's home workspace
const { video_id } = await niravi.upload("./clip.mp4"); // Node; runs on Arrow
The SDK’s search() does not take engine yet, so it uses your workspace’s default engine (GET /api/v1/engines). To search Arrow uploads from code today, call POST /api/v1/search with "engine": "arrow", or ask [email protected] to make Arrow your workspace’s default.
The Python SDK is on its way to PyPI; until then, call the HTTP API from Python (any HTTP client works).
Where to next
Demo without a key? The interactive API Reference lets you browse every endpoint and its schemas. To run live calls you’ll need a key.