Search documentation
Search documentation pages and implementation topics.
Summary
The API reference is organized by resource type and workflow boundary for media ingestion, extraction, retrieval, automation, delivery, and agentic search.
All REST examples in this section assume the public base path is /api/v2.
Core media workflow resources
Storage, delivery, and automation
Agentic search and advanced surfaces
Start with the matching page in Concepts when you need the execution model, then use this section for resource-level behavior and request examples.
API reference / auth-and-api-keys
Auth and API keys
Authenticate to the VideoVector REST API with API keys or JWT bearer tokens, manage API keys, and understand scope requirements.
Supported auth modes
Most workflow endpoints support either:
X-API-Key: sk_...Authorization: Bearer <jwt>
Use API keys for server-to-server integrations. Use JWT bearer tokens for browser-backed or operator-driven workflows.
API key management endpoints under /api-keys require JWT bearer auth. An API key cannot create, rotate,
revoke, or delete other API keys.
Scope model
The platform enforces four public scopes:
| Scope | Typical capability |
|---|---|
search | Search, retrieval, and agentic chat retrieval workflows |
read | Read workflow resources and inspect results |
write | Create or update prompts, runs, connectors, jobs, and webhooks |
admin | Delete higher-risk resources |
The hierarchy is documented in the API key controller as admin > write > read > search.
Scope requirements by workflow
| Endpoint family | Requirement |
|---|---|
/indexes/*/search, /search/*, /chat/* | search |
Most GET workflow resources | read |
| Most create or update workflow resources | write |
| Destructive deletes | admin |
/api-keys/* | JWT bearer only |
/mcp/config | verified JWT bearer only |
Request headers
| Header | When to use |
|---|---|
X-API-Key | Preferred for programmatic API clients |
Authorization: Bearer ... | JWT sessions and operator workflows |
Idempotency-Key | Safe retry for create, update, execute, cancel, and retry-style writes |
Example: call a search-scoped endpoint
curl /api/v2/indexes/idx_archive/search \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"query": "reporter at station entrance",
"top_k": 10
}'
Example: create an API key
curl -X POST /api/v2/api-keys \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{
"name": "Production search key",
"scopes": ["read", "search"],
"expires_in_days": 90
}'
API key lifecycle endpoints
| Method | Path | Notes |
|---|---|---|
POST | /api/v2/api-keys | Create a key and return the full secret once |
GET | /api/v2/api-keys | List masked keys |
GET | /api/v2/api-keys/{key_id} | Retrieve one masked key |
POST | /api/v2/api-keys/{key_id}/rotate | Return a new full secret and revoke the old one |
POST | /api/v2/api-keys/{key_id}/revoke | Soft-disable the key |
DELETE | /api/v2/api-keys/{key_id} | Remove the key |
Rotation and creation are the only moments when the full API key secret is returned. Persist it immediately in your own secret store.
Related surfaces
- Use Create and rotate API keys for an operator workflow.
- Use SDK setup for media workflows when connecting Python services.
- Use MCP setup when the credential will be embedded in MCP client configuration.
API reference / indexes-and-media
Indexes and media
Manage VideoVector indexes, upload or register media, inspect segments, list prompt runs, and work with playground media.
Index endpoints
Indexes are the collection boundary for video-to-vector embeddings and multimodal media search. Prompt runs can add
transcription, image embeddings, and metadata_text so later search requests can use both semantic vectors and exact
structured metadata.
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/indexes | Create an index |
GET | /api/v2/indexes | List indexes, including defaults when requested |
GET | /api/v2/indexes/{index_id} | Retrieve one index |
DELETE | /api/v2/indexes/{index_id} | Delete an index |
GET | /api/v2/indexes/{index_id}/videos | Paginate media in an index |
GET | /api/v2/indexes/{index_id}/prompt-runs | Paginate runs for an index |
Media endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/videos | Register media from an existing video_uri |
POST | /api/v2/videos/upload | Upload a video, audio file, or image |
GET | /api/v2/videos/{video_id} | Retrieve a media item |
DELETE | /api/v2/videos/{video_id} | Delete a media item |
GET | /api/v2/videos/{video_id}/segments | Paginate segments |
GET | /api/v2/videos/{video_id}/prompt-runs | List runs touching a media item |
POST | /api/v2/videos/batch | Batch fetch media with detail fields |
POST | /api/v2/videos/batch/status | Batch fetch processing status snapshots |
POST | /api/v2/videos/batch/segments | Batch fetch segment lists |
Playground media
Playground media is index-less media owned by the current user.
| Method | Path | Purpose |
|---|---|---|
GET | /api/v2/playground/videos | Paginate playground media |
Example: create an index
curl -X POST /api/v2/indexes \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: index-create-archive-2026-04-20" \
-d '{"name":"Broadcast archive"}'
Example: upload media into an index
curl -X POST /api/v2/videos/upload \
-H "X-API-Key: sk_live_..." \
-F "file=@episode-001.mp4" \
-F "title=Episode 001" \
-F "index_id=idx_archive"
Segment retrieval
GET /api/v2/videos/{video_id}/segments supports:
run_idto pin results to one prompt runlatest_run=trueto retrieve the most recent run-backed segments- cursor pagination
Use this endpoint when you need the canonical segment records rather than ranked search results.
SDK equivalents
client.indexes.create,client.indexes.list,client.indexes.list_videosclient.videos.upload,client.videos.retrieve,client.videos.list_segmentsclient.videos.batch_retrieve,client.videos.batch_status,client.videos.batch_segmentsclient.videos.list_playground
Use search endpoints to find evidence. Use media and segment endpoints when you already know the media boundary and need canonical records, status snapshots, or pagination.
API reference / prompts
Prompts
Create, update, validate, inspect, and delete VideoVector prompts, including video-level synthesis and semantic indexing controls.
Prompt endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/prompts | Create a prompt |
GET | /api/v2/prompts | List prompts |
GET | /api/v2/prompts/{prompt_id} | Retrieve one prompt |
PUT | /api/v2/prompts/{prompt_id} | Replace selected prompt fields |
DELETE | /api/v2/prompts/{prompt_id} | Delete or deactivate a prompt |
POST | /api/v2/prompts/test-schema | Validate sample data against a schema |
GET | /api/v2/prompts/{prompt_id}/usage | Inspect usage and safety-to-delete signals |
POST | /api/v2/prompts/generate | Generate a draft prompt definition for the creation flow |
Request shape
Public prompt creation supports these top-level fields:
| Field | Type | Notes |
|---|---|---|
name | string | Human-readable prompt name |
description | string | Optional description |
prompt_text | string | Instructions for extraction |
json_schema | object | Segment-level JSON Schema |
video_level | object | Optional media-wide synthesis contract |
semantic_indexing | object | Optional per-field semantic indexing controls |
Example: create a prompt
curl -X POST /api/v2/prompts \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: prompt-create-scene-v1" \
-d '{
"name": "Scene extractor",
"description": "Extract structured scene evidence per segment.",
"prompt_text": "Extract the requested fields from this media segment.",
"json_schema": {
"type": "object",
"properties": {
"headline": { "type": "string" },
"scene": {
"type": "object",
"properties": {
"location": { "type": "string" },
"people": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"emotion": { "type": "string" }
}
}
}
}
}
}
},
"video_level": {
"instructions_text": "Summarize the entire asset from the extracted segment evidence.",
"included_segment_fields": ["headline", "scene.location", "transcription"],
"json_schema": {
"type": "object",
"properties": {
"program_summary": { "type": "string" }
}
}
},
"semantic_indexing": {
"disabled_segment_fields": [],
"disabled_video_level_fields": []
}
}'
Schema validation
Use /api/v2/prompts/test-schema before saving a production contract.
curl -X POST /api/v2/prompts/test-schema \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"json_schema": {
"type": "object",
"properties": {
"headline": { "type": "string" }
}
},
"sample_data": {
"headline": "Reporter outside station"
}
}'
Update semantics
PUT /api/v2/prompts/{prompt_id} supports partial replacement of documented prompt fields. Public update behavior includes:
- replacing
prompt_text - replacing
json_schema - replacing
video_level - replacing
semantic_indexing - clearing
video_levelwithclear_video_level: true
Legacy index prompt attachment
The route /api/v2/indexes/{index_id}/prompt still exists, but the route implementation explicitly warns that index-level prompt attachment is deprecated. New integrations should execute prompts through prompt runs.
SDK equivalents
client.prompts.createclient.prompts.updateclient.prompts.test_schemaclient.prompts.get_usage
Prompt design guidance, nested field-path rules, and semantic indexing controls are covered in Prompt schema design.
API reference / prompt-runs
Prompt runs
Execute prompts against indexes, selected videos, or playground media, then inspect segment results, failed segments, and media-wide summaries.
Prompt run endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/prompt-runs/execute | Start a prompt run |
GET | /api/v2/prompt-runs | List runs |
GET | /api/v2/prompt-runs/{run_id} | Retrieve run status |
POST | /api/v2/prompt-runs/{run_id}/cancel | Request cancellation |
GET | /api/v2/prompt-runs/{run_id}/results | Paginate segment results |
GET | /api/v2/prompt-runs/{run_id}/videos/{video_id}/video-result | Retrieve media-wide synthesis |
GET | /api/v2/prompt-runs/{run_id}/failed-segments | Retrieve failed-segment manifest |
POST | /api/v2/prompt-runs/{run_id}/videos/{video_id}/segments/{segment_id}/retry | Retry one failed segment |
GET | /api/v2/prompt-runs/{run_id}/videos/{video_id}/segments/{segment_id}/retries/{retry_id} | Inspect retry status |
GET | /api/v2/prompt-runs/{run_id}/llm-calls | Inspect LLM calls for debugging |
Execute request
The public execute request uses:
| Field | Type | Notes |
|---|---|---|
prompt_id | string | Prompt to execute |
target | object | One of index, videos, or playground |
video_segmentation_type | smart, fixed, or content_aware | Video segmentation mode |
audio_segmentation_type | fixed or content_aware | Audio segmentation mode |
video_segment_duration | integer | Required for fixed video segmentation |
audio_segment_duration | integer | Required for fixed audio segmentation |
processing_model | string | Optional extraction model |
enable_transcription | boolean | Enable speech-to-text |
enable_image_embedding | boolean | Enable image-search embeddings |
Example: execute against an index
curl -X POST /api/v2/prompt-runs/execute \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: run-archive-2026-04-20" \
-d '{
"prompt_id": "prompt_scene_extract",
"target": {
"type": "index",
"index_id": "idx_archive"
},
"video_segmentation_type": "smart",
"audio_segmentation_type": "content_aware",
"processing_model": "gemini-2.5-flash",
"enable_transcription": true,
"enable_image_embedding": true
}'
Result retrieval
GET /api/v2/prompt-runs/{run_id}/results requires video_id as a query parameter so the response can paginate one media item's segment-level records at a time.
curl "/api/v2/prompt-runs/run_123/results?video_id=vid_456&limit=50" \
-H "X-API-Key: sk_live_..."
Failure handling
Use the failed-segment manifest before retrying:
- Retrieve
/failed-segments. - Inspect the failed operation counts and retryability.
- Retry only the affected segment.
- Poll the retry status endpoint until terminal.
Cancellation
Cancellation is cooperative. The stop request is stored on the run, and work already in progress may still finish before the run reaches a terminal state.
Estimate endpoint
The platform also exposes POST /api/v2/prompt-runs/estimate with the same request shape as execution. It is useful for dry-run validation before execution, but billing interpretation is intentionally out of scope for this documentation set.
SDK equivalents
client.prompt_runs.executeclient.prompt_runs.retrieveclient.prompt_runs.list_resultsclient.prompt_runs.get_video_resultclient.prompt_runs.get_failed_segmentsclient.prompt_runs.retry_segmentclient.prompt_runs.get_segment_retry_status
Prompt-run scope also affects search. If an index has several runs, pass explicit run_ids to search
APIs when you need deterministic retrieval against a known execution boundary.
API reference / search-and-sql
Search and SQL search
Use the VideoVector REST API for text, image, multimodal, filter, playground, multi-run, and SQL search workflows.
Semantic search endpoints
VideoVector search combines vector-style semantic retrieval with structured metadata filters. Use the same index and prompt-run outputs for video vector embedding search, hybrid vector and metadata search, SQL media search, and agentic media search through agentic chat sessions.
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/indexes/{index_id}/search | Text search |
POST | /api/v2/indexes/{index_id}/image-search | Image similarity search |
POST | /api/v2/indexes/{index_id}/multimodal-search | Combined text and image search |
POST | /api/v2/search/multi-run | Search across several runs |
POST | /api/v2/playground/search | Search playground media |
Filter search endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/search/filter/{index_id} | Filter completed run results in an index |
POST | /api/v2/search/filter/playground | Filter completed run results in playground media |
SQL search endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/search/sql/{index_id}/catalog | Discover queryable tables and limits |
POST | /api/v2/search/sql/{index_id} | Execute SQL |
POST | /api/v2/search/sql/{index_id}/generate | Generate a draft query from instructions |
Example: multimodal search
curl -X POST /api/v2/indexes/idx_archive/multimodal-search \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"text_query": "red emergency vehicle",
"image_data": "<base64-image>",
"text_weight": 0.7,
"image_weight": 0.3,
"top_k": 20,
"run_ids": ["run_123"]
}'
Filter condition contract
Filter requests use a list of conditions. Each condition includes:
| Field | Purpose |
|---|---|
field | Canonical metadata leaf path such as scene.people[].emotion |
operator | Comparison operator allowed for the field type |
value | Value to compare against |
type | Field type used for operator validation |
The API combines conditions with AND semantics.
Example: filter by nested fields
curl -X POST /api/v2/search/filter/idx_archive \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"run_ids": ["run_123"],
"conditions": [
{
"field": "scene.people[].emotion",
"operator": "equals",
"value": "happy",
"type": "string"
}
],
"page_size": 50
}'
SQL search behavior
The SQL catalog response documents:
- queryable tables
- table-to-index and table-to-run mapping
- field-path columns
- default query scaffolding
- public query limits
POST /api/v2/search/sql/{index_id} accepts:
query- optional
run_ids - optional
index_ids - optional
result_limit
POST /api/v2/search/sql/{index_id}/generate accepts:
instruction- optional
existing_query - optional
run_ids - optional
index_ids
Example: SQL query generation
curl -X POST /api/v2/search/sql/idx_archive/generate \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"instruction": "Show the top 20 scenes where scene.people[].emotion is happy.",
"run_ids": ["run_123"]
}'
SDK equivalents
client.search.textclient.search.imageclient.search.multimodalclient.search.filterclient.search.filter_playgroundclient.search.multi_runclient.search.playground
Agentic chat sessions build on the same retrieval model. Use agentic chat sessions when the client needs conversational retrieval rather than direct search requests.
API reference / connectors
Connectors
Create and manage VideoVector GCS, S3, and Azure Blob connectors for import and export workflows.
Connector endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/connectors/gcs | Create a GCS connector |
POST | /api/v2/connectors/s3 | Create an S3 connector |
POST | /api/v2/connectors/azure | Create an Azure Blob connector |
GET | /api/v2/connectors | List connectors |
GET | /api/v2/connectors/{connector_id} | Retrieve one connector |
PATCH | /api/v2/connectors/{connector_id} | Update mutable connector fields |
POST | /api/v2/connectors/{connector_id}/test | Validate access |
POST | /api/v2/connectors/{connector_id}/browse | Browse files with prefix and pattern |
DELETE | /api/v2/connectors/{connector_id} | Delete a connector |
Common connector fields
| Field | Notes |
|---|---|
name | Human-readable connector name |
scopes | One or both of import and export |
export_base_path | Optional export boundary inside the storage namespace |
import_mode | all or new_only |
Provider-specific creation
GCScreation uses multipart form data withcredentials_file.S3creation uses JSON withbucket,region,aws_access_key_id, andaws_secret_access_key.Azurecreation uses JSON withstorage_account,container,tenant_id,client_id, andclient_secret.
Example: create an S3 connector
curl -X POST /api/v2/connectors/s3 \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: connector-s3-archive" \
-d '{
"name": "Archive S3",
"bucket": "media-archive",
"region": "us-east-1",
"aws_access_key_id": "AKIA...",
"aws_secret_access_key": "<secret>",
"scopes": ["import", "export"],
"export_base_path": "exports/review",
"import_mode": "new_only"
}'
Example: browse files
curl -X POST /api/v2/connectors/conn_123/browse \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"prefix": "incoming/2026/04/",
"pattern": "*.mp4"
}'
SDK equivalents
client.connectors.create_gcsclient.connectors.create_s3client.connectors.create_azureclient.connectors.testclient.connectors.browse
Keep export destinations inside the connector's configured export_base_path. Public export requests are
validated against that boundary.
API reference / import-jobs
Import jobs
Create, inspect, list, and cancel VideoVector import jobs that bring cloud storage media into an index.
Import job endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/import-jobs | Create an import job |
GET | /api/v2/import-jobs | List import jobs |
GET | /api/v2/import-jobs/{job_id} | Retrieve one import job |
POST | /api/v2/import-jobs/{job_id}/cancel | Cancel a running job |
Request fields
| Field | Notes |
|---|---|
connector_id | Source connector |
index_id | Target index |
source_prefix | Optional path prefix |
file_pattern | Glob pattern such as *.mp4 |
recursive | Recurse into subdirectories |
Example: create an import job
curl -X POST /api/v2/import-jobs \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: import-job-archive-2026-04-20" \
-d '{
"connector_id": "conn_archive",
"index_id": "idx_archive",
"source_prefix": "incoming/2026/04/",
"file_pattern": "*.mp4",
"recursive": true
}'
Lifecycle
The SDK type model exposes these public statuses:
pendingscanningimportingcompletedfailedcancelled
Use GET /api/v2/import-jobs/{job_id} to inspect job progress, imported media IDs, failed files, skipped files, and terminal error details.
SDK equivalents
client.import_jobs.createclient.import_jobs.retrieveclient.import_jobs.listclient.import_jobs.cancel
For recurring ingestion from the same connector path, prefer import automations instead of repeatedly creating one-off import jobs.
API reference / exports
Exports
Export VideoVector metadata by index or prompt run, then retrieve download or connector-delivery status.
Export endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/exports/index/{index_id} | Create an index export |
POST | /api/v2/exports/prompt-run/{run_id} | Create a prompt-run export |
GET | /api/v2/exports | List exports |
GET | /api/v2/exports/{export_id} | Retrieve one export |
Export request fields
Index exports support:
- optional
prompt_run_ids - optional
destination_connector_id - optional
destination_subpath
Prompt-run exports support:
- optional
destination_connector_id - optional
destination_subpath
Example: export selected runs from an index
curl -X POST /api/v2/exports/index/idx_archive \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: export-archive-review" \
-d '{
"prompt_run_ids": ["run_123", "run_124"],
"destination_connector_id": "conn_export",
"destination_subpath": "exports/review-team"
}'
Status model
The SDK exposes these public export statuses:
pendingprocessingcompletedfailed
Completed exports may provide a download URL, connector-delivery metadata, or both depending on the requested destination mode.
SDK equivalents
client.exports.create_index_exportclient.exports.create_prompt_run_exportclient.exports.retrieveclient.exports.list
Use an export automation when the destination and subpath should persist at the index level instead of being sent on every export request.
API reference / automations
Automations
Configure index-level import and export automations for recurring VideoVector media workflows.
Import automation endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /api/v2/indexes/{index_id}/automations/import | Retrieve saved import automation |
PUT | /api/v2/indexes/{index_id}/automations/import | Create or replace import automation |
POST | /api/v2/indexes/{index_id}/automations/import/pause | Pause import automation |
POST | /api/v2/indexes/{index_id}/automations/import/resume | Resume import automation |
Export automation endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /api/v2/indexes/{index_id}/automations/export | Retrieve saved export automation |
PUT | /api/v2/indexes/{index_id}/automations/export | Create or replace export automation |
POST | /api/v2/indexes/{index_id}/automations/export/pause | Pause export automation |
POST | /api/v2/indexes/{index_id}/automations/export/resume | Resume export automation |
Import automation request
{
"enabled": true,
"paused": false,
"connector_id": "conn_archive",
"source_prefix": "incoming/daily/",
"file_pattern": "*.mp4",
"recursive": true,
"debounce_interval": "10m",
"prompt_preset": {
"prompt_id": "prompt_episode_extract"
}
}
Supported public debounce intervals are:
5m10m1h1d
Export automation request
{
"enabled": true,
"paused": false,
"destination_connector_id": "conn_export",
"destination_subpath": "exports/review-team"
}
Operational behavior
enabledcontrols whether the automation is configured for execution.pausedis the public temporary stop control.- Pause and resume preserve the configuration.
Internal automation trigger routes exist in the backend, but they are not part of the public integration surface and are intentionally excluded from this documentation set.
Related workflows
- Build the source and destination boundaries with Connectors.
- Use Import jobs and Exports for one-time operations.
API reference / webhooks
Webhooks
Send VideoVector prompt-run, import, export, and media processing events to downstream workflow systems.
Webhook endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/webhooks | Create a webhook |
GET | /api/v2/webhooks | List webhooks |
GET | /api/v2/webhooks/events | List supported event names |
GET | /api/v2/webhooks/{webhook_id} | Retrieve one webhook |
PATCH | /api/v2/webhooks/{webhook_id} | Update a webhook |
DELETE | /api/v2/webhooks/{webhook_id} | Delete a webhook |
POST | /api/v2/webhooks/{webhook_id}/rotate-secret | Rotate the signing secret |
POST | /api/v2/webhooks/{webhook_id}/test | Send a test event |
GET | /api/v2/webhooks/{webhook_id}/deliveries | List deliveries |
GET | /api/v2/webhooks/deliveries/{delivery_id} | Retrieve one delivery |
POST | /api/v2/webhooks/deliveries/{delivery_id}/retry | Retry a failed delivery |
Event model
The public SDK lists these supported event names:
media.createdmedia.processing.startedmedia.processing.completedmedia.processing.failedprompt_run.startedprompt_run.completedprompt_run.failedprompt_run.cancelledprompt_run.partial_completedprompt_run.progressexport.readyexport.failedimport_job.startedimport_job.completedimport_job.failedimport_job.partial_completedimport_job.progress
Example: create a webhook
curl -X POST /api/v2/webhooks \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: webhook-review-events" \
-d '{
"name": "Review operations",
"url": "https://example.com/webhooks/videovector",
"events": ["prompt_run.completed", "export.ready"],
"index_ids": ["idx_archive"],
"metadata": {"owner":"review-ops"}
}'
Delivery headers and signature verification
Webhook deliveries include:
X-Webhook-SignatureX-Webhook-IDX-Delivery-IDX-Event-Type
The delivery worker signs the canonical JSON payload with HMAC-SHA256 and sends the header as sha256=<hex-digest>.
import hashlib
import hmac
import json
payload_json = json.dumps(payload, sort_keys=True)
expected = hmac.new(secret.encode("utf-8"), payload_json.encode("utf-8"), hashlib.sha256).hexdigest()
assert received_signature == f"sha256={expected}"
Delivery status and recovery
The delivery worker treats response classes differently:
2xx: success4xx: permanent failure, no automatic retry5xxand network failures: retryable failure
Use POST /api/v2/webhooks/deliveries/{delivery_id}/retry when the downstream issue is resolved.
Secret rotation
POST /api/v2/webhooks/{webhook_id}/rotate-secret returns a new secret. Update the receiving system before you depend on the next production delivery.
SDK equivalents
client.webhooks.createclient.webhooks.updateclient.webhooks.rotate_secretclient.webhooks.testclient.webhooks.list_deliveriesclient.webhooks.retry_delivery
Delivery inspection includes the payload, attempt counts, response status code, response body, error message, and retry scheduling fields.
API reference / chat-sessions
Agentic chat sessions and agentic search
Build conversational retrieval and agent-search workflows with VideoVector agentic chat sessions, scoped turns, and SSE streaming responses.
Agentic chat endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v2/chat/sessions | Create a session |
GET | /api/v2/chat/sessions | List sessions |
GET | /api/v2/chat/sessions/{session_id} | Retrieve one session with turns |
GET | /api/v2/chat/sessions/{session_id}/turns | List turns |
POST | /api/v2/chat/sessions/{session_id}/turns | Create a non-streaming turn |
POST | /api/v2/chat/sessions/{session_id}/turns/stream | Stream a turn over SSE |
DELETE | /api/v2/chat/sessions/{session_id} | Delete a session |
Scope model
Each turn can optionally narrow retrieval scope with:
index_idsprompt_run_ids
That scope is stored on the turn as effective_scope.
Example: create a session
curl -X POST /api/v2/chat/sessions \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{"title":"Daily review assistant"}'
Example: create a scoped turn
curl -X POST /api/v2/chat/sessions/session_123/turns \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"message": "Find scenes where a reporter appears outside a station entrance.",
"scope": {
"index_ids": ["idx_archive"],
"prompt_run_ids": ["run_123"]
},
"idempotency_key": "chat-turn-session-123-1"
}'
Streaming protocol
POST /api/v2/chat/sessions/{session_id}/turns/stream returns text/event-stream.
The DTO layer documents event families such as:
turn_startedturn_resumedagent_statetool_call_startedtool_call_resultturn_completederror
Use Idempotency-Key, X-Idempotency-Key, or the request-body idempotency_key when you need resumable turn behavior.
Response structure
Completed turns can include:
user_messageassistant_messageeffective_scopetool_traceresult_setsstats- terminal
errordetails when the turn fails
Use direct search endpoints when the client already knows the exact retrieval pattern. Use agentic chat sessions when the operator needs iterative questioning, result review, and tool-trace visibility.
API reference / advanced-utilities
Advanced public utilities
Reference public VideoVector utilities for event streams, markers, signed URLs, thumbnails, GIF helpers, and batch media helpers.
Processing event stream
GET /api/v2/processing/events/stream exposes Server-Sent Events for processing lifecycle updates.
Public filters include:
run_idindex_idvideo_idsevent_typesbatch_sizeLast-Event-IDrequest header
Each SSE event includes:
event_idevent_typeuser_idrun_idvideo_idsegment_idindex_idcreated_atpayload
The server also emits heartbeat comments and a processing.stream_error event if the stream terminates unexpectedly.
Marker endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /api/v2/markers | List user markers |
PUT | /api/v2/markers | Upsert a marker |
DELETE | /api/v2/markers/{marker_id} | Delete a marker |
Markers can be attached to prompts, runs, or extracted fields and are surfaced in SDK response models such as marker and metadata_markers.
Signed URL helper
POST /api/v2/videos/signed-url exchanges a gcs_uri for a signed URL.
curl -X POST /api/v2/videos/signed-url \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{"gcs_uri":"gs://bucket/path/to/asset.mp4"}'
Raw media helper endpoints
These endpoints are public but intentionally treated as helper surfaces rather than first-class workflow resources:
| Method | Path | Purpose |
|---|---|---|
GET | /api/v2/videos/{video_id}/gif | Retrieve a media preview GIF |
GET | /api/v2/videos/segments/{segment_id}/thumbnail | Retrieve a segment thumbnail image |
Batch media helpers
These endpoints are useful when the client already has a media ID set and wants a compact fetch pattern:
POST /api/v2/videos/batchPOST /api/v2/videos/batch/statusPOST /api/v2/videos/batch/segments
The Python SDK exposes these as:
client.videos.batch_retrieveclient.videos.batch_statusclient.videos.batch_segments
Playground helpers
Playground-specific retrieval surfaces are public and documented on other pages:
GET /api/v2/playground/videosPOST /api/v2/playground/searchPOST /api/v2/search/filter/playground
Internal queue, automation trigger, and billing routes are intentionally excluded here even when they exist in the backend, because they are not part of the supported public integration contract.
