{"serverInfo":{"name":"primate-intelligence","version":"0.3.0","title":"Primate Intelligence — Video Scene Understanding"},"protocol_versions_supported":["2026-07-28","2025-11-25"],"endpoint":"https://api.primateintelligence.ai/mcp","transport":"streamable-http","documentation":"https://primateintelligence.ai/docs/agents","authentication":{"required":true,"schemes":["oauth2"],"oauth2":{"protected_resource_metadata":"https://api.primateintelligence.ai/.well-known/oauth-protected-resource","authorization_server_metadata":"https://api.primateintelligence.ai/.well-known/oauth-authorization-server","dynamic_client_registration":"https://api.primateintelligence.ai/oauth/register","scopes_supported":["mcp"]},"api_key":{"header":"Authorization","format":"Bearer pv_live_… | pv_test_…","self_serve_sandbox":"https://api.primateintelligence.ai/v1/sandbox"}},"tools":[{"name":"create_video_from_url","description":"Register a video from a public https URL for analysis (POST /v1/videos, URL-ingest mode). The API fetches the video asynchronously — the returned video starts in status \"processing\" and becomes \"ready\". Supports video/mp4 and video/quicktime, max 2 GiB. Returns the video resource with its id (video_…).","inputSchema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public https URL of the video to ingest (https only, port 443)."},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional key-value metadata to attach."}},"required":["url"],"additionalProperties":false},"annotations":{"title":"Ingest video from URL","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"outputSchema":{"type":"object","properties":{"id":{"type":"string","pattern":"^video_[0-9A-HJKMNP-TV-Z]{26}$"},"object":{"type":"string","const":"video"},"livemode":{"type":"boolean"},"status":{"type":"string","enum":["awaiting_upload","processing","ready","failed"]},"filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"size_bytes":{"anyOf":[{"type":"integer","minimum":1,"maximum":2147483648},{"type":"null"}]},"duration_s":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"width":{"anyOf":[{"type":"integer"},{"type":"null"}]},"height":{"anyOf":[{"type":"integer"},{"type":"null"}]},"fps":{"type":["number","null"]},"content_type":{"type":"string","enum":["video/mp4","video/quicktime"]},"source":{"type":"string","enum":["upload","url"]},"upload":{"anyOf":[{"type":"object","properties":{"method":{"type":"string","const":"PUT"},"url":{"type":"string","format":"uri"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"expires_at":{"type":"string","format":"date-time"}},"required":["method","url","headers","expires_at"],"additionalProperties":false},{"type":"null"}]},"media":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","format":"uri"},"expires_at":{"$ref":"#/properties/upload/anyOf/0/properties/expires_at"}},"required":["url","expires_at"],"additionalProperties":false},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"propertyNames":{"pattern":"^[a-zA-Z0-9_.-]{1,40}$"},"default":{}},"expires_at":{"anyOf":[{"$ref":"#/properties/upload/anyOf/0/properties/expires_at"},{"type":"null"}]},"created_at":{"$ref":"#/properties/upload/anyOf/0/properties/expires_at"}},"required":["id","object","livemode","status","filename","size_bytes","duration_s","width","height","fps","content_type","source","upload","error","expires_at","created_at"],"additionalProperties":false}},{"name":"get_video","description":"Fetch a video by id (GET /v1/videos/{id}). Use to check ingest status (processing → ready) and to get media — ready videos carry media: {url, expires_at}, a signed playback URL for the original source video, generated FRESH on every read (1h TTL; re-fetch for a new one). media is null for non-ready videos and sandbox fixture videos.","inputSchema":{"type":"object","properties":{"video_id":{"type":"string","description":"The video id (video_…)."}},"required":["video_id"],"additionalProperties":false},"annotations":{"title":"Get video (status + source playback URL)","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","pattern":"^video_[0-9A-HJKMNP-TV-Z]{26}$"},"object":{"type":"string","const":"video"},"livemode":{"type":"boolean"},"status":{"type":"string","enum":["awaiting_upload","processing","ready","failed"]},"filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"size_bytes":{"anyOf":[{"type":"integer","minimum":1,"maximum":2147483648},{"type":"null"}]},"duration_s":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"width":{"anyOf":[{"type":"integer"},{"type":"null"}]},"height":{"anyOf":[{"type":"integer"},{"type":"null"}]},"fps":{"type":["number","null"]},"content_type":{"type":"string","enum":["video/mp4","video/quicktime"]},"source":{"type":"string","enum":["upload","url"]},"upload":{"anyOf":[{"type":"object","properties":{"method":{"type":"string","const":"PUT"},"url":{"type":"string","format":"uri"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"expires_at":{"type":"string","format":"date-time"}},"required":["method","url","headers","expires_at"],"additionalProperties":false},{"type":"null"}]},"media":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","format":"uri"},"expires_at":{"$ref":"#/properties/upload/anyOf/0/properties/expires_at"}},"required":["url","expires_at"],"additionalProperties":false},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"propertyNames":{"pattern":"^[a-zA-Z0-9_.-]{1,40}$"},"default":{}},"expires_at":{"anyOf":[{"$ref":"#/properties/upload/anyOf/0/properties/expires_at"},{"type":"null"}]},"created_at":{"$ref":"#/properties/upload/anyOf/0/properties/expires_at"}},"required":["id","object","livemode","status","filename","size_bytes","duration_s","width","height","fps","content_type","source","upload","error","expires_at","created_at"],"additionalProperties":false}},{"name":"create_analysis","description":"Ask a question about a video (POST /v1/analyses). Provide video_id (video_…) and a free-text prompt like \"Is there a person in this video?\". Analysis runs asynchronously — use wait_for_analysis to block until done. The result contains answer (yes|no|indeterminate), confidence (0-1), clip timestamps, detected_count (count queries), and indeterminate_reason. Recommended: call validate_analysis first to confirm the prompt is assessable and preview the cost before spending credits. For 2–10 prompts on the same video, use create_analysis_batch (each prompt after the first is billed at 50%). Pass narrative: true to also generate a timestamped narrative (event sentences) — the completed analysis then carries narrative {status: generating|ready|failed, entries: [{t_s, text}]}; generation runs asynchronously after completion (re-fetch with get_analysis until ready). No surcharge.","inputSchema":{"type":"object","properties":{"video_id":{"type":"string","description":"The video to analyze (video_… id from create_video_from_url)."},"prompt":{"type":"string","maxLength":2000,"description":"Free-text question about the video, e.g. \"Is there a person in this video?\""},"model":{"type":"string","description":"Model id (see list_models). Defaults to the current default model."},"narrative":{"type":"boolean","description":"true — also generate a timestamped narrative (async after completion; poll get_analysis until narrative.status is ready). No surcharge."},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional key-value metadata to attach."}},"required":["video_id","prompt"],"additionalProperties":false},"annotations":{"title":"Analyze video","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","pattern":"^an_[0-9A-HJKMNP-TV-Z]{26}$"},"object":{"type":"string","const":"analysis"},"livemode":{"type":"boolean"},"origin":{"type":"string","enum":["api","console","system"]},"status":{"type":"string","enum":["queued","preparing","analyzing","rendering","completed","failed","canceled"]},"video_id":{"type":"string","pattern":"^video_[0-9A-HJKMNP-TV-Z]{26}$"},"prompt":{"anyOf":[{"type":"string","minLength":1,"maxLength":2000},{"type":"null"}]},"query":{"type":"object","additionalProperties":{},"description":"Compiled interpretation of the prompt (subjects, conditions, query_type, search_terms, prompt_intent, original_prompt, …). Transparency feature: shows how the question was understood. Full schema: /v1/schemas/compiled-query.json."},"parse_mode":{"anyOf":[{"type":"string","enum":["llm","heuristic","client"]},{"type":"null"}]},"model":{"type":"string"},"options":{"type":"object","properties":{"narrative":{"type":"boolean","default":false}},"additionalProperties":false},"progress":{"anyOf":[{"type":"object","properties":{"stage":{"type":"string"},"percent":{"type":"number","minimum":0,"maximum":100}},"required":["stage","percent"],"additionalProperties":false},{"type":"null"}]},"queue_position":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"result":{"anyOf":[{"type":"object","properties":{"answer":{"type":"string","enum":["yes","no","indeterminate"]},"confidence":{"type":"number","minimum":0,"maximum":1},"clips":{"type":"array","items":{"type":"object","properties":{"start_s":{"type":"number","minimum":0},"end_s":{"type":"number"},"confidence":{"type":"number","minimum":0,"maximum":1},"terms":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}}},"required":["start_s","end_s","confidence","terms"],"additionalProperties":false},"maxItems":500},"term_confidences":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}},"query_type":{"type":"string","enum":["object","action","compound","attribute","open_ended"]},"video_duration_s":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"detected_count":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"indeterminate_reason":{"anyOf":[{"type":"string","enum":["low_confidence","nothing_detected","unsupported_query_form","duration_mismatch","unsupported_action_term"]},{"type":"null"}]},"unsupported_action":{"type":"object","properties":{"reason":{"type":"string"},"docs_url":{"type":"string"}},"required":["reason","docs_url"],"additionalProperties":false}},"required":["answer","confidence","clips","term_confidences","query_type","video_duration_s"],"additionalProperties":false},{"type":"null"}]},"narrative":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["generating","ready","failed"]},"entries":{"type":"array","items":{"type":"object","properties":{"t_s":{"type":"number"},"text":{"type":"string"}},"required":["t_s","text"],"additionalProperties":false}}},"required":["status","entries"],"additionalProperties":false},{"type":"null"}]},"artifacts":{"anyOf":[{"type":"object","properties":{"annotated_video_url":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time"}},"required":["annotated_video_url","expires_at"],"additionalProperties":false},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"metering_rule":{"type":"string","enum":["per_second","per_frame"]},"usage":{"anyOf":[{"type":"object","properties":{"billed_seconds":{"type":"integer","minimum":0},"credit_balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}]},"metering_rule":{"$ref":"#/properties/metering_rule"},"frames":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["billed_seconds","credit_balance_after"],"additionalProperties":false},{"type":"null"}]},"rerun_eligible":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"propertyNames":{"pattern":"^[a-zA-Z0-9_.-]{1,40}$"},"default":{}},"created_at":{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},"started_at":{"anyOf":[{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]},"completed_at":{"anyOf":[{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]}},"required":["id","object","livemode","origin","status","video_id","prompt","query","parse_mode","model","options","progress","queue_position","result","narrative","artifacts","error","usage","created_at","started_at","completed_at"],"additionalProperties":false}},{"name":"validate_analysis","description":"Dry-run a prompt WITHOUT creating an analysis or spending credits (POST /v1/analyses with validate_only: true). Compiles the prompt and returns an analysis_preview: the compiled query, assessable (false means the model cannot score this query form — rephrase as a yes/no or count question), estimated_seconds, and estimated_cost_usd (both null when the video duration is not yet known). Recommended before create_analysis to catch unassessable prompts and preview cost. Preview pricing — early-access rate, may change up or down with model maturity, demand, and processing costs; always read live from the pricing endpoint.","inputSchema":{"type":"object","properties":{"video_id":{"type":"string","description":"The video the analysis would run against (video_… id)."},"prompt":{"type":"string","maxLength":2000,"description":"Free-text question to validate, e.g. \"How many people are walking?\""},"model":{"type":"string","description":"Model id (see list_models). Defaults to the current default model."}},"required":["video_id","prompt"],"additionalProperties":false},"annotations":{"title":"Validate prompt & preview cost (free)","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"object":{"type":"string","const":"analysis_preview"},"query":{"type":"object","additionalProperties":{}},"parse_mode":{"type":"string","enum":["llm","heuristic","client"]},"assessable":{"type":"boolean"},"video_duration_s":{"type":["number","null"]},"estimated_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}]},"estimated_cost_usd":{"type":["number","null"]}},"required":["object","query","parse_mode","assessable","video_duration_s","estimated_seconds","estimated_cost_usd"],"additionalProperties":false}},{"name":"create_analysis_batch","description":"Run 2–10 prompts against the SAME video in one call (POST /v1/analyses/batch). Pricing: the first prompt is billed at full price, each additional prompt at 50% — always cheaper than separate create_analysis calls for multi-question workloads. Returns an analysis_batch with every analysis resource plus a pricing summary; poll each analysis id individually with get_analysis or wait_for_analysis. To check assessability of individual prompts first, use validate_analysis (free). Preview pricing — early-access rate, may change up or down with model maturity, demand, and processing costs; always read live from the pricing endpoint.","inputSchema":{"type":"object","properties":{"video_id":{"type":"string","description":"The video to analyze (video_… id)."},"prompts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":2000},"minItems":2,"maxItems":10,"description":"2–10 free-text prompts. First is full price; each additional is billed at 50%."},"model":{"type":"string","description":"Model id (see list_models). Defaults to the current default model."},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional key-value metadata attached to every analysis in the batch."}},"required":["video_id","prompts"],"additionalProperties":false},"annotations":{"title":"Analyze video with multiple prompts (batch discount)","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"object":{"type":"string","const":"analysis_batch"},"id":{"type":"string"},"video_id":{"type":"string","pattern":"^video_[0-9A-HJKMNP-TV-Z]{26}$"},"analyses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^an_[0-9A-HJKMNP-TV-Z]{26}$"},"object":{"type":"string","const":"analysis"},"livemode":{"type":"boolean"},"origin":{"type":"string","enum":["api","console","system"]},"status":{"type":"string","enum":["queued","preparing","analyzing","rendering","completed","failed","canceled"]},"video_id":{"$ref":"#/properties/video_id"},"prompt":{"anyOf":[{"type":"string","minLength":1,"maxLength":2000},{"type":"null"}]},"query":{"type":"object","additionalProperties":{},"description":"Compiled interpretation of the prompt (subjects, conditions, query_type, search_terms, prompt_intent, original_prompt, …). Transparency feature: shows how the question was understood. Full schema: /v1/schemas/compiled-query.json."},"parse_mode":{"anyOf":[{"type":"string","enum":["llm","heuristic","client"]},{"type":"null"}]},"model":{"type":"string"},"options":{"type":"object","properties":{"narrative":{"type":"boolean","default":false}},"additionalProperties":false},"progress":{"anyOf":[{"type":"object","properties":{"stage":{"type":"string"},"percent":{"type":"number","minimum":0,"maximum":100}},"required":["stage","percent"],"additionalProperties":false},{"type":"null"}]},"queue_position":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"result":{"anyOf":[{"type":"object","properties":{"answer":{"type":"string","enum":["yes","no","indeterminate"]},"confidence":{"type":"number","minimum":0,"maximum":1},"clips":{"type":"array","items":{"type":"object","properties":{"start_s":{"type":"number","minimum":0},"end_s":{"type":"number"},"confidence":{"type":"number","minimum":0,"maximum":1},"terms":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}}},"required":["start_s","end_s","confidence","terms"],"additionalProperties":false},"maxItems":500},"term_confidences":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}},"query_type":{"type":"string","enum":["object","action","compound","attribute","open_ended"]},"video_duration_s":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"detected_count":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"indeterminate_reason":{"anyOf":[{"type":"string","enum":["low_confidence","nothing_detected","unsupported_query_form","duration_mismatch","unsupported_action_term"]},{"type":"null"}]},"unsupported_action":{"type":"object","properties":{"reason":{"type":"string"},"docs_url":{"type":"string"}},"required":["reason","docs_url"],"additionalProperties":false}},"required":["answer","confidence","clips","term_confidences","query_type","video_duration_s"],"additionalProperties":false},{"type":"null"}]},"narrative":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["generating","ready","failed"]},"entries":{"type":"array","items":{"type":"object","properties":{"t_s":{"type":"number"},"text":{"type":"string"}},"required":["t_s","text"],"additionalProperties":false}}},"required":["status","entries"],"additionalProperties":false},{"type":"null"}]},"artifacts":{"anyOf":[{"type":"object","properties":{"annotated_video_url":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time"}},"required":["annotated_video_url","expires_at"],"additionalProperties":false},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"metering_rule":{"type":"string","enum":["per_second","per_frame"]},"usage":{"anyOf":[{"type":"object","properties":{"billed_seconds":{"type":"integer","minimum":0},"credit_balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}]},"metering_rule":{"$ref":"#/properties/analyses/items/properties/metering_rule"},"frames":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["billed_seconds","credit_balance_after"],"additionalProperties":false},{"type":"null"}]},"rerun_eligible":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"propertyNames":{"pattern":"^[a-zA-Z0-9_.-]{1,40}$"},"default":{}},"created_at":{"$ref":"#/properties/analyses/items/properties/artifacts/anyOf/0/properties/expires_at"},"started_at":{"anyOf":[{"$ref":"#/properties/analyses/items/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]},"completed_at":{"anyOf":[{"$ref":"#/properties/analyses/items/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]}},"required":["id","object","livemode","origin","status","video_id","prompt","query","parse_mode","model","options","progress","queue_position","result","narrative","artifacts","error","usage","created_at","started_at","completed_at"],"additionalProperties":false}},"pricing":{"type":"object","properties":{"full_price_prompts":{"type":"integer"},"discounted_prompts":{"type":"integer"},"discount_pct":{"type":"integer"},"estimated_total_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}]},"estimated_total_cost_usd":{"type":["number","null"]}},"required":["full_price_prompts","discounted_prompts","discount_pct","estimated_total_seconds","estimated_total_cost_usd"],"additionalProperties":false}},"required":["object","id","video_id","analyses","pricing"],"additionalProperties":false}},{"name":"get_analysis","description":"Fetch an analysis by id (GET /v1/analyses/{id}). While running, shows live progress and queue_position. When status is \"completed\": result.answer (yes|no|indeterminate), result.confidence (for count queries this is confidence in the count itself), result.clips, result.detected_count (count-intent queries only; 0 = assessable but nothing found), result.indeterminate_reason (low_confidence — retry with a more specific prompt; nothing_detected — genuinely empty; unsupported_query_form — rephrase as yes/no or count; unsupported_action_term — action not in the supported vocabulary, pick one from docs_url; duration_mismatch — result untrusted), and result.video_duration_s (null when duration could not be determined). usage is {billed_seconds, credit_balance_after} — an immutable post-settlement snapshot.","inputSchema":{"type":"object","properties":{"analysis_id":{"type":"string","description":"The analysis id (an_…)."}},"required":["analysis_id"],"additionalProperties":false},"annotations":{"title":"Get analysis result","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","pattern":"^an_[0-9A-HJKMNP-TV-Z]{26}$"},"object":{"type":"string","const":"analysis"},"livemode":{"type":"boolean"},"origin":{"type":"string","enum":["api","console","system"]},"status":{"type":"string","enum":["queued","preparing","analyzing","rendering","completed","failed","canceled"]},"video_id":{"type":"string","pattern":"^video_[0-9A-HJKMNP-TV-Z]{26}$"},"prompt":{"anyOf":[{"type":"string","minLength":1,"maxLength":2000},{"type":"null"}]},"query":{"type":"object","additionalProperties":{},"description":"Compiled interpretation of the prompt (subjects, conditions, query_type, search_terms, prompt_intent, original_prompt, …). Transparency feature: shows how the question was understood. Full schema: /v1/schemas/compiled-query.json."},"parse_mode":{"anyOf":[{"type":"string","enum":["llm","heuristic","client"]},{"type":"null"}]},"model":{"type":"string"},"options":{"type":"object","properties":{"narrative":{"type":"boolean","default":false}},"additionalProperties":false},"progress":{"anyOf":[{"type":"object","properties":{"stage":{"type":"string"},"percent":{"type":"number","minimum":0,"maximum":100}},"required":["stage","percent"],"additionalProperties":false},{"type":"null"}]},"queue_position":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"result":{"anyOf":[{"type":"object","properties":{"answer":{"type":"string","enum":["yes","no","indeterminate"]},"confidence":{"type":"number","minimum":0,"maximum":1},"clips":{"type":"array","items":{"type":"object","properties":{"start_s":{"type":"number","minimum":0},"end_s":{"type":"number"},"confidence":{"type":"number","minimum":0,"maximum":1},"terms":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}}},"required":["start_s","end_s","confidence","terms"],"additionalProperties":false},"maxItems":500},"term_confidences":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}},"query_type":{"type":"string","enum":["object","action","compound","attribute","open_ended"]},"video_duration_s":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"detected_count":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"indeterminate_reason":{"anyOf":[{"type":"string","enum":["low_confidence","nothing_detected","unsupported_query_form","duration_mismatch","unsupported_action_term"]},{"type":"null"}]},"unsupported_action":{"type":"object","properties":{"reason":{"type":"string"},"docs_url":{"type":"string"}},"required":["reason","docs_url"],"additionalProperties":false}},"required":["answer","confidence","clips","term_confidences","query_type","video_duration_s"],"additionalProperties":false},{"type":"null"}]},"narrative":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["generating","ready","failed"]},"entries":{"type":"array","items":{"type":"object","properties":{"t_s":{"type":"number"},"text":{"type":"string"}},"required":["t_s","text"],"additionalProperties":false}}},"required":["status","entries"],"additionalProperties":false},{"type":"null"}]},"artifacts":{"anyOf":[{"type":"object","properties":{"annotated_video_url":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time"}},"required":["annotated_video_url","expires_at"],"additionalProperties":false},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"metering_rule":{"type":"string","enum":["per_second","per_frame"]},"usage":{"anyOf":[{"type":"object","properties":{"billed_seconds":{"type":"integer","minimum":0},"credit_balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}]},"metering_rule":{"$ref":"#/properties/metering_rule"},"frames":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["billed_seconds","credit_balance_after"],"additionalProperties":false},{"type":"null"}]},"rerun_eligible":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"propertyNames":{"pattern":"^[a-zA-Z0-9_.-]{1,40}$"},"default":{}},"created_at":{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},"started_at":{"anyOf":[{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]},"completed_at":{"anyOf":[{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]}},"required":["id","object","livemode","origin","status","video_id","prompt","query","parse_mode","model","options","progress","queue_position","result","narrative","artifacts","error","usage","created_at","started_at","completed_at"],"additionalProperties":false}},{"name":"wait_for_analysis","description":"Block until an analysis reaches a terminal state (completed | failed | canceled), polling GET /v1/analyses/{id}. Returns { analysis, retry }: retry is null when the analysis reached a terminal state, or carries timeout guidance when the wait expired (call again). Default timeout 120s (test-mode analyses complete in seconds). On completion, see get_analysis for the full result field semantics (detected_count, indeterminate_reason, nullable video_duration_s, usage snapshot).","inputSchema":{"type":"object","properties":{"analysis_id":{"type":"string","description":"The analysis id (an_…)."},"timeout_s":{"type":"integer","minimum":1,"maximum":600,"description":"Max seconds to wait (default 120)."}},"required":["analysis_id"],"additionalProperties":false},"annotations":{"title":"Wait for analysis to finish","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"analysis":{"type":"object","properties":{"id":{"type":"string","pattern":"^an_[0-9A-HJKMNP-TV-Z]{26}$"},"object":{"type":"string","const":"analysis"},"livemode":{"type":"boolean"},"origin":{"type":"string","enum":["api","console","system"]},"status":{"type":"string","enum":["queued","preparing","analyzing","rendering","completed","failed","canceled"]},"video_id":{"type":"string","pattern":"^video_[0-9A-HJKMNP-TV-Z]{26}$"},"prompt":{"anyOf":[{"type":"string","minLength":1,"maxLength":2000},{"type":"null"}]},"query":{"type":"object","additionalProperties":{},"description":"Compiled interpretation of the prompt (subjects, conditions, query_type, search_terms, prompt_intent, original_prompt, …). Transparency feature: shows how the question was understood. Full schema: /v1/schemas/compiled-query.json."},"parse_mode":{"anyOf":[{"type":"string","enum":["llm","heuristic","client"]},{"type":"null"}]},"model":{"type":"string"},"options":{"type":"object","properties":{"narrative":{"type":"boolean","default":false}},"additionalProperties":false},"progress":{"anyOf":[{"type":"object","properties":{"stage":{"type":"string"},"percent":{"type":"number","minimum":0,"maximum":100}},"required":["stage","percent"],"additionalProperties":false},{"type":"null"}]},"queue_position":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"result":{"anyOf":[{"type":"object","properties":{"answer":{"type":"string","enum":["yes","no","indeterminate"]},"confidence":{"type":"number","minimum":0,"maximum":1},"clips":{"type":"array","items":{"type":"object","properties":{"start_s":{"type":"number","minimum":0},"end_s":{"type":"number"},"confidence":{"type":"number","minimum":0,"maximum":1},"terms":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}}},"required":["start_s","end_s","confidence","terms"],"additionalProperties":false},"maxItems":500},"term_confidences":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}},"query_type":{"type":"string","enum":["object","action","compound","attribute","open_ended"]},"video_duration_s":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"detected_count":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"indeterminate_reason":{"anyOf":[{"type":"string","enum":["low_confidence","nothing_detected","unsupported_query_form","duration_mismatch","unsupported_action_term"]},{"type":"null"}]},"unsupported_action":{"type":"object","properties":{"reason":{"type":"string"},"docs_url":{"type":"string"}},"required":["reason","docs_url"],"additionalProperties":false}},"required":["answer","confidence","clips","term_confidences","query_type","video_duration_s"],"additionalProperties":false},{"type":"null"}]},"narrative":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["generating","ready","failed"]},"entries":{"type":"array","items":{"type":"object","properties":{"t_s":{"type":"number"},"text":{"type":"string"}},"required":["t_s","text"],"additionalProperties":false}}},"required":["status","entries"],"additionalProperties":false},{"type":"null"}]},"artifacts":{"anyOf":[{"type":"object","properties":{"annotated_video_url":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time"}},"required":["annotated_video_url","expires_at"],"additionalProperties":false},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"metering_rule":{"type":"string","enum":["per_second","per_frame"]},"usage":{"anyOf":[{"type":"object","properties":{"billed_seconds":{"type":"integer","minimum":0},"credit_balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}]},"metering_rule":{"$ref":"#/properties/analysis/properties/metering_rule"},"frames":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["billed_seconds","credit_balance_after"],"additionalProperties":false},{"type":"null"}]},"rerun_eligible":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"propertyNames":{"pattern":"^[a-zA-Z0-9_.-]{1,40}$"},"default":{}},"created_at":{"$ref":"#/properties/analysis/properties/artifacts/anyOf/0/properties/expires_at"},"started_at":{"anyOf":[{"$ref":"#/properties/analysis/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]},"completed_at":{"anyOf":[{"$ref":"#/properties/analysis/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]}},"required":["id","object","livemode","origin","status","video_id","prompt","query","parse_mode","model","options","progress","queue_position","result","narrative","artifacts","error","usage","created_at","started_at","completed_at"],"additionalProperties":false},"retry":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string","const":"timeout"},"note":{"type":"string"}},"required":["reason","note"],"additionalProperties":false},{"type":"null"}],"description":"Null when the analysis reached a terminal state. Set when the wait timed out — call wait_for_analysis or get_analysis again."}},"required":["analysis","retry"],"additionalProperties":false}},{"name":"list_models","description":"List available analysis models (GET /v1/models) with status (stable | preview | deprecated) and capabilities. Use the model marked default:true unless you have a reason not to.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"title":"List analysis models","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","const":"model"},"status":{"type":"string","enum":["stable","preview","deprecated"]},"default":{"type":"boolean"},"capabilities":{"type":"object","properties":{"prompt":{"type":"boolean"},"structured_query":{"type":"boolean"},"narrative":{"type":"boolean"},"streaming":{"type":"boolean"}},"required":["prompt","structured_query","narrative","streaming"],"additionalProperties":true},"sunset_at":{"type":["string","null"]},"created_at":{"type":"string"}},"required":["id","object","status","default","capabilities","sunset_at","created_at"],"additionalProperties":true}},"has_more":{"type":"boolean"}},"required":["object","data","has_more"],"additionalProperties":false}},{"name":"list_video_analyses","description":"List every analysis run against a video, newest first (GET /v1/videos/{id}/analyses). Same envelope + filters (status, limit, starting_after) as GET /v1/analyses. Combine with get_video (media — signed source playback) and each analysis's artifacts (annotated result video) for full video-library semantics: list, replay, per-video history.","inputSchema":{"type":"object","properties":{"video_id":{"type":"string","description":"The video id (video_…)."},"status":{"type":"string","enum":["queued","analyzing","completed","failed","canceled"],"description":"Filter by analysis status."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Results per page (default 20)."},"starting_after":{"type":"string","description":"Cursor — return analyses after this id."}},"required":["video_id"],"additionalProperties":false},"annotations":{"title":"List analyses for a video","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^an_[0-9A-HJKMNP-TV-Z]{26}$"},"object":{"type":"string","const":"analysis"},"livemode":{"type":"boolean"},"origin":{"type":"string","enum":["api","console","system"]},"status":{"type":"string","enum":["queued","preparing","analyzing","rendering","completed","failed","canceled"]},"video_id":{"type":"string","pattern":"^video_[0-9A-HJKMNP-TV-Z]{26}$"},"prompt":{"anyOf":[{"type":"string","minLength":1,"maxLength":2000},{"type":"null"}]},"query":{"type":"object","additionalProperties":{},"description":"Compiled interpretation of the prompt (subjects, conditions, query_type, search_terms, prompt_intent, original_prompt, …). Transparency feature: shows how the question was understood. Full schema: /v1/schemas/compiled-query.json."},"parse_mode":{"anyOf":[{"type":"string","enum":["llm","heuristic","client"]},{"type":"null"}]},"model":{"type":"string"},"options":{"type":"object","properties":{"narrative":{"type":"boolean","default":false}},"additionalProperties":false},"progress":{"anyOf":[{"type":"object","properties":{"stage":{"type":"string"},"percent":{"type":"number","minimum":0,"maximum":100}},"required":["stage","percent"],"additionalProperties":false},{"type":"null"}]},"queue_position":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"result":{"anyOf":[{"type":"object","properties":{"answer":{"type":"string","enum":["yes","no","indeterminate"]},"confidence":{"type":"number","minimum":0,"maximum":1},"clips":{"type":"array","items":{"type":"object","properties":{"start_s":{"type":"number","minimum":0},"end_s":{"type":"number"},"confidence":{"type":"number","minimum":0,"maximum":1},"terms":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}}},"required":["start_s","end_s","confidence","terms"],"additionalProperties":false},"maxItems":500},"term_confidences":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}},"query_type":{"type":"string","enum":["object","action","compound","attribute","open_ended"]},"video_duration_s":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"detected_count":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"indeterminate_reason":{"anyOf":[{"type":"string","enum":["low_confidence","nothing_detected","unsupported_query_form","duration_mismatch","unsupported_action_term"]},{"type":"null"}]},"unsupported_action":{"type":"object","properties":{"reason":{"type":"string"},"docs_url":{"type":"string"}},"required":["reason","docs_url"],"additionalProperties":false}},"required":["answer","confidence","clips","term_confidences","query_type","video_duration_s"],"additionalProperties":false},{"type":"null"}]},"narrative":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["generating","ready","failed"]},"entries":{"type":"array","items":{"type":"object","properties":{"t_s":{"type":"number"},"text":{"type":"string"}},"required":["t_s","text"],"additionalProperties":false}}},"required":["status","entries"],"additionalProperties":false},{"type":"null"}]},"artifacts":{"anyOf":[{"type":"object","properties":{"annotated_video_url":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time"}},"required":["annotated_video_url","expires_at"],"additionalProperties":false},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"metering_rule":{"type":"string","enum":["per_second","per_frame"]},"usage":{"anyOf":[{"type":"object","properties":{"billed_seconds":{"type":"integer","minimum":0},"credit_balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}]},"metering_rule":{"$ref":"#/properties/data/items/properties/metering_rule"},"frames":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["billed_seconds","credit_balance_after"],"additionalProperties":false},{"type":"null"}]},"rerun_eligible":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"propertyNames":{"pattern":"^[a-zA-Z0-9_.-]{1,40}$"},"default":{}},"created_at":{"$ref":"#/properties/data/items/properties/artifacts/anyOf/0/properties/expires_at"},"started_at":{"anyOf":[{"$ref":"#/properties/data/items/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]},"completed_at":{"anyOf":[{"$ref":"#/properties/data/items/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]}},"required":["id","object","livemode","origin","status","video_id","prompt","query","parse_mode","model","options","progress","queue_position","result","narrative","artifacts","error","usage","created_at","started_at","completed_at"],"additionalProperties":false}},"has_more":{"type":"boolean"}},"required":["object","data","has_more"],"additionalProperties":false}},{"name":"rerun_analysis","description":"Free re-run of an eligible failed analysis (POST /v1/analyses/{id}/rerun, PRI-493). Failed analyses carry rerun_eligible: true when the failure occurred during a declared platform incident. Creates a FRESH analysis at no charge (same video, prompt, model, options; new id; never billed). One free re-run per failed analysis; ineligible → 409 rerun_not_eligible. Follow with wait_for_analysis on the returned id.","inputSchema":{"type":"object","properties":{"analysis_id":{"type":"string","description":"The FAILED analysis id (an_…) with rerun_eligible: true."}},"required":["analysis_id"],"additionalProperties":false},"annotations":{"title":"Re-run a failed analysis (free)","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"id":{"type":"string","pattern":"^an_[0-9A-HJKMNP-TV-Z]{26}$"},"object":{"type":"string","const":"analysis"},"livemode":{"type":"boolean"},"origin":{"type":"string","enum":["api","console","system"]},"status":{"type":"string","enum":["queued","preparing","analyzing","rendering","completed","failed","canceled"]},"video_id":{"type":"string","pattern":"^video_[0-9A-HJKMNP-TV-Z]{26}$"},"prompt":{"anyOf":[{"type":"string","minLength":1,"maxLength":2000},{"type":"null"}]},"query":{"type":"object","additionalProperties":{},"description":"Compiled interpretation of the prompt (subjects, conditions, query_type, search_terms, prompt_intent, original_prompt, …). Transparency feature: shows how the question was understood. Full schema: /v1/schemas/compiled-query.json."},"parse_mode":{"anyOf":[{"type":"string","enum":["llm","heuristic","client"]},{"type":"null"}]},"model":{"type":"string"},"options":{"type":"object","properties":{"narrative":{"type":"boolean","default":false}},"additionalProperties":false},"progress":{"anyOf":[{"type":"object","properties":{"stage":{"type":"string"},"percent":{"type":"number","minimum":0,"maximum":100}},"required":["stage","percent"],"additionalProperties":false},{"type":"null"}]},"queue_position":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"result":{"anyOf":[{"type":"object","properties":{"answer":{"type":"string","enum":["yes","no","indeterminate"]},"confidence":{"type":"number","minimum":0,"maximum":1},"clips":{"type":"array","items":{"type":"object","properties":{"start_s":{"type":"number","minimum":0},"end_s":{"type":"number"},"confidence":{"type":"number","minimum":0,"maximum":1},"terms":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}}},"required":["start_s","end_s","confidence","terms"],"additionalProperties":false},"maxItems":500},"term_confidences":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1}},"query_type":{"type":"string","enum":["object","action","compound","attribute","open_ended"]},"video_duration_s":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"detected_count":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"indeterminate_reason":{"anyOf":[{"type":"string","enum":["low_confidence","nothing_detected","unsupported_query_form","duration_mismatch","unsupported_action_term"]},{"type":"null"}]},"unsupported_action":{"type":"object","properties":{"reason":{"type":"string"},"docs_url":{"type":"string"}},"required":["reason","docs_url"],"additionalProperties":false}},"required":["answer","confidence","clips","term_confidences","query_type","video_duration_s"],"additionalProperties":false},{"type":"null"}]},"narrative":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["generating","ready","failed"]},"entries":{"type":"array","items":{"type":"object","properties":{"t_s":{"type":"number"},"text":{"type":"string"}},"required":["t_s","text"],"additionalProperties":false}}},"required":["status","entries"],"additionalProperties":false},{"type":"null"}]},"artifacts":{"anyOf":[{"type":"object","properties":{"annotated_video_url":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time"}},"required":["annotated_video_url","expires_at"],"additionalProperties":false},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},{"type":"null"}]},"metering_rule":{"type":"string","enum":["per_second","per_frame"]},"usage":{"anyOf":[{"type":"object","properties":{"billed_seconds":{"type":"integer","minimum":0},"credit_balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}]},"metering_rule":{"$ref":"#/properties/metering_rule"},"frames":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["billed_seconds","credit_balance_after"],"additionalProperties":false},{"type":"null"}]},"rerun_eligible":{"type":"boolean"},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"propertyNames":{"pattern":"^[a-zA-Z0-9_.-]{1,40}$"},"default":{}},"created_at":{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},"started_at":{"anyOf":[{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]},"completed_at":{"anyOf":[{"$ref":"#/properties/artifacts/anyOf/0/properties/expires_at"},{"type":"null"}]}},"required":["id","object","livemode","origin","status","video_id","prompt","query","parse_mode","model","options","progress","queue_position","result","narrative","artifacts","error","usage","created_at","started_at","completed_at"],"additionalProperties":false}},{"name":"get_usage","description":"Get credit balance and period usage meters for the current API key (GET /v1/usage). Use this after an insufficient_credits error to report the balance. For the per-analysis transaction ledger (what each analysis cost, with source ids), use get_credits instead.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"title":"Get usage & credit balance","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"meters":{"type":"array","items":{"type":"object","properties":{"meter":{"type":"string"},"unit":{"type":"string"},"balance":{"type":"number"},"limit":{"type":["number","null"]},"used":{"type":"number"},"resets_at":{"type":"string","format":"date-time"}},"required":["meter","unit"],"additionalProperties":false},"description":"Authoritative usage meters (credit_seconds balance, period meters)."},"period":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"],"additionalProperties":false},"plan":{"type":"string"},"has_active_subscription":{"type":"boolean"},"meters_is_authoritative":{"type":"boolean"},"deprecated_fields":{"type":"array","items":{"type":"string"},"description":"Legacy flat fields still present for backwards compatibility; prefer meters[]."}},"required":["meters","period","plan","has_active_subscription"],"additionalProperties":true}},{"name":"get_credits","description":"Get the credit balance and transaction ledger for this API key (GET /v1/credits). Returns balance_seconds (the authoritative credit balance — legacy field name), grant_seconds, used_seconds, and a paginated transaction list where each debit carries the analysis/stream id it came from (source_id, source_type). Use this to audit what each analysis cost, check the balance before a batch job, or diagnose an insufficient_credits error.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Transactions per page (default 20)."},"before":{"type":"string","description":"Cursor — return transactions older than this id."}},"additionalProperties":false},"annotations":{"title":"Get credit balance & transaction history","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"object":{"type":"string","const":"credits"},"balance_seconds":{"type":"number"},"grant_seconds":{"type":["number","null"]},"used_seconds":{"type":["number","null"]},"transactions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"seconds_delta":{"type":"number"},"balance_after_seconds":{"type":"number"},"source_type":{"type":["string","null"]},"source_id":{"type":["string","null"]},"created_at":{"type":"string"}},"required":["id","kind","seconds_delta","balance_after_seconds","source_type","source_id","created_at"],"additionalProperties":false}},"has_more":{"type":"boolean"}},"required":["object","balance_seconds","grant_seconds","used_seconds","transactions","has_more"],"additionalProperties":false}},{"name":"get_test_fixture","description":"Get the stable test fixture (GET /v1/test-fixture): a video URL + prompt + expected answer for verifying an integration end-to-end without burning quota. Test-mode (pv_test_) keys return deterministic canned results.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"title":"Get test fixture","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"description":{"type":"string"},"fixtures":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"test_video_url":{"type":"string"},"test_prompt":{"type":"string"},"expected_answer":{"type":"string","enum":["yes","no","indeterminate"]},"expected_confidence_min":{"type":"number"},"expected_detected_count_min":{"type":"integer"},"note":{"type":"string"}},"required":["name","test_video_url","test_prompt","expected_answer","expected_confidence_min"],"additionalProperties":true}}},"required":["fixtures"],"additionalProperties":true}}],"resources":[],"prompts":[]}