From 51a45adfa8c7c5e84f3e12905c0a5fc7e3fd5efc Mon Sep 17 00:00:00 2001 From: calvin-archastro <244590232+calvin-archastro@users.noreply.github.com> Date: Wed, 21 Oct 2026 22:21:40 +0000 Subject: [PATCH] chore: refresh platform-openapi.json from firstlanding --- specs/platform-openapi.json | 9607 ++++++++++++++++++++++++++++++++++- 1 file changed, 9515 insertions(+), 92 deletions(-) diff --git a/specs/platform-openapi.json b/specs/platform-openapi.json index 92f0944..1b72868 100644 --- a/specs/platform-openapi.json +++ b/specs/platform-openapi.json @@ -6,7 +6,8 @@ "example": { "completions": [ { - "response_model": "string" + "response_model": "string", + "timing": {} } ], "finish_reason": "stop", @@ -227,13 +228,19 @@ "AICompletionProvenance": { "description": "One accepted provider completion. An empty record preserves an unknown identity.", "example": { - "response_model": "string" + "response_model": "string", + "timing": {} }, "properties": { "response_model": { "description": "Model identity reported by the provider response, not the requested model or usage key.", "example": "string", "type": "string" + }, + "timing": { + "description": "Optional monotonic timing for this accepted completion and its retries. request_ms includes all attempts, backoff and local processing; provider_attempts_ms is the sum of provider request wall times, including transport and parsing; retry_backoff_ms is measured retry sleep. attempt_count includes the accepted call and retry_count counts earlier attempts. These overlapping measurements are not provider-internal inference time. Missing timing is unknown, not zero.", + "example": {}, + "type": "object" } }, "type": "object" @@ -243,7 +250,8 @@ "example": { "completions": [ { - "response_model": "string" + "response_model": "string", + "timing": {} } ], "finish_reason": "stop", @@ -328,7 +336,7 @@ "type": "string" }, "token_usage": { - "description": "Token consumption breakdown keyed by model ID. Each value is a map with `\"input_tokens\"` and `\"output_tokens\"` counts. `null` when usage data is unavailable.", + "description": "Token consumption keyed by model ID. Each value has `input` (all prompt tokens, including cache reads and writes) and `output` counts. When reported, `fresh_input`, `cache_read`, and `cache_creation` are disjoint input buckets; missing cache counts remain unknown. `null` when usage data is unavailable.", "example": {}, "type": "object" } @@ -341,11 +349,12 @@ "type": "object" }, "AIEvaluationAnswer": { - "description": "One typed evaluation answer. `type` selects boolean, choice, or score.\n`id` matches the question id.\n", + "description": "One typed evaluation answer. `type` selects boolean, choice, score, or refusal.\n`id` matches the question id.\n", "discriminator": { "mapping": { "boolean": "#/components/schemas/AIEvaluationAnswerBoolean", "choice": "#/components/schemas/AIEvaluationAnswerChoice", + "refusal": "#/components/schemas/Refusal", "score": "#/components/schemas/AIEvaluationAnswerScore" }, "propertyName": "type" @@ -359,6 +368,9 @@ }, { "$ref": "#/components/schemas/AIEvaluationAnswerScore" + }, + { + "$ref": "#/components/schemas/Refusal" } ] }, @@ -499,7 +511,7 @@ }, "properties": { "answers": { - "description": "Typed answers. Each value is a boolean, choice, or score object with the question `id`.", + "description": "Typed boolean, choice, score, or refusal answers with the question `id`.", "items": { "$ref": "#/components/schemas/AIEvaluationAnswer" }, @@ -3607,6 +3619,7 @@ "created_at": "2024-01-01T00:00:00Z", "error_message": "string", "id": "cmp_0aBcDeFgHiJkLmNoPqRsTu", + "key": "string", "last_active_at": "2024-01-01T00:00:00Z", "lookup_key": "main-computer", "metadata": { @@ -3617,12 +3630,14 @@ "region": "us-east-1", "sprite_url": "https://example.com", "status": "ready", + "thread_id": "string", "updated_at": "2024-01-01T00:00:00Z" }, "properties": { "agent": { "description": "ID of the agent that owns this computer (`agi_...`). `null` if the computer is not yet assigned to an agent.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app": { @@ -3646,6 +3661,7 @@ "error_message": { "description": "Human-readable error description when `status` is `\"error\"`. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "id": { @@ -3653,15 +3669,23 @@ "example": "cmp_0aBcDeFgHiJkLmNoPqRsTu", "type": "string" }, + "key": { + "description": "Stable key unique within the thread, or null if unset.", + "example": "string", + "nullable": true, + "type": "string" + }, "last_active_at": { "description": "When the computer last reported activity or received a command. `null` if the computer has never been active.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Unique, stable identifier you assign to this computer within its app. `null` if not set.", "example": "main-computer", + "nullable": true, "type": "string" }, "metadata": { @@ -3677,23 +3701,32 @@ "type": "string" }, "provider": { - "description": "Compute backend powering this computer: `\"sprites\"` (Fly Sprites) or `\"vercel\"` (Vercel Sandbox).", + "description": "Compute backend powering this computer: `\"sprites\"` (Fly Sprites), `\"vercel\"` (Vercel Sandbox) or `\"e2b\"` (E2B).", "example": "sprites", "type": "string" }, "region": { - "description": "Cloud region where the computer is hosted, e.g. `\"us-east-1\"`. `null` if not yet assigned or when the provider has no region concept (e.g. `\"vercel\"`).", + "description": "Cloud region where the computer is hosted, e.g. `\"us-east-1\"`. `null` if not yet assigned or when the provider has no region concept (e.g. `\"vercel\"`, `\"e2b\"`).", "example": "us-east-1", + "nullable": true, "type": "string" }, "sprite_url": { "description": "URL of the live screenshot sprite used to render a real-time preview of the computer's screen. `null` when no sprite is available.", "example": "https://example.com", + "nullable": true, "type": "string" }, "status": { "description": "Current lifecycle state of the computer. Common values include `\"provisioning\"`, `\"ready\"`, `\"error\"`, and `\"terminated\"`.", "example": "ready", + "nullable": true, + "type": "string" + }, + "thread_id": { + "description": "Thread this computer belongs to, or null for a non-thread computer.", + "example": "string", + "nullable": true, "type": "string" }, "updated_at": { @@ -3721,6 +3754,7 @@ "created_at": "2024-01-01T00:00:00Z", "error_message": "string", "id": "cmp_0aBcDeFgHiJkLmNoPqRsTu", + "key": "string", "last_active_at": "2024-01-01T00:00:00Z", "lookup_key": "main-computer", "metadata": { @@ -3731,6 +3765,7 @@ "region": "us-east-1", "sprite_url": "https://example.com", "status": "ready", + "thread_id": "string", "updated_at": "2024-01-01T00:00:00Z" } ] @@ -4769,6 +4804,201 @@ ], "type": "object" }, + "AgentRequest": { + "description": "A request for human approval or input. Secret input is never returned.", + "example": { + "agent": { + "id": "string", + "name": "Example Name" + }, + "approvers": { + "mode": "string" + }, + "expires_at": "2024-01-01T00:00:00Z", + "id": "arq_0aBcDeFgHiJkLmNoPqRsTu", + "is_approver": true, + "kind": "string", + "origin": { + "routine_id": "string", + "session_id": "string", + "thread_id": "string" + }, + "payload": { + "question": "string" + }, + "resolution": { + "answer": "string", + "reason": "string" + }, + "resolved_at": "2024-01-01T00:00:00Z", + "resolved_by": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "status": "string", + "summary": { + "lines": [ + "string" + ], + "title": "Example Title" + } + }, + "properties": { + "agent": { + "$ref": "#/components/schemas/AgentRequestAgent", + "description": "Originating agent." + }, + "approvers": { + "$ref": "#/components/schemas/Approvers", + "description": "Approval policy, excluding user IDs." + }, + "expires_at": { + "description": "Expiration time.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Request ID (`arq_...`).", + "example": "arq_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_approver": { + "description": "Whether the authenticated caller is an approver, regardless of request status.", + "example": true, + "type": "boolean" + }, + "kind": { + "description": "Registered request kind.", + "example": "string", + "type": "string" + }, + "origin": { + "$ref": "#/components/schemas/Origin", + "description": "Origin references." + }, + "payload": { + "$ref": "#/components/schemas/Payload", + "description": "Question request payload." + }, + "resolution": { + "allOf": [ + { + "$ref": "#/components/schemas/Resolution" + } + ], + "description": "Answer or rejection reason; null before resolution.", + "example": { + "answer": "string", + "reason": "string" + }, + "nullable": true + }, + "resolved_at": { + "description": "Resolution time.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "resolved_by": { + "description": "Resolving user ID.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "status": { + "description": "Request status.", + "example": "string", + "type": "string" + }, + "summary": { + "$ref": "#/components/schemas/Summary", + "description": "Kind-provided summary." + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "AgentRequestAgent": { + "description": "Originating agent.", + "example": { + "id": "string", + "name": "Example Name" + }, + "properties": { + "id": { + "example": "string", + "type": "string" + }, + "name": { + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "AgentRequestListResponse": { + "description": "A page of visible agent requests.", + "example": { + "data": [ + { + "agent": { + "id": "string", + "name": "Example Name" + }, + "approvers": { + "mode": "string" + }, + "expires_at": "2024-01-01T00:00:00Z", + "id": "arq_0aBcDeFgHiJkLmNoPqRsTu", + "is_approver": true, + "kind": "string", + "origin": { + "routine_id": "string", + "session_id": "string", + "thread_id": "string" + }, + "payload": { + "question": "string" + }, + "resolution": { + "answer": "string", + "reason": "string" + }, + "resolved_at": "2024-01-01T00:00:00Z", + "resolved_by": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "status": "string", + "summary": { + "lines": [ + "string" + ], + "title": "Example Title" + } + } + ], + "next_cursor": "string" + }, + "properties": { + "data": { + "description": "Visible requests.", + "items": { + "$ref": "#/components/schemas/AgentRequest" + }, + "type": "array" + }, + "next_cursor": { + "description": "Pass as cursor for the next page; null at the end.", + "example": "string", + "type": "string" + } + }, + "required": [ + "data" + ], + "type": "object" + }, "AgentRoutine": { "description": "An agent routine defines a reusable handler — script, preset, or chain — that runs in response to events or on a schedule.", "example": { @@ -5632,6 +5862,47 @@ ], "type": "object" }, + "AgentSessionEvent": { + "description": "One event from the coding harness running an agent session on a computer.", + "example": { + "event": "tool_use", + "harness": "claude", + "id": "cse_...", + "occurred_at": "2024-01-01T00:00:00Z", + "payload": {} + }, + "properties": { + "event": { + "description": "Event name: `session_started`, `message`, `tool_use`, `needs_input`, `activity`, `error`, `turn_complete`, `finished`, `adopted`, or `harness_raw`.", + "example": "tool_use", + "type": "string" + }, + "harness": { + "description": "Harness that emitted it.", + "example": "claude", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Event ID; pass as `after` to page.", + "example": "cse_...", + "type": "string" + }, + "occurred_at": { + "description": "When the event happened in the sandbox.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "payload": { + "description": "Harness-specific event data.", + "example": {}, + "nullable": true, + "type": "object" + } + }, + "type": "object" + }, "AgentSessionListResponse": { "description": "Paginated list response containing an array of agent session objects.", "example": { @@ -6757,9 +7028,53 @@ ], "type": "object" }, + "Approvers": { + "description": "Approval policy, excluding user IDs.", + "example": { + "mode": "string" + }, + "properties": { + "mode": { + "example": "string", + "type": "string" + } + }, + "required": [ + "mode" + ], + "type": "object" + }, "Artifact": { "description": "A versioned artifact produced or managed by an agent, such as a generated file, report, or code output.", "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -6790,6 +7105,43 @@ "version": 1 }, "properties": { + "acl": { + "allOf": [ + { + "$ref": "#/components/schemas/Acl" + } + ], + "description": "Access control list for the artifact. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions` (`read`, `write`). `null` when the artifact has no grants or the viewer is not its owner.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "nullable": true + }, "agent": { "description": "ID of the agent that produced this artifact (`agt_...`). `null` if not agent-produced.", "example": "agt_0aBcDeFgHiJkLmNoPqRsTu", @@ -7175,8 +7527,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -7190,8 +7544,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -8284,8 +8640,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -8299,8 +8657,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -8495,8 +8855,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -8510,8 +8872,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -8946,8 +9310,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -8961,8 +9327,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -9763,8 +10131,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -9778,8 +10148,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -9974,8 +10346,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -9989,8 +10363,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -10831,8 +11207,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -10846,8 +11224,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -10995,8 +11375,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -11010,8 +11392,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -11562,8 +11946,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -11577,8 +11963,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -11773,8 +12161,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -11788,8 +12178,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -12873,10 +13265,13 @@ { "granted": true, "key": "string", + "limit": 1, "provided_by": [ "personal" ], "quantity": 1, + "remaining": 1, + "used": 1, "value": true, "value_type": "boolean" } @@ -12890,6 +13285,7 @@ }, "name": "Example Name", "notification_settings": {}, + "oauth_client_name": "Example Name", "org": "org_0aBcDeFgHiJkLmNoPqRsTu", "org_kind": "company", "org_name": "Example Name", @@ -12965,6 +13361,11 @@ "example": {}, "type": "object" }, + "oauth_client_name": { + "description": "Registered display name of the verified OAuth client, when available. Not a verified vendor identity.", + "example": "Example Name", + "type": "string" + }, "org": { "description": "ID of the current organization (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", @@ -13076,6 +13477,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -13105,6 +13507,13 @@ "format": "date-time", "type": "string" }, + "expires_at": { + "description": "Absolute expiry time (RFC 3339). Null when no expiry is set.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "fields": { "description": "Map of field names to their current values as defined by the object's schema type.", "example": { @@ -13253,6 +13662,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -13303,13 +13713,15 @@ "type": "integer" }, "total_entries": { - "description": "Total number of custom objects matching the query across all pages.", + "description": "Total number of custom objects matching the query across all pages; null when include_count is false.", "example": 1, + "nullable": true, "type": "integer" }, "total_pages": { - "description": "Total number of pages available for the current query.", + "description": "Total number of pages available for the current query; null when include_count is false.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -13670,10 +14082,13 @@ { "granted": true, "key": "string", + "limit": 1, "provided_by": [ "personal" ], "quantity": 1, + "remaining": 1, + "used": 1, "value": true, "value_type": "boolean" } @@ -13780,10 +14195,13 @@ "example": { "granted": true, "key": "string", + "limit": 1, "provided_by": [ "personal" ], "quantity": 1, + "remaining": 1, + "used": 1, "value": true, "value_type": "boolean" }, @@ -13798,6 +14216,12 @@ "example": "string", "type": "string" }, + "limit": { + "description": "Unexpired metered allowance, including exhausted grants; null for boolean entitlements.", + "example": 1, + "nullable": true, + "type": "integer" + }, "provided_by": { "description": "Privacy-safe principal kinds that contribute to the effective value.", "example": [ @@ -13818,6 +14242,18 @@ "nullable": true, "type": "integer" }, + "remaining": { + "description": "Remaining metered allowance credits; null for boolean entitlements.", + "example": 1, + "nullable": true, + "type": "integer" + }, + "used": { + "description": "Signed metered consumption in the allowance window; may be negative after reversals. Null for boolean entitlements.", + "example": 1, + "nullable": true, + "type": "integer" + }, "value": { "description": "Merged entitlement value, or `null` when the key is not granted.", "example": true, @@ -13827,7 +14263,8 @@ "value_type": { "description": "Catalog type used to interpret `value`.", "enum": [ - "boolean" + "boolean", + "metered" ], "example": "boolean", "type": "string" @@ -15686,8 +16123,10 @@ "MediaVariant": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -15701,12 +16140,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -15719,6 +16166,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -15759,6 +16212,12 @@ }, "nullable": true }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -15771,6 +16230,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -15865,8 +16331,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -15880,8 +16348,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -16001,8 +16471,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -16016,8 +16488,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -16328,8 +16802,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -16343,8 +16819,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -17093,6 +17571,32 @@ ], "type": "object" }, + "Origin": { + "description": "Origin references.", + "example": { + "routine_id": "string", + "session_id": "string", + "thread_id": "string" + }, + "properties": { + "routine_id": { + "example": "string", + "nullable": true, + "type": "string" + }, + "session_id": { + "example": "string", + "nullable": true, + "type": "string" + }, + "thread_id": { + "example": "string", + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, "PaginatedReplies": { "description": "A paginated list of reply messages for a thread. The reply array is returned directly, not nested inside a `data` wrapper.", "example": { @@ -17175,8 +17679,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -17190,8 +17696,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -17282,6 +17790,22 @@ ], "type": "object" }, + "Payload": { + "description": "Question request payload.", + "example": { + "question": "string" + }, + "properties": { + "question": { + "example": "string", + "type": "string" + } + }, + "required": [ + "question" + ], + "type": "object" + }, "PresetConfig": { "description": "Configuration for a preset routine handler. Controls the agent's behavior, session persistence, and model selection for a given routine or chain step.", "example": { @@ -17675,6 +18199,32 @@ ], "type": "object" }, + "Refusal": { + "description": "The model declined to judge this question.", + "example": { + "id": "string", + "type": "refusal" + }, + "properties": { + "id": { + "example": "string", + "type": "string" + }, + "type": { + "default": "refusal", + "enum": [ + "refusal" + ], + "example": "refusal", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "type": "object" + }, "Relay": { "description": "Public relay authorization record.", "example": { @@ -17700,6 +18250,24 @@ ], "type": "object" }, + "Resolution": { + "description": "Answer or rejection reason; null before resolution.", + "example": { + "answer": "string", + "reason": "string" + }, + "properties": { + "answer": { + "example": "string", + "type": "string" + }, + "reason": { + "example": "string", + "type": "string" + } + }, + "type": "object" + }, "RoutinePreset": { "description": "A named preset that defines the execution model and constraints for a routine. Presets are shared definitions; individual routines reference a preset by name.", "example": { @@ -21251,6 +21819,35 @@ ], "type": "object" }, + "Summary": { + "description": "Kind-provided summary.", + "example": { + "lines": [ + "string" + ], + "title": "Example Title" + }, + "properties": { + "lines": { + "example": [ + "string" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "example": "Example Title", + "type": "string" + } + }, + "required": [ + "title", + "lines" + ], + "type": "object" + }, "SystemAccessToken": { "description": "A long-lived API credential associated with a system account, used to authenticate server-to-server requests.", "example": { @@ -21448,7 +22045,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -21544,7 +22141,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -21614,7 +22211,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -21667,7 +22264,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -21948,12 +22545,43 @@ ], "type": "object" }, + "TaskOwnershipJob": { + "description": "The background job accepted for a task ownership conversion.", + "example": { + "job_id": 1, + "projection_pending": true, + "status": "string" + }, + "properties": { + "job_id": { + "description": "Background job ID.", + "example": 1, + "type": "integer" + }, + "projection_pending": { + "description": "Completed transfers are still reaching task read models.", + "example": true, + "type": "boolean" + }, + "status": { + "description": "Current background job state.", + "example": "string", + "type": "string" + } + }, + "required": [ + "job_id", + "status" + ], + "type": "object" + }, "TaskSessionLease": { "description": "A task-session lease returned only to its matching holder.", "example": { "expires_at": "2024-01-01T00:00:00Z", "harness": "string", "lease_id": "string", + "lease_remaining_ms": 1, "renewed_at": "2024-01-01T00:00:00Z", "session_id": "string", "session_name": "Example Name", @@ -21977,6 +22605,11 @@ "example": "string", "type": "string" }, + "lease_remaining_ms": { + "description": "Milliseconds of lease left when the response was built, clamped at zero. A renewal made while more than half the lease remains appends no event and leaves the expiry unchanged, so clients derive their deadline from this value.", + "example": 1, + "type": "integer" + }, "renewed_at": { "description": "Server timestamp for the most recent claim, reclaim, or renewal.", "example": "2024-01-01T00:00:00Z", @@ -22010,6 +22643,7 @@ "session_name", "harness", "expires_at", + "lease_remaining_ms", "renewed_at", "task_status", "task_aggregate_version" @@ -23173,8 +23807,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -23188,8 +23824,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -23813,8 +24451,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -23828,8 +24468,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -24080,8 +24722,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -24095,8 +24739,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -27648,6 +28294,259 @@ "publishable_key", "bearer" ] + }, + "patch": { + "description": "Updates the computer's direct access grants. Requires permission to modify\nthe computer. Read grants allow retrieval and command execution; write grants\nalso allow management and deletion. Use acl.grants to replace grants, or\nacl.add/acl.remove to patch them. An empty acl.grants array revokes all direct\ngrants; omitting acl preserves them. Sharing does not add the computer to\nagent or thread lists.\n", + "operationId": "patch_api_v1_agent_computers__computer", + "parameters": [ + { + "description": "Computer ID (`cmp_...`).", + "example": "string", + "in": "path", + "name": "computer", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + } + }, + "properties": { + "acl": { + "description": "Access control list replacement or add/remove operations.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Empty response body. Returns HTTP 204 on success." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Computer management permission required" + }, + "404": { + "description": "Computer not found" + }, + "422": { + "description": "Invalid grants" + } + }, + "summary": "Update a computer", + "x-auth": [ + "publishable_key", + "bearer" + ] } }, "/api/v1/agent_computers/{computer}/exec": { @@ -28416,6 +29315,283 @@ ] } }, + "/api/v1/agent_requests": { + "get": { + "description": "Lists requests visible under the context policy, newest first. Filters are combined. Pagination is not a snapshot; later pages continue after the last returned request.", + "operationId": "get_api_v1_agent_requests", + "parameters": [ + { + "description": "Filter by agent ID.", + "example": "string", + "in": "query", + "name": "agent", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "open, resolved, rejected, expired or cancelled.", + "example": "string", + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Filter by registered kind.", + "example": "string", + "in": "query", + "name": "kind", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Page size, 1–100; default 25.", + "example": 1, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Opaque next_cursor from a prior page.", + "example": "string", + "in": "query", + "name": "cursor", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentRequestListResponse" + } + } + }, + "description": "A page of visible requests." + }, + "401": { + "description": "Unauthorized" + }, + "422": { + "description": "Invalid filter or cursor" + } + }, + "summary": "List agent requests", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/agent_requests/{agent_request}": { + "get": { + "description": "Uses the request context visibility and approver policy. Agents cannot resolve or reject requests.", + "operationId": "get_api_v1_agent_requests__agent_request", + "parameters": [ + { + "description": "Request ID (`arq_...`).", + "example": "string", + "in": "path", + "name": "agent_request", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentRequest" + } + } + }, + "description": "The request, without secret input." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Not an approver" + }, + "404": { + "description": "Request not found" + }, + "409": { + "description": "not_open or stale" + }, + "422": { + "description": "Input validation failed" + } + }, + "summary": "Show an agent request", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/agent_requests/{agent_request}/reject": { + "post": { + "description": "Uses the request context visibility and approver policy. Agents cannot resolve or reject requests.", + "operationId": "post_api_v1_agent_requests__agent_request_reject", + "parameters": [ + { + "description": "Request ID (`arq_...`).", + "example": "string", + "in": "path", + "name": "agent_request", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "reason": "string" + }, + "properties": { + "reason": { + "description": "Reason for rejecting the request.", + "example": "string", + "type": "string" + } + }, + "required": [ + "reason" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentRequest" + } + } + }, + "description": "The request, without secret input." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Not an approver" + }, + "404": { + "description": "Request not found" + }, + "409": { + "description": "not_open or stale" + }, + "422": { + "description": "Input validation failed" + } + }, + "summary": "Reject an agent request", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/agent_requests/{agent_request}/resolve": { + "post": { + "description": "Uses the request context visibility and approver policy. Agents cannot resolve or reject requests.", + "operationId": "post_api_v1_agent_requests__agent_request_resolve", + "parameters": [ + { + "description": "Request ID (`arq_...`).", + "example": "string", + "in": "path", + "name": "agent_request", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "input": {} + }, + "properties": { + "input": { + "description": "Kind-specific input. Secrets must use secret_value.", + "example": {}, + "type": "object" + } + }, + "required": [ + "input" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentRequest" + } + } + }, + "description": "The request, without secret input." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Not an approver" + }, + "404": { + "description": "Request not found" + }, + "409": { + "description": "not_open or stale" + }, + "422": { + "description": "Input validation failed" + } + }, + "summary": "Resolve an agent request", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/agent_routine_runs": { "get": { "description": "Returns a paginated list of agent routine runs across all routines visible to\nthe authenticated app scope. Results are ordered by creation time descending\n(most recent first).\n\nUse the `agent` parameter to filter runs to one or more specific agents. Use\n`status` to narrow results to runs in a particular state. Pagination is\nbidirectional: supply `after_cursor` to page forward through newer runs or\n`before_cursor` to page backward through older runs.\n\nThis endpoint requires an app scope. Requests without a valid app credential\nreturn 403.\n", @@ -30209,6 +31385,73 @@ ] } }, + "/api/v1/agent_sessions/{agent_session}/events": { + "get": { + "description": "Returns what the coding harness (Claude Code, Codex) running an agent\nsession on a computer has done so far: messages, tool use, turn\ncompletions, in order. Events arrive while the harness runs; page with\n`after`. The session stream endpoint pushes the same events live.\n", + "operationId": "get_api_v1_agent_sessions__agent_session_events", + "parameters": [ + { + "description": "Agent session ID (`ase_...`).", + "example": "string", + "in": "path", + "name": "agent_session", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Return events after this event ID (`cse_...`).", + "example": "string", + "in": "query", + "name": "after", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Maximum events to return (default 200, max 1000).", + "example": 1, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/AgentSessionEvent" + }, + "type": "array" + } + } + }, + "description": "Events in the order they happened." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden - app scope required" + }, + "404": { + "description": "Session not found" + } + }, + "summary": "List an agent session's harness events", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/agent_sessions/{agent_session}/message": { "post": { "description": "Appends a message to the inbox of the specified agent session. The agent\nreads inbox messages at the start of each turn; sending a message to a\n`\"waiting\"` session signals it to resume execution.\n\nUse `role` to identify the sender type. The default role is `\"user\"`.\nArbitrary key-value metadata may be attached to the message for tracking\nor display purposes.\n\nRequires an app-scoped API key. The session must belong to an agent owned\nby the authenticated app.\n", @@ -30297,7 +31540,7 @@ }, "/api/v1/agent_sessions/{agent_session}/stream": { "get": { - "description": "Opens a Server-Sent Events connection that emits a `session_update` event\nwhenever the agent session's status changes, replaying the current status on\nconnect and closing on a terminal status (`completed`, `failed`, `cancelled`).\n", + "description": "Opens a Server-Sent Events connection that emits a `session_update` event\nwhenever the agent session's status changes, replaying the current status on\nconnect and closing on a terminal status (`completed`, `failed`, `cancelled`).\nSessions that run a coding harness on a computer also emit a `session_event`\nfor each harness event (messages, tool use, turn completion) as it happens;\nlist earlier ones with the session events endpoint.\n", "operationId": "get_api_v1_agent_sessions__agent_session_stream", "parameters": [ { @@ -30316,7 +31559,14 @@ "content": { "text/event-stream": { "schema": { - "$ref": "#/components/schemas/AgentSession" + "oneOf": [ + { + "$ref": "#/components/schemas/AgentSession" + }, + { + "$ref": "#/components/schemas/AgentSessionEvent" + } + ] } } }, @@ -30333,6 +31583,9 @@ ], "x-sdk-streaming": { "events": { + "session_event": { + "$ref": "#/components/schemas/AgentSessionEvent" + }, "session_update": { "$ref": "#/components/schemas/AgentSession" } @@ -32491,6 +33744,34 @@ "application/json": { "schema": { "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "config": {}, "lookup_key": "string", "metadata": { @@ -32501,6 +33782,179 @@ "region": "string" }, "properties": { + "acl": { + "description": "Initial access control list.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, "config": { "description": "Provider-specific configuration for the computer. Supported keys vary by provider. A top-level `provider` takes precedence over `config.provider`.", "example": {}, @@ -32524,7 +33978,7 @@ "type": "string" }, "provider": { - "description": "Compute backend for the computer: `\"sprites\"` (Fly Sprites, the default) or `\"vercel\"` (Vercel Sandbox). Folded into `config.provider`.", + "description": "Compute backend for the computer: `\"sprites\"` (Fly Sprites, the default), `\"vercel\"` (Vercel Sandbox) or `\"e2b\"` (E2B). Folded into `config.provider`.", "example": "string", "type": "string" }, @@ -34709,6 +36163,81 @@ ] } }, + "/api/v1/agents/{agent}/self_solution": { + "get": { + "description": "Lazily snapshots an authorized agent into its single private, versioned Solution.", + "operationId": "get_api_v1_agents__agent_self_solution", + "parameters": [ + { + "description": "Agent ID or lookup key.", + "example": "string", + "in": "path", + "name": "agent", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Solution ID, solution version and stable lookup key.", + "example": { + "lookup_key": "string", + "solution_id": "string", + "solution_version": "string" + }, + "properties": { + "lookup_key": { + "example": "string", + "type": "string" + }, + "solution_id": { + "example": "string", + "type": "string" + }, + "solution_version": { + "example": "string", + "type": "string" + } + }, + "required": [ + "solution_id", + "solution_version", + "lookup_key" + ], + "type": "object" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Agent not found" + }, + "409": { + "description": "Self-solution conflict" + }, + "422": { + "description": "Unexportable dependency" + }, + "500": { + "description": "Self-solution bootstrap failed" + } + }, + "summary": "Ensure an agent's private self-solution", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/agents/{agent}/threads": { "post": { "description": "Creates a new thread owned by the specified agent. The thread is scoped to the\nagent's identity and is immediately available for messaging.\n\nThe authenticated caller must have access to the agent's parent app. If your\nAPI key is scoped to a specific app, pass that app's ID via the `app` parameter.\nAttempting to create a thread for an agent you cannot access returns 404.\n\nBy default the platform may send an automatic welcome message into the new\nthread. Pass `skip_welcome_message: true` to suppress this behavior.\n", @@ -36459,7 +37988,7 @@ }, "/api/v1/ai/evaluation/evaluations": { "post": { - "description": "Sends a shared `state` and a list of typed questions to an evaluation\nmodel and returns typed answers. This is not chat completion and not\nJSON-schema structured output: there is no generated text.\n\nEach question is a `boolean`, `choice`, or `score` object with its own\n`id`. Answers come back as the same three typed objects, each carrying\nthat `id`.\n\nThe authenticated app must have the `llm_calls` entitlement enabled on its\nplan. Requests that exceed the plan quota are rejected with `402`. Token\nusage is recorded against the authenticated app and organization.\n", + "description": "Sends a shared `state` and a list of typed questions to an evaluation\nmodel and returns typed answers. This is not chat completion and not\nJSON-schema structured output: there is no generated text.\n\nEach question is a `boolean`, `choice`, or `score` object with its own\n`id`. Answers carry that `id`, including a `refusal` answer containing\nonly `id` and `type` when the model declines to judge a question.\n\nImage input, labelled score levels, and refusal answers are model-dependent.\nImages are separate from `state` and use the chat completion image-part format.\nModels without image support reject image input with `400 unsupported_capability`.\n\nThe authenticated app must have the `llm_calls` entitlement enabled on its\nplan. Requests that exceed the plan quota are rejected with `402`. Token\nusage is recorded against the authenticated app and organization.\n", "operationId": "post_api_v1_ai_evaluation_evaluations", "parameters": [], "requestBody": { @@ -36467,11 +37996,68 @@ "application/json": { "schema": { "example": { + "images": [ + { + "image_data": "string", + "image_type": "string", + "image_url": "https://example.com", + "type": "image" + } + ], "model": "string", "questions": [], "session_id": "string" }, "properties": { + "images": { + "description": "Optional image content parts. Omitted or empty means no images. Requires model image support.", + "example": [ + { + "image_data": "string", + "image_type": "string", + "image_url": "https://example.com", + "type": "image" + } + ], + "items": { + "description": "An image content part in the chat completion input format.", + "example": { + "image_data": "string", + "image_type": "string", + "image_url": "https://example.com", + "type": "image" + }, + "properties": { + "image_data": { + "description": "Base64 image bytes; requires image_type.", + "example": "string", + "type": "string" + }, + "image_type": { + "description": "Image MIME type, such as image/png.", + "example": "string", + "type": "string" + }, + "image_url": { + "description": "Image URL; mutually exclusive with image_data.", + "example": "https://example.com", + "type": "string" + }, + "type": { + "enum": [ + "image" + ], + "example": "image", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "type": "array" + }, "model": { "description": "Evaluation model identifier. Omit to use the platform default.", "example": "string", @@ -36588,22 +38174,16 @@ { "description": "Place the state along ordered `criteria` levels.", "example": { - "criteria": [ - "string" - ], + "criteria": [], "id": "frustration", "instructions": "string", "type": "score" }, "properties": { "criteria": { - "description": "At least two ordered level descriptions.", - "example": [ - "string" - ], - "items": { - "type": "string" - }, + "description": "At least two ordered levels, each a string or an object with string label and description.", + "example": [], + "items": {}, "type": "array" }, "id": { @@ -36665,7 +38245,7 @@ } } }, - "description": "Typed answers as a list of boolean, choice, or score objects, plus model and usage." + "description": "Typed boolean, choice, score, or refusal answers, plus model and usage." }, "400": { "description": "Bad request" @@ -37661,6 +39241,34 @@ "application/json": { "schema": { "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "string", "artifact": {}, "description": "An example description.", @@ -37674,13 +39282,185 @@ "idempotency_key": "string", "name": "Example Name", "org": "string", - "permissions": {}, "system": true, "team": "string", "thread": "string", "user": "string" }, "properties": { + "acl": { + "description": "Initial access control list. Grants add read or write access beyond the owner.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, "agent": { "description": "Agent ID (`agt_...`) to associate with the artifact.", "example": "string", @@ -37756,11 +39536,6 @@ "example": "string", "type": "string" }, - "permissions": { - "description": "Optional artifact permissions map.", - "example": {}, - "type": "object" - }, "system": { "description": "When true, create a system-owned artifact. Mutually exclusive with `team` and `user`.", "example": true, @@ -37914,6 +39689,34 @@ "application/json": { "schema": { "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "description": "An example description.", "file": { "data": "string", @@ -37929,6 +39732,179 @@ "name": "Example Name" }, "properties": { + "acl": { + "description": "Access control list replacement (`grants`) or add/remove operations. Omit to leave grants unchanged. ACL-only updates do not increment the content version.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, "description": { "description": "New description for the artifact. Omit to leave the existing description unchanged.", "example": "An example description.", @@ -41655,6 +43631,36 @@ "type": "string" } }, + { + "description": "JSON containment predicates on fields, applied before pagination and counting.", + "example": {}, + "in": "query", + "name": "field_filters", + "required": false, + "schema": { + "type": "object" + } + }, + { + "description": "Only system-owned objects (no user, team, agent or thread owner). Visibility is unchanged.", + "example": true, + "in": "query", + "name": "system_only", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Top-level JSON field for descending text order, with ID tie-breaker. Full-text relevance takes precedence.", + "example": "string", + "in": "query", + "name": "order_by_field", + "required": false, + "schema": { + "type": "string" + } + }, { "description": "Exact `row_key` value to match. When supplied, only objects with this partition key are returned.", "example": "string", @@ -41785,6 +43791,17 @@ "type": "integer" } }, + { + "description": "Include only objects updated at or after this ISO 8601 timestamp. Applies before pagination and counting.", + "example": "2024-01-01T00:00:00Z", + "in": "query", + "name": "updated_since", + "required": false, + "schema": { + "format": "date-time", + "type": "string" + } + }, { "description": "Number of objects per page. Defaults to `25`; maximum is `100`.", "example": 1, @@ -41794,6 +43811,16 @@ "schema": { "type": "integer" } + }, + { + "description": "Include total_entries and total_pages (default true). When false, totals are null, has_next uses one extra row, and pages beyond the end return an empty list without clamping. The page offset must fit PostgreSQL's signed 64-bit integer range.", + "example": true, + "in": "query", + "name": "include_count", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { @@ -41866,6 +43893,7 @@ }, "agent": "string", "config": "string", + "expires_at": "2024-01-01T00:00:00Z", "fields": {}, "org": "string", "schema_key": "string", @@ -42059,6 +44087,13 @@ "example": "string", "type": "string" }, + "expires_at": { + "description": "Absolute expiry time in RFC 3339 format. Pass null to clear; omit to leave unchanged on update.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "fields": { "description": "Key-value map of field values for the new object. Must conform to the schema's field definitions. Omit to create an object with all fields at their default or null values.", "example": {}, @@ -42278,6 +44313,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -42327,6 +44363,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -42525,6 +44562,13 @@ "format": "date-time", "type": "string" }, + "expires_at": { + "description": "Absolute expiry time (RFC 3339). Null when no expiry is set.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "fields": { "description": "Map of field names to their current values as defined by the object's schema type.", "example": { @@ -42785,6 +44829,7 @@ ] }, "expected_version": 1, + "expires_at": "2024-01-01T00:00:00Z", "field_ops": {}, "fields": {}, "idempotency_key": "string", @@ -42969,6 +45014,13 @@ "example": 1, "type": "integer" }, + "expires_at": { + "description": "Absolute expiry time in RFC 3339 format. Pass null to clear; omit to leave unchanged on update.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "field_ops": { "description": "Granular array operations to apply per field (e.g. append, prepend, remove). A field must not appear in both `fields` and `field_ops`.", "example": {}, @@ -43034,6 +45086,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -43083,6 +45136,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -43281,6 +45335,13 @@ "format": "date-time", "type": "string" }, + "expires_at": { + "description": "Absolute expiry time (RFC 3339). Null when no expiry is set.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "fields": { "description": "Map of field names to their current values as defined by the object's schema type.", "example": { @@ -48099,7 +50160,11 @@ "summary": "List a user's notifications", "x-auth": [ "publishable_key", - "bearer" + "bearer", + "device_flow" + ], + "x-required-scopes": [ + "notifications:read" ] } }, @@ -48128,7 +50193,7 @@ }, "/api/v1/notifications/send": { "post": { - "description": "Delivers a custom-typed notification to one of the calling app's users.\nApps define notification types by declaring `NotificationType` config objects\nin their bundle (one per `lookup_key`). Supply the type as\n`\"custom:\"` and provide a `data` map that is merged with\nplatform-provided context to render the notification's display fields.\n\nOnly app-scoped tokens may call this endpoint — user tokens are rejected with\n403. The app scope is stamped onto the notification automatically; an app\ncannot target recipients outside its tenant. Built-in platform types such as\n`\"app_info\"` and `\"billing_alert\"` are not accepted here.\n\nPass `idempotency_key` to deduplicate sends. If you call this endpoint twice\nwith the same `idempotency_key` for the same recipient, the second call\nreturns the original notification without creating a duplicate. The key is\nscoped to the calling app, so the same raw key used by different apps cannot\ncollide.\n", + "description": "Delivers a custom-typed notification to one of the calling app's users.\nApps define notification types by declaring `NotificationType` config objects\nin their bundle (one per `lookup_key`). Supply the type as\n`\"custom:\"` and provide a `data` map that is merged with\nplatform-provided context to render the notification's display fields.\n\nOnly app-scoped tokens may call this endpoint — user tokens are rejected with\n403. The app scope is stamped onto the notification automatically; an app\ncannot target recipients outside its tenant. Built-in platform types such as\n`\"app_info\"` and `\"billing_alert\"` are not accepted here.\n\nThe `notifications.send` script binding also accepts the viewer a script runs\nas: a user, an agent, or a team's system viewer. Such a sender may notify only\na user it can see in its own organization and sandbox. When the sender is a\nuser, the recipient must also be able to see the sender. An agent cannot see\nuser records, so an agent sender must name a source message: it may then\nnotify a user in its own organization and sandbox who can read that message.\n\nPass `thread` and `message` together to name the message the notification is\nabout. The send is then refused unless that message is in that thread and both\nthe sender and the recipient can read it, so a notification cannot quote a\nmessage its recipient cannot open.\n\nPass `idempotency_key` to deduplicate sends. If you call this endpoint twice\nwith the same `idempotency_key` for the same recipient, the second call\nreturns the original notification without creating a duplicate. The key is\nscoped to the calling app, so the same raw key used by different apps cannot\ncollide.\n", "operationId": "post_api_v1_notifications_send", "parameters": [], "requestBody": { @@ -48138,6 +50203,8 @@ "example": { "data": {}, "idempotency_key": "string", + "message": "string", + "thread": "string", "type": "string", "user": "string" }, @@ -48152,6 +50219,16 @@ "example": "string", "type": "string" }, + "message": { + "description": "Source message (`msg_...`) that the sender and the recipient must both be able to read.", + "example": "string", + "type": "string" + }, + "thread": { + "description": "Thread (`thr_...`) of the source message. Requires `message`.", + "example": "string", + "type": "string" + }, "type": { "description": "Custom notification type identifier in the form `\"custom:\"`, where `` matches a `NotificationType` config declared in the calling app's bundle.", "example": "string", @@ -48247,7 +50324,11 @@ "summary": "Get the unread notification count", "x-auth": [ "publishable_key", - "bearer" + "bearer", + "device_flow" + ], + "x-required-scopes": [ + "notifications:read" ] } }, @@ -48321,7 +50402,11 @@ "summary": "Mark a notification as read", "x-auth": [ "publishable_key", - "bearer" + "bearer", + "device_flow" + ], + "x-required-scopes": [ + "notifications:write" ] } }, @@ -48594,6 +50679,34 @@ "before_cursor": "string", "data": [ { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -48641,6 +50754,34 @@ "data": { "example": [ { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -48674,6 +50815,34 @@ "items": { "description": "A versioned artifact produced or managed by an agent, such as a generated file, report, or code output.", "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -48704,6 +50873,180 @@ "version": 1 }, "properties": { + "acl": { + "description": "Access control list for the artifact. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions` (`read`, `write`). `null` when the artifact has no grants or the viewer is not its owner.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "nullable": true, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, "agent": { "description": "ID of the agent that produced this artifact (`agt_...`). `null` if not agent-produced.", "example": "agt_0aBcDeFgHiJkLmNoPqRsTu", @@ -49057,6 +51400,4702 @@ ] } }, + "/api/v1/orgs/{org}/task_epics": { + "get": { + "description": "Groups org-owned tasks by their exact epic label, ordered by label. Closed tasks include cancelled tasks, but cancelled prerequisites still block. Source filters select the tasks summarized; blockers outside that selection still affect readiness. Root ranking is capped per epic and root_blockers_partial is true when that graph is truncated. No epic entity is created.", + "operationId": "get_api_v1_orgs__org_task_epics", + "parameters": [ + { + "description": "Organization ID (`org_...`) owning the tasks.", + "example": "string", + "in": "path", + "name": "org", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Exact source scope; supply all three source fields.", + "example": "string", + "in": "query", + "name": "source_scope", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Exact source type.", + "example": "string", + "in": "query", + "name": "source_type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Exact source ID.", + "example": "string", + "in": "query", + "name": "source_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Exact highest open priority, from 0 to 4.", + "example": 1, + "in": "query", + "name": "top_priority", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Include epics with no non-closed tasks; defaults to false.", + "example": true, + "in": "query", + "name": "include_closed", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Maximum epics; defaults to 50, capped at 100.", + "example": 1, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Opaque forward cursor from the preceding page.", + "example": "string", + "in": "query", + "name": "after_cursor", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": { + "after_cursor": "string", + "before_cursor": "string", + "data": [ + { + "blocked_count": 1, + "counts": {}, + "epic": "string", + "next_ready": [ + { + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + } + ], + "root_blockers": [ + { + "downstream_count": 1, + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + } + ], + "root_blockers_partial": true, + "top_open_priority": 1, + "updated_at": "2024-01-01T00:00:00Z" + } + ], + "has_more": true, + "no_epic_open_count": 1 + }, + "properties": { + "after_cursor": { + "example": "string", + "nullable": true, + "type": "string" + }, + "before_cursor": { + "example": "string", + "nullable": true, + "type": "string" + }, + "data": { + "example": [ + { + "blocked_count": 1, + "counts": {}, + "epic": "string", + "next_ready": [ + { + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + } + ], + "root_blockers": [ + { + "downstream_count": 1, + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + } + ], + "root_blockers_partial": true, + "top_open_priority": 1, + "updated_at": "2024-01-01T00:00:00Z" + } + ], + "items": { + "description": "Read-only progress and scheduling summary for an epic label.", + "example": { + "blocked_count": 1, + "counts": {}, + "epic": "string", + "next_ready": [ + { + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + } + ], + "root_blockers": [ + { + "downstream_count": 1, + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + } + ], + "root_blockers_partial": true, + "top_open_priority": 1, + "updated_at": "2024-01-01T00:00:00Z" + }, + "properties": { + "blocked_count": { + "example": 1, + "type": "integer" + }, + "counts": { + "description": "Task counts keyed by status, including closed tasks.", + "example": {}, + "type": "object" + }, + "epic": { + "example": "string", + "type": "string" + }, + "next_ready": { + "example": [ + { + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + } + ], + "items": { + "description": "An open task with no unfinished prerequisite or active lease.", + "example": { + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + }, + "properties": { + "id": { + "example": "string", + "type": "string" + }, + "name": { + "example": "Example Name", + "type": "string" + }, + "priority": { + "example": 1, + "type": "integer" + }, + "status": { + "example": "string", + "type": "string" + } + }, + "required": [ + "id", + "name", + "status", + "priority" + ], + "type": "object" + }, + "type": "array" + }, + "root_blockers": { + "example": [ + { + "downstream_count": 1, + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + } + ], + "items": { + "description": "An unblocked root and the number of open tasks downstream within its epic.", + "example": { + "downstream_count": 1, + "id": "string", + "name": "Example Name", + "priority": 1, + "status": "string" + }, + "properties": { + "downstream_count": { + "example": 1, + "type": "integer" + }, + "id": { + "example": "string", + "type": "string" + }, + "name": { + "example": "Example Name", + "type": "string" + }, + "priority": { + "example": 1, + "type": "integer" + }, + "status": { + "example": "string", + "type": "string" + } + }, + "required": [ + "id", + "name", + "status", + "priority", + "downstream_count" + ], + "type": "object" + }, + "type": "array" + }, + "root_blockers_partial": { + "description": "True when root ranking used a truncated in-epic graph.", + "example": true, + "type": "boolean" + }, + "top_open_priority": { + "example": 1, + "nullable": true, + "type": "integer" + }, + "updated_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "epic", + "counts", + "blocked_count", + "updated_at", + "root_blockers", + "root_blockers_partial", + "next_ready" + ], + "type": "object" + }, + "type": "array" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "no_epic_open_count": { + "example": 1, + "type": "integer" + } + }, + "required": [ + "data", + "has_more", + "no_epic_open_count" + ], + "type": "object" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Organization not found" + }, + "422": { + "description": "Invalid filters or owner context" + } + }, + "summary": "List an organization's epic summaries", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/orgs/{org}/tasks": { + "get": { + "description": "Returns org-owned tasks for the specified organization: rows with the org\ntenant and no narrower user/team/agent scope. Explicitly personal, team, or\nagent tasks are excluded here; list those via the user/team collections or\nfetch them directly when authorized.\n\nEvery organization member may list. App-scoped developer and\nserver-to-server callers supply the org in the route.\n", + "operationId": "get_api_v1_orgs__org_tasks", + "parameters": [ + { + "description": "Organization ID (`org_...`) whose org-owned tasks should be returned.", + "example": "string", + "in": "path", + "name": "org", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Filter tasks by status. One of `\"open\"`, `\"in_progress\"`, `\"in_review\"`, or `\"done\"`. Omit to return tasks in all statuses.", + "example": "string", + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Filter tasks assigned to a specific user. Provide the user's public ID (`usr_...`).", + "example": "string", + "in": "query", + "name": "owner_user", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Filter tasks assigned to a specific agent. Provide the agent's public ID (`agi_...`).", + "example": "string", + "in": "query", + "name": "owner_agent", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Filter tasks by priority, from 0 (highest) to 4 (lowest).", + "example": 1, + "in": "query", + "name": "priority", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Return only tasks carrying this tag (matched against the canonical lowercase form).", + "example": "string", + "in": "query", + "name": "tag", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only subtasks of the given task (`tsk_...`), or pass `none` to return only top-level tasks.", + "example": "string", + "in": "query", + "name": "parent", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks whose source matches this container. Must be supplied with `source_type` and `source_id`.", + "example": "string", + "in": "query", + "name": "source_scope", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks whose source matches this object kind. Must be supplied with the other source filters.", + "example": "string", + "in": "query", + "name": "source_type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks whose source matches this object identity. Must be supplied with the other source filters.", + "example": "string", + "in": "query", + "name": "source_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks with this exact epic label.", + "example": "string", + "in": "query", + "name": "epic", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Restrict results to tasks whose name or description contains this string.", + "example": "string", + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Sort key. One of `\"created\"` (default — most recently created first), `\"due_date\"` (soonest due first; tasks without a due date always sort last), or `\"priority\"` (most urgent first). Ties break by most recently created.", + "example": "string", + "in": "query", + "name": "sort", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Sort direction, `\"asc\"` or `\"desc\"`. Defaults to `\"desc\"` for `created` and `\"asc\"` for `due_date` and `priority`.", + "example": "string", + "in": "query", + "name": "order", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks with a due date strictly before this ISO 8601 datetime (`2026-08-01T00:00:00Z`) or date (`2026-08-01`, meaning midnight UTC). Tasks without a due date are excluded.", + "example": "string", + "in": "query", + "name": "due_before", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks with a due date strictly after this ISO 8601 datetime or date. Tasks without a due date are excluded.", + "example": "string", + "in": "query", + "name": "due_after", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "When `true`, return only overdue tasks: a due date before the current UTC day and a status other than `\"done\"`. A task due today is not overdue.", + "example": true, + "in": "query", + "name": "overdue", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "When true, return only open tasks with no unfinished blockers and no active session lease. This is a projection snapshot; claim a lease before starting work.", + "example": true, + "in": "query", + "name": "ready", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "When true, return paused, failed, or in-progress tasks with no lease or a past lease expiry.", + "example": true, + "in": "query", + "name": "attention", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Maximum number of tasks to return. Capped at 100.", + "example": 1, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Opaque cursor returned by the previous page.", + "example": "string", + "in": "query", + "name": "after_cursor", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Filtered list of tasks for the organization.", + "example": { + "after_cursor": "string", + "before_cursor": "string", + "data": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + ], + "has_more": true + }, + "properties": { + "after_cursor": { + "example": "string", + "nullable": true, + "type": "string" + }, + "before_cursor": { + "example": "string", + "nullable": true, + "type": "string" + }, + "data": { + "description": "Array of task objects matching the requested filters.", + "example": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + ], + "items": { + "description": "A task representing a unit of work, optionally assignable to a user or agent.", + "example": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "properties": { + "agent": { + "description": "ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "aggregate_version": { + "description": "Event-stream version for optimistic update fencing. Pass this value as `expected_version` on an update to reject concurrent writes.", + "example": 1, + "nullable": true, + "type": "integer" + }, + "blocked_by_count": { + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "example": 1, + "type": "integer" + }, + "closed_at": { + "description": "When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "comments_count": { + "description": "Total number of comments posted on this task.", + "example": 1, + "type": "integer" + }, + "created_at": { + "description": "When the task was created (ISO 8601).", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "created_by_actor": { + "description": "Resolved creator details including `id`, `name`, `alias`, and `profile_picture`. `null` if no creator is set or the creator cannot be resolved (e.g. creating agent was deleted).", + "example": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "nullable": true, + "properties": { + "alias": { + "description": "Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.", + "example": "alice", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Composite actor identifier. Format is `\"user-\"` for human users or `\"agent-\"` for agents.", + "example": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "nullable": true, + "type": "string" + }, + "name": { + "description": "Display name of the actor shown in the UI. `null` if no name is set.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "profile_picture": { + "description": "Profile picture for the actor. `null` if the actor has no profile picture.", + "example": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "nullable": true, + "properties": { + "file": { + "description": "ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.", + "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "height": { + "description": "Height of the image in pixels. `null` if not known.", + "example": 600, + "nullable": true, + "type": "integer" + }, + "media": { + "description": "ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.", + "example": "med_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "mime_type": { + "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", + "example": "application/json", + "nullable": true, + "type": "string" + }, + "refresh_url": { + "description": "Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "url": { + "description": "Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "width": { + "description": "Width of the image in pixels. `null` if not known.", + "example": 800, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "created_by_agent": { + "description": "ID of the agent that created this task (`agi_...`). `null` if the task was created by a human user, or if the creating agent was later deleted.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "ID of the user who created this task (`usr_...`). `null` if the task was created by an agent, or if creator provenance was cleared after the creator was deleted.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "current_lease": { + "description": "Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included.", + "example": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "nullable": true, + "properties": { + "expires_at": { + "description": "Server-calculated lease expiry in ISO 8601 format.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "harness": { + "description": "Bounded harness identifier for the coding session.", + "example": "string", + "type": "string" + }, + "session_name": { + "description": "Display name supplied by the coding session that holds the lease.", + "example": "Example Name", + "type": "string" + } + }, + "required": [ + "session_name", + "harness", + "expires_at" + ], + "type": "object" + }, + "description": { + "description": "Long-form description or notes for the task. `null` if no description has been provided.", + "example": "An example description.", + "nullable": true, + "type": "string" + }, + "due_date": { + "description": "Date and time by which the task should be completed (ISO 8601). `null` if no due date is set.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "epic": { + "description": "Free-form grouping label. `null` when the task is not in an epic.", + "example": "string", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Task ID (`tsk_...`).", + "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_blocked": { + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", + "example": true, + "type": "boolean" + }, + "is_stalled": { + "description": "True exactly when status is in_progress and the task has no lease or its lease expiry is in the past. Derived at read time from status and lease expiry, including on unannotated reads.", + "example": true, + "type": "boolean" + }, + "links": { + "description": "Key-value map of named URLs or references associated with the task. Returns an empty object when no links have been set.", + "example": { + "key": "value" + }, + "type": "object" + }, + "metadata": { + "description": "Arbitrary key-value map of application-specific data stored alongside the task. Returns an empty object when no metadata has been set.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Human-readable title of the task.", + "example": "Example Name", + "type": "string" + }, + "org": { + "description": "ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "owner_actor": { + "description": "Resolved owner details including `id`, `name`, `alias`, and `profile_picture`. `null` if the task is unassigned or the owner cannot be resolved (e.g. assigned agent was deleted).", + "example": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "nullable": true, + "properties": { + "alias": { + "description": "Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.", + "example": "alice", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Composite actor identifier. Format is `\"user-\"` for human users or `\"agent-\"` for agents.", + "example": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "nullable": true, + "type": "string" + }, + "name": { + "description": "Display name of the actor shown in the UI. `null` if no name is set.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "profile_picture": { + "description": "Profile picture for the actor. `null` if the actor has no profile picture.", + "example": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "nullable": true, + "properties": { + "file": { + "description": "ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.", + "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "height": { + "description": "Height of the image in pixels. `null` if not known.", + "example": 600, + "nullable": true, + "type": "integer" + }, + "media": { + "description": "ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.", + "example": "med_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "mime_type": { + "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", + "example": "application/json", + "nullable": true, + "type": "string" + }, + "refresh_url": { + "description": "Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "url": { + "description": "Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "width": { + "description": "Width of the image in pixels. `null` if not known.", + "example": 800, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "owner_agent": { + "description": "ID of the agent assigned as owner (`agi_...`). `null` if the owner is a human user, the task is unassigned, or the assigned agent was deleted.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "owner_user": { + "description": "ID of the user assigned as owner (`usr_...`). `null` if the owner is an agent, the task is unassigned, or the assigned agent was deleted.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "parent": { + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", + "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "priority": { + "description": "Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set.", + "example": 2, + "type": "integer" + }, + "project_id": { + "description": "Optional project ID (`prj_...`). Membership does not change task visibility.", + "example": "string", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "source_id": { + "description": "Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source.", + "example": "string", + "nullable": true, + "type": "string" + }, + "source_scope": { + "description": "Container of the work this task is about (for example `github.com`). `null` when the task has no source. Set together with `source_type` and `source_id`.", + "example": "string", + "nullable": true, + "type": "string" + }, + "source_type": { + "description": "Kind of source object (for example `repository`). `null` when the task has no source.", + "example": "string", + "nullable": true, + "type": "string" + }, + "stalled_since": { + "description": "Lease expiry for a stalled task, or its last update when no lease expiry exists. Null when not stalled.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Current status of the task. One of `\"open\"`, `\"in_progress\"`, `\"in_review\"`, `\"paused\"`, `\"failed\"`, `\"superseding\"`, `\"done\"`, or `\"cancelled\"`.", + "example": "open", + "type": "string" + }, + "subtasks_count": { + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "example": 1, + "type": "integer" + }, + "tags": { + "description": "Labels for grouping and filtering, stored lowercase and de-duplicated. Empty array when untagged.", + "example": [ + "string" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "target_binary": { + "description": "Binary that must run this work (for example `my-cli`). A worker should take the task only when its own `target_binary` build is at least `target_version`. `null` when the task has no target. Set together with `target_version`.", + "example": "string", + "nullable": true, + "type": "string" + }, + "target_version": { + "description": "Minimum semantic version of `target_binary` that can run this work (for example `0.48.9`), in canonical `MAJOR.MINOR.PATCH[-prerelease][+build]` form. `null` when the task has no target.", + "example": "string", + "nullable": true, + "type": "string" + }, + "team": { + "description": "ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "thread": { + "description": "ID of the thread this task is bound to (`thr_...`) - the conversation it was filed from, or the thread passed at creation. `null` for tasks not tied to a thread.", + "example": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "When the task was last modified (ISO 8601).", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "user": { + "description": "ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "type": "array" + }, + "has_more": { + "example": true, + "type": "boolean" + } + }, + "required": [ + "data", + "has_more" + ], + "type": "object" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Organization not found" + }, + "422": { + "description": "Invalid filters" + } + }, + "summary": "List an organization's tasks", + "x-auth": [ + "publishable_key", + "bearer", + "device_flow" + ], + "x-required-scopes": [ + "tasks:read" + ] + }, + "post": { + "description": "Creates a new org-owned task (org tenant, no narrower user/team/agent\nscope) and returns the full task object. User-authenticated calls are\nattributed to the authenticated user or agent. App-scoped developer and\nserver-to-server callers must provide an explicit `user` or `agent` actor\nfor the organization. Every referenced principal is validated against the\napp and organization before creation.\n", + "operationId": "post_api_v1_orgs__org_tasks", + "parameters": [ + { + "description": "Organization ID (`org_...`). The task will be owned by this organization.", + "example": "string", + "in": "path", + "name": "org", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "agent": "string", + "task": { + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "billing-cadence", + "id": "string", + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "owner_agent": "string", + "owner_user": "string", + "parent": "tsk_01j3k5m7n9p2r4s6t8v0w1x2", + "priority": 2, + "project_id": "string", + "source_id": "ArchAstro/firstlanding", + "source_scope": "github.com", + "source_type": "repository", + "status": "open", + "tags": [ + "backend", + "q3-launch" + ], + "target_binary": "my-cli", + "target_version": "0.48.9", + "thread": "thr_01j3k5m7n9p2r4s6t8v0w1x2" + }, + "user": "string" + }, + "properties": { + "agent": { + "description": "Explicit acting agent (`agi_...`) for a developer or server-to-server call. Mutually exclusive with an acting `user`; the agent must belong to the organization.", + "example": "string", + "type": "string" + }, + "task": { + "description": "Attributes for the task to create. `name` is required; all other fields are optional.", + "example": { + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "billing-cadence", + "id": "string", + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "owner_agent": "string", + "owner_user": "string", + "parent": "tsk_01j3k5m7n9p2r4s6t8v0w1x2", + "priority": 2, + "project_id": "string", + "source_id": "ArchAstro/firstlanding", + "source_scope": "github.com", + "source_type": "repository", + "status": "open", + "tags": [ + "backend", + "q3-launch" + ], + "target_binary": "my-cli", + "target_version": "0.48.9", + "thread": "thr_01j3k5m7n9p2r4s6t8v0w1x2" + }, + "properties": { + "description": { + "description": "Optional long-form description or notes for the task. Supports plain text.", + "example": "An example description.", + "type": "string" + }, + "due_date": { + "description": "Date and time by which the task should be completed (ISO 8601). Omit to create the task without a due date.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "epic": { + "description": "Optional free-form grouping label.", + "example": "billing-cadence", + "type": "string" + }, + "id": { + "description": "Optional caller-generated task public ID (`tsk_...`). Persist it before creating a task when creation must survive a lost response. An existing ID returns 409 without modifying the task; read the task by ID to reconcile. Omit for a server-generated ID.", + "example": "string", + "type": "string" + }, + "links": { + "description": "Arbitrary key-value map of named URLs or references associated with the task (e.g. external ticket links).", + "example": { + "key": "value" + }, + "type": "object" + }, + "metadata": { + "description": "Arbitrary key-value map for storing application-specific data alongside the task. Omit to create the task with no metadata.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Human-readable title for the task.", + "example": "Example Name", + "type": "string" + }, + "owner_agent": { + "description": "ID of the agent to assign as owner (`agi_...`). Mutually exclusive with `owner_user`; omit to leave the task unassigned.", + "example": "string", + "type": "string" + }, + "owner_user": { + "description": "ID of the user to assign as owner (`usr_...`). Mutually exclusive with `owner_agent`; omit to leave the task unassigned.", + "example": "string", + "type": "string" + }, + "parent": { + "description": "Create this task as a subtask of an existing top-level task (`tsk_...`). Subtasks nest exactly one level.", + "example": "tsk_01j3k5m7n9p2r4s6t8v0w1x2", + "type": "string" + }, + "priority": { + "description": "Priority level from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when omitted.", + "example": 2, + "type": "integer" + }, + "project_id": { + "description": "Optional project ID (`prj_...`). Pass null to clear it.", + "example": "string", + "type": "string" + }, + "source_id": { + "description": "Source object identity (for example `ArchAstro/firstlanding`).", + "example": "ArchAstro/firstlanding", + "type": "string" + }, + "source_scope": { + "description": "Container of the work this task is about (for example `github.com`). Must be supplied with `source_type` and `source_id`.", + "example": "github.com", + "type": "string" + }, + "source_type": { + "description": "Kind of source object (for example `repository`).", + "example": "repository", + "type": "string" + }, + "status": { + "description": "Initial status for the task. One of `\"open\"`, `\"in_progress\"`, `\"in_review\"`, `\"paused\"`, `\"failed\"`, `\"superseding\"`, `\"done\"`, or `\"cancelled\"`. Defaults to `\"open\"` when omitted.", + "example": "open", + "type": "string" + }, + "tags": { + "description": "Labels for grouping and filtering (max 20, each up to 40 characters). Stored canonically: lowercase, trimmed, de-duplicated.", + "example": [ + "backend", + "q3-launch" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "target_binary": { + "description": "Binary that must run this work, as a lowercase identifier of 1-64 characters (letters, digits, `.`, `_`, `-`; for example `my-cli`). Must be supplied with `target_version`.", + "example": "my-cli", + "type": "string" + }, + "target_version": { + "description": "Minimum semantic version of `target_binary` that can run this work (`MAJOR.MINOR.PATCH` with optional prerelease and build, no leading `v`). Must be supplied with `target_binary`.", + "example": "0.48.9", + "type": "string" + }, + "thread": { + "description": "Bind the task to a thread (`thr_...`) owned by the same team or user as the task. A bound task appears in that thread's task scope, exactly like a task filed from inside the conversation. Omit for a task not tied to a conversation.", + "example": "thr_01j3k5m7n9p2r4s6t8v0w1x2", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "user": { + "description": "Explicit acting user (`usr_...`) for a developer or server-to-server call. Mutually exclusive with an acting `agent`.", + "example": "string", + "type": "string" + } + }, + "required": [ + "task" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + }, + "description": "The newly created task." + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Organization not found" + }, + "409": { + "description": "Conflict" + }, + "422": { + "description": "Validation error" + } + }, + "summary": "Create a task for an organization", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/orgs/{org}/tasks/blocker_cycles": { + "get": { + "description": "Runs an on-demand diagnostic over unfinished org-owned tasks for the\nspecified organization and returns a forward cursor-paginated page of\ncomplete cyclic blocker components. Detection is bounded to owners with at\nmost 100 unfinished tasks. This endpoint is read-only: cycles do not prevent\ntask updates, lease acquisition, or completion.\n", + "operationId": "get_api_v1_orgs__org_tasks_blocker_cycles", + "parameters": [ + { + "description": "Organization ID (`org_...`) whose org-owned tasks are diagnosed.", + "example": "string", + "in": "path", + "name": "org", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Maximum cycle components to return. Defaults to 50; maximum is 100.", + "example": 1, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Opaque cursor returned by the preceding page.", + "example": "string", + "in": "query", + "name": "after_cursor", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "On-demand task blocker cycle diagnostics.", + "example": { + "after_cursor": "string", + "before_cursor": "string", + "data": [ + { + "tasks": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + ] + } + ], + "has_more": true + }, + "properties": { + "after_cursor": { + "example": "string", + "type": "string" + }, + "before_cursor": { + "example": "string", + "type": "string" + }, + "data": { + "example": [ + { + "tasks": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + ] + } + ], + "items": { + "description": "A strongly connected component of unfinished task blocker edges.", + "example": { + "tasks": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + ] + }, + "properties": { + "tasks": { + "description": "Every unfinished task in this cyclic blocker component.", + "example": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + ], + "items": { + "description": "A task representing a unit of work, optionally assignable to a user or agent.", + "example": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "properties": { + "agent": { + "description": "ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "aggregate_version": { + "description": "Event-stream version for optimistic update fencing. Pass this value as `expected_version` on an update to reject concurrent writes.", + "example": 1, + "nullable": true, + "type": "integer" + }, + "blocked_by_count": { + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "example": 1, + "type": "integer" + }, + "closed_at": { + "description": "When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "comments_count": { + "description": "Total number of comments posted on this task.", + "example": 1, + "type": "integer" + }, + "created_at": { + "description": "When the task was created (ISO 8601).", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "created_by_actor": { + "description": "Resolved creator details including `id`, `name`, `alias`, and `profile_picture`. `null` if no creator is set or the creator cannot be resolved (e.g. creating agent was deleted).", + "example": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "nullable": true, + "properties": { + "alias": { + "description": "Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.", + "example": "alice", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Composite actor identifier. Format is `\"user-\"` for human users or `\"agent-\"` for agents.", + "example": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "nullable": true, + "type": "string" + }, + "name": { + "description": "Display name of the actor shown in the UI. `null` if no name is set.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "profile_picture": { + "description": "Profile picture for the actor. `null` if the actor has no profile picture.", + "example": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "nullable": true, + "properties": { + "file": { + "description": "ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.", + "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "height": { + "description": "Height of the image in pixels. `null` if not known.", + "example": 600, + "nullable": true, + "type": "integer" + }, + "media": { + "description": "ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.", + "example": "med_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "mime_type": { + "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", + "example": "application/json", + "nullable": true, + "type": "string" + }, + "refresh_url": { + "description": "Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "url": { + "description": "Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "width": { + "description": "Width of the image in pixels. `null` if not known.", + "example": 800, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "created_by_agent": { + "description": "ID of the agent that created this task (`agi_...`). `null` if the task was created by a human user, or if the creating agent was later deleted.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "ID of the user who created this task (`usr_...`). `null` if the task was created by an agent, or if creator provenance was cleared after the creator was deleted.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "current_lease": { + "description": "Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included.", + "example": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "nullable": true, + "properties": { + "expires_at": { + "description": "Server-calculated lease expiry in ISO 8601 format.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "harness": { + "description": "Bounded harness identifier for the coding session.", + "example": "string", + "type": "string" + }, + "session_name": { + "description": "Display name supplied by the coding session that holds the lease.", + "example": "Example Name", + "type": "string" + } + }, + "required": [ + "session_name", + "harness", + "expires_at" + ], + "type": "object" + }, + "description": { + "description": "Long-form description or notes for the task. `null` if no description has been provided.", + "example": "An example description.", + "nullable": true, + "type": "string" + }, + "due_date": { + "description": "Date and time by which the task should be completed (ISO 8601). `null` if no due date is set.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "epic": { + "description": "Free-form grouping label. `null` when the task is not in an epic.", + "example": "string", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Task ID (`tsk_...`).", + "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_blocked": { + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", + "example": true, + "type": "boolean" + }, + "is_stalled": { + "description": "True exactly when status is in_progress and the task has no lease or its lease expiry is in the past. Derived at read time from status and lease expiry, including on unannotated reads.", + "example": true, + "type": "boolean" + }, + "links": { + "description": "Key-value map of named URLs or references associated with the task. Returns an empty object when no links have been set.", + "example": { + "key": "value" + }, + "type": "object" + }, + "metadata": { + "description": "Arbitrary key-value map of application-specific data stored alongside the task. Returns an empty object when no metadata has been set.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Human-readable title of the task.", + "example": "Example Name", + "type": "string" + }, + "org": { + "description": "ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "owner_actor": { + "description": "Resolved owner details including `id`, `name`, `alias`, and `profile_picture`. `null` if the task is unassigned or the owner cannot be resolved (e.g. assigned agent was deleted).", + "example": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "nullable": true, + "properties": { + "alias": { + "description": "Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.", + "example": "alice", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Composite actor identifier. Format is `\"user-\"` for human users or `\"agent-\"` for agents.", + "example": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "nullable": true, + "type": "string" + }, + "name": { + "description": "Display name of the actor shown in the UI. `null` if no name is set.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "profile_picture": { + "description": "Profile picture for the actor. `null` if the actor has no profile picture.", + "example": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "nullable": true, + "properties": { + "file": { + "description": "ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.", + "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "height": { + "description": "Height of the image in pixels. `null` if not known.", + "example": 600, + "nullable": true, + "type": "integer" + }, + "media": { + "description": "ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.", + "example": "med_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "mime_type": { + "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", + "example": "application/json", + "nullable": true, + "type": "string" + }, + "refresh_url": { + "description": "Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "url": { + "description": "Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "width": { + "description": "Width of the image in pixels. `null` if not known.", + "example": 800, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "owner_agent": { + "description": "ID of the agent assigned as owner (`agi_...`). `null` if the owner is a human user, the task is unassigned, or the assigned agent was deleted.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "owner_user": { + "description": "ID of the user assigned as owner (`usr_...`). `null` if the owner is an agent, the task is unassigned, or the assigned agent was deleted.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "parent": { + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", + "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "priority": { + "description": "Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set.", + "example": 2, + "type": "integer" + }, + "project_id": { + "description": "Optional project ID (`prj_...`). Membership does not change task visibility.", + "example": "string", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "source_id": { + "description": "Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source.", + "example": "string", + "nullable": true, + "type": "string" + }, + "source_scope": { + "description": "Container of the work this task is about (for example `github.com`). `null` when the task has no source. Set together with `source_type` and `source_id`.", + "example": "string", + "nullable": true, + "type": "string" + }, + "source_type": { + "description": "Kind of source object (for example `repository`). `null` when the task has no source.", + "example": "string", + "nullable": true, + "type": "string" + }, + "stalled_since": { + "description": "Lease expiry for a stalled task, or its last update when no lease expiry exists. Null when not stalled.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Current status of the task. One of `\"open\"`, `\"in_progress\"`, `\"in_review\"`, `\"paused\"`, `\"failed\"`, `\"superseding\"`, `\"done\"`, or `\"cancelled\"`.", + "example": "open", + "type": "string" + }, + "subtasks_count": { + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "example": 1, + "type": "integer" + }, + "tags": { + "description": "Labels for grouping and filtering, stored lowercase and de-duplicated. Empty array when untagged.", + "example": [ + "string" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "target_binary": { + "description": "Binary that must run this work (for example `my-cli`). A worker should take the task only when its own `target_binary` build is at least `target_version`. `null` when the task has no target. Set together with `target_version`.", + "example": "string", + "nullable": true, + "type": "string" + }, + "target_version": { + "description": "Minimum semantic version of `target_binary` that can run this work (for example `0.48.9`), in canonical `MAJOR.MINOR.PATCH[-prerelease][+build]` form. `null` when the task has no target.", + "example": "string", + "nullable": true, + "type": "string" + }, + "team": { + "description": "ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "thread": { + "description": "ID of the thread this task is bound to (`thr_...`) - the conversation it was filed from, or the thread passed at creation. `null` for tasks not tied to a thread.", + "example": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "When the task was last modified (ISO 8601).", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "user": { + "description": "ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "tasks" + ], + "type": "object" + }, + "type": "array" + }, + "has_more": { + "example": true, + "type": "boolean" + } + }, + "required": [ + "data", + "has_more" + ], + "type": "object" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Organization not found" + }, + "422": { + "description": "Invalid owner context or diagnostic limit" + } + }, + "summary": "List task blocker cycles for an organization", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/orgs/{org}/tasks/by-source": { + "put": { + "description": "Atomically creates one task per owner, tenant and source. Retries return the current task without updating it. Historical tasks created through ordinary create are not adopted.", + "operationId": "put_api_v1_orgs__org_tasks_by-source", + "parameters": [ + { + "description": "Explicit organization for privileged callers.", + "example": "string", + "in": "path", + "name": "org", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "agent": "string", + "description": "An example description.", + "epic": "string", + "name": "Example Name", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "status": "string", + "team": "string", + "user": "string" + }, + "properties": { + "agent": { + "description": "Explicit acting agent for privileged callers.", + "example": "string", + "type": "string" + }, + "description": { + "description": "Initial task description.", + "example": "An example description.", + "type": "string" + }, + "epic": { + "description": "Initial epic grouping.", + "example": "string", + "type": "string" + }, + "name": { + "description": "Initial task name.", + "example": "Example Name", + "type": "string" + }, + "source_id": { + "description": "Source identity, for example owner/repo#123.", + "example": "string", + "type": "string" + }, + "source_scope": { + "description": "Source scope, for example github.", + "example": "string", + "type": "string" + }, + "source_type": { + "description": "Source type, for example pull_request.", + "example": "string", + "type": "string" + }, + "status": { + "description": "Initial task status.", + "example": "string", + "type": "string" + }, + "team": { + "description": "Team owner.", + "example": "string", + "type": "string" + }, + "user": { + "description": "User owner, or explicit acting user on a team route.", + "example": "string", + "type": "string" + } + }, + "required": [ + "source_scope", + "source_type", + "source_id", + "name" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskEnsureResult" + } + } + }, + "description": "The task and whether this request created it." + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Task owner not found" + }, + "422": { + "description": "Validation error" + } + }, + "summary": "Find or create a task by source", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/orgs/{org}/tasks/metrics": { + "get": { + "description": "Returns task activity metrics scoped to org-owned tasks (org tenant, no\nnarrower user/team/agent scope). `open` counts currently open or\nin-progress org tasks, `created` counts tasks inserted in the UTC-day\nwindow, and `completed` counts tasks whose `closed_at` falls in that window\nwhile still in a closed status. Hard-deleted tasks are absent from the\nprojection and therefore omitted. The daily series is zero-filled across\nthe requested window and includes reconstructed end-of-day `open` stock.\n\nAny organization member may read this count-only summary. Requests from\ncallers without org access return 404 so organization existence is not\ndisclosed.\n", + "operationId": "get_api_v1_orgs__org_tasks_metrics", + "parameters": [ + { + "description": "Organization ID (`org_...`) whose task metrics should be returned.", + "example": "string", + "in": "path", + "name": "org", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "UTC-day window. One of 7, 30, 90, or 365; defaults to 30.", + "example": 1, + "in": "query", + "name": "days", + "required": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Organization-scoped task activity metrics.", + "example": { + "completed": 1, + "created": 1, + "days": 1, + "end_at": "2024-01-01T00:00:00Z", + "open": 1, + "series": [ + {} + ], + "start_at": "2024-01-01T00:00:00Z" + }, + "properties": { + "completed": { + "example": 1, + "type": "integer" + }, + "created": { + "example": 1, + "type": "integer" + }, + "days": { + "example": 1, + "type": "integer" + }, + "end_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "open": { + "example": 1, + "type": "integer" + }, + "series": { + "description": "Zero-filled UTC-day buckets with `date`, end-of-day `open`, `created`, and `completed`.", + "example": [ + {} + ], + "items": { + "type": "object" + }, + "type": "array" + }, + "start_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "days", + "start_at", + "end_at", + "open", + "created", + "completed", + "series" + ], + "type": "object" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Organization not found" + }, + "422": { + "description": "Invalid parameters" + } + }, + "summary": "Get task activity metrics for an organization", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/orgs/{org}/tasks/ready": { + "get": { + "description": "Returns open org-owned tasks with no unfinished blockers and no active\nsession lease. Readiness is calculated by the server from the current task\nprojection. It is a snapshot, not a reservation; claim a task lease before\nstarting work.\n\nResults are ordered by priority (0, the most urgent, first), then oldest\nfirst, so the first page is always the most urgent ready work.\n\nPass `explain=true` to include every open task with a stable readiness reason.\n", + "operationId": "get_api_v1_orgs__org_tasks_ready", + "parameters": [ + { + "description": "Organization ID (`org_...`) owning the tasks.", + "example": "string", + "in": "path", + "name": "org", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Include blocked and actively leased open tasks with exclusion reasons.", + "example": true, + "in": "query", + "name": "explain", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Only include tasks assigned to the authenticated user.", + "example": true, + "in": "query", + "name": "assigned_to_me", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Only include tasks whose source matches this container. Must be supplied with `source_type` and `source_id`.", + "example": "string", + "in": "query", + "name": "source_scope", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Only include tasks whose source matches this object kind.", + "example": "string", + "in": "query", + "name": "source_type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Only include tasks whose source matches this object identity.", + "example": "string", + "in": "query", + "name": "source_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Only include tasks with this exact epic label.", + "example": "string", + "in": "query", + "name": "epic", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Maximum number of readiness entries to return. Capped at 100.", + "example": 1, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Opaque cursor returned by the previous page.", + "example": "string", + "in": "query", + "name": "after_cursor", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Cursor-paginated readiness results for the organization.", + "example": { + "after_cursor": "string", + "authoritative": true, + "before_cursor": "string", + "data": [ + { + "readiness": "ready", + "reason": "open_blockers", + "task": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + } + ], + "has_more": true + }, + "properties": { + "after_cursor": { + "example": "string", + "type": "string" + }, + "authoritative": { + "description": "Always false because projections can lag writes and a later claim can race this read.", + "example": true, + "type": "boolean" + }, + "before_cursor": { + "example": "string", + "type": "string" + }, + "data": { + "example": [ + { + "readiness": "ready", + "reason": "open_blockers", + "task": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + } + ], + "items": { + "description": "A task plus the server-calculated reason it is or is not ready.", + "example": { + "readiness": "ready", + "reason": "open_blockers", + "task": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + }, + "properties": { + "readiness": { + "description": "One of `ready`, `blocked`, or `leased`.", + "enum": [ + "ready", + "blocked", + "leased" + ], + "example": "ready", + "type": "string" + }, + "reason": { + "description": "Stable exclusion reason: `open_blockers` or `active_lease`; omitted when ready.", + "enum": [ + "open_blockers", + "active_lease" + ], + "example": "open_blockers", + "nullable": true, + "type": "string" + }, + "task": { + "description": "The task evaluated for readiness.", + "example": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "properties": { + "agent": { + "description": "ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "aggregate_version": { + "description": "Event-stream version for optimistic update fencing. Pass this value as `expected_version` on an update to reject concurrent writes.", + "example": 1, + "nullable": true, + "type": "integer" + }, + "blocked_by_count": { + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "example": 1, + "type": "integer" + }, + "closed_at": { + "description": "When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "comments_count": { + "description": "Total number of comments posted on this task.", + "example": 1, + "type": "integer" + }, + "created_at": { + "description": "When the task was created (ISO 8601).", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "created_by_actor": { + "description": "Resolved creator details including `id`, `name`, `alias`, and `profile_picture`. `null` if no creator is set or the creator cannot be resolved (e.g. creating agent was deleted).", + "example": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "nullable": true, + "properties": { + "alias": { + "description": "Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.", + "example": "alice", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Composite actor identifier. Format is `\"user-\"` for human users or `\"agent-\"` for agents.", + "example": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "nullable": true, + "type": "string" + }, + "name": { + "description": "Display name of the actor shown in the UI. `null` if no name is set.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "profile_picture": { + "description": "Profile picture for the actor. `null` if the actor has no profile picture.", + "example": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "nullable": true, + "properties": { + "file": { + "description": "ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.", + "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "height": { + "description": "Height of the image in pixels. `null` if not known.", + "example": 600, + "nullable": true, + "type": "integer" + }, + "media": { + "description": "ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.", + "example": "med_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "mime_type": { + "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", + "example": "application/json", + "nullable": true, + "type": "string" + }, + "refresh_url": { + "description": "Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "url": { + "description": "Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "width": { + "description": "Width of the image in pixels. `null` if not known.", + "example": 800, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "created_by_agent": { + "description": "ID of the agent that created this task (`agi_...`). `null` if the task was created by a human user, or if the creating agent was later deleted.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "ID of the user who created this task (`usr_...`). `null` if the task was created by an agent, or if creator provenance was cleared after the creator was deleted.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "current_lease": { + "description": "Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included.", + "example": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "nullable": true, + "properties": { + "expires_at": { + "description": "Server-calculated lease expiry in ISO 8601 format.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "harness": { + "description": "Bounded harness identifier for the coding session.", + "example": "string", + "type": "string" + }, + "session_name": { + "description": "Display name supplied by the coding session that holds the lease.", + "example": "Example Name", + "type": "string" + } + }, + "required": [ + "session_name", + "harness", + "expires_at" + ], + "type": "object" + }, + "description": { + "description": "Long-form description or notes for the task. `null` if no description has been provided.", + "example": "An example description.", + "nullable": true, + "type": "string" + }, + "due_date": { + "description": "Date and time by which the task should be completed (ISO 8601). `null` if no due date is set.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "epic": { + "description": "Free-form grouping label. `null` when the task is not in an epic.", + "example": "string", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Task ID (`tsk_...`).", + "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_blocked": { + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", + "example": true, + "type": "boolean" + }, + "is_stalled": { + "description": "True exactly when status is in_progress and the task has no lease or its lease expiry is in the past. Derived at read time from status and lease expiry, including on unannotated reads.", + "example": true, + "type": "boolean" + }, + "links": { + "description": "Key-value map of named URLs or references associated with the task. Returns an empty object when no links have been set.", + "example": { + "key": "value" + }, + "type": "object" + }, + "metadata": { + "description": "Arbitrary key-value map of application-specific data stored alongside the task. Returns an empty object when no metadata has been set.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Human-readable title of the task.", + "example": "Example Name", + "type": "string" + }, + "org": { + "description": "ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "owner_actor": { + "description": "Resolved owner details including `id`, `name`, `alias`, and `profile_picture`. `null` if the task is unassigned or the owner cannot be resolved (e.g. assigned agent was deleted).", + "example": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "nullable": true, + "properties": { + "alias": { + "description": "Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.", + "example": "alice", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Composite actor identifier. Format is `\"user-\"` for human users or `\"agent-\"` for agents.", + "example": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "nullable": true, + "type": "string" + }, + "name": { + "description": "Display name of the actor shown in the UI. `null` if no name is set.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "profile_picture": { + "description": "Profile picture for the actor. `null` if the actor has no profile picture.", + "example": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "nullable": true, + "properties": { + "file": { + "description": "ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.", + "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "height": { + "description": "Height of the image in pixels. `null` if not known.", + "example": 600, + "nullable": true, + "type": "integer" + }, + "media": { + "description": "ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.", + "example": "med_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "mime_type": { + "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", + "example": "application/json", + "nullable": true, + "type": "string" + }, + "refresh_url": { + "description": "Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "url": { + "description": "Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "width": { + "description": "Width of the image in pixels. `null` if not known.", + "example": 800, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "owner_agent": { + "description": "ID of the agent assigned as owner (`agi_...`). `null` if the owner is a human user, the task is unassigned, or the assigned agent was deleted.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "owner_user": { + "description": "ID of the user assigned as owner (`usr_...`). `null` if the owner is an agent, the task is unassigned, or the assigned agent was deleted.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "parent": { + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", + "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "priority": { + "description": "Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set.", + "example": 2, + "type": "integer" + }, + "project_id": { + "description": "Optional project ID (`prj_...`). Membership does not change task visibility.", + "example": "string", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "source_id": { + "description": "Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source.", + "example": "string", + "nullable": true, + "type": "string" + }, + "source_scope": { + "description": "Container of the work this task is about (for example `github.com`). `null` when the task has no source. Set together with `source_type` and `source_id`.", + "example": "string", + "nullable": true, + "type": "string" + }, + "source_type": { + "description": "Kind of source object (for example `repository`). `null` when the task has no source.", + "example": "string", + "nullable": true, + "type": "string" + }, + "stalled_since": { + "description": "Lease expiry for a stalled task, or its last update when no lease expiry exists. Null when not stalled.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Current status of the task. One of `\"open\"`, `\"in_progress\"`, `\"in_review\"`, `\"paused\"`, `\"failed\"`, `\"superseding\"`, `\"done\"`, or `\"cancelled\"`.", + "example": "open", + "type": "string" + }, + "subtasks_count": { + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "example": 1, + "type": "integer" + }, + "tags": { + "description": "Labels for grouping and filtering, stored lowercase and de-duplicated. Empty array when untagged.", + "example": [ + "string" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "target_binary": { + "description": "Binary that must run this work (for example `my-cli`). A worker should take the task only when its own `target_binary` build is at least `target_version`. `null` when the task has no target. Set together with `target_version`.", + "example": "string", + "nullable": true, + "type": "string" + }, + "target_version": { + "description": "Minimum semantic version of `target_binary` that can run this work (for example `0.48.9`), in canonical `MAJOR.MINOR.PATCH[-prerelease][+build]` form. `null` when the task has no target.", + "example": "string", + "nullable": true, + "type": "string" + }, + "team": { + "description": "ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "thread": { + "description": "ID of the thread this task is bound to (`thr_...`) - the conversation it was filed from, or the thread passed at creation. `null` for tasks not tied to a thread.", + "example": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "When the task was last modified (ISO 8601).", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "user": { + "description": "ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + } + }, + "required": [ + "task", + "readiness" + ], + "type": "object" + }, + "type": "array" + }, + "has_more": { + "example": true, + "type": "boolean" + } + }, + "required": [ + "data", + "authoritative", + "has_more" + ], + "type": "object" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Organization not found" + }, + "422": { + "description": "Invalid owner context or pagination cursor" + } + }, + "summary": "List an organization's ready tasks", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/orgs/{org}/tasks/search": { + "get": { + "description": "Performs a full-text search over org-owned tasks for the specified\norganization and returns matching results. Combine `q` with the optional\nfilters to narrow the result set further. When no query is provided, the\nendpoint behaves like a filtered list.\n\nThe `query` field in the response echoes the effective search query.\nExplicitly personal, team, or agent tasks are excluded here.\n", + "operationId": "get_api_v1_orgs__org_tasks_search", + "parameters": [ + { + "description": "Organization ID (`org_...`) whose org-owned tasks are searched.", + "example": "string", + "in": "path", + "name": "org", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Full-text search query matched against task names and descriptions. Takes precedence over `query` when both are provided.", + "example": "string", + "in": "query", + "name": "q", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Alias for `q`. Use `q` when possible; this parameter exists for compatibility.", + "example": "string", + "in": "query", + "name": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Filter results by status. One of `\"open\"`, `\"in_progress\"`, `\"in_review\"`, or `\"done\"`. Omit to include all statuses.", + "example": "string", + "in": "query", + "name": "status", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Filter tasks assigned to a specific user. Provide the user's public ID (`usr_...`).", + "example": "string", + "in": "query", + "name": "owner_user", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Filter tasks assigned to a specific agent. Provide the agent's public ID (`agi_...`).", + "example": "string", + "in": "query", + "name": "owner_agent", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Filter tasks by priority, from 0 (highest) to 4 (lowest).", + "example": 1, + "in": "query", + "name": "priority", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Return only tasks carrying this tag (matched against the canonical lowercase form).", + "example": "string", + "in": "query", + "name": "tag", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only subtasks of the given task (`tsk_...`), or pass `none` to return only top-level tasks.", + "example": "string", + "in": "query", + "name": "parent", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks whose source matches this container. Must be supplied with `source_type` and `source_id`.", + "example": "string", + "in": "query", + "name": "source_scope", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks whose source matches this object kind. Must be supplied with the other source filters.", + "example": "string", + "in": "query", + "name": "source_type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks whose source matches this object identity. Must be supplied with the other source filters.", + "example": "string", + "in": "query", + "name": "source_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks with this exact epic label.", + "example": "string", + "in": "query", + "name": "epic", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Maximum number of tasks to return. Capped at 100.", + "example": 1, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Opaque cursor returned by the previous page.", + "example": "string", + "in": "query", + "name": "after_cursor", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "Search results for the organization's tasks.", + "example": { + "after_cursor": "string", + "before_cursor": "string", + "data": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + ], + "has_more": true, + "query": "string" + }, + "properties": { + "after_cursor": { + "example": "string", + "type": "string" + }, + "before_cursor": { + "example": "string", + "type": "string" + }, + "data": { + "description": "Array of task objects matching the query and filters.", + "example": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + } + ], + "items": { + "description": "A task representing a unit of work, optionally assignable to a user or agent.", + "example": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "aggregate_version": 1, + "blocked_by_count": 1, + "closed_at": "2024-01-01T00:00:00Z", + "comments_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "created_by_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "created_by_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "current_lease": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "description": "An example description.", + "due_date": "2024-01-01T00:00:00Z", + "epic": "string", + "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "is_blocked": true, + "is_stalled": true, + "links": { + "key": "value" + }, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "owner_actor": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "owner_agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "owner_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "priority": 2, + "project_id": "string", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", + "stalled_since": "2024-01-01T00:00:00Z", + "status": "open", + "subtasks_count": 1, + "tags": [ + "string" + ], + "target_binary": "string", + "target_version": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "properties": { + "agent": { + "description": "ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "aggregate_version": { + "description": "Event-stream version for optimistic update fencing. Pass this value as `expected_version` on an update to reject concurrent writes.", + "example": 1, + "nullable": true, + "type": "integer" + }, + "blocked_by_count": { + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "example": 1, + "type": "integer" + }, + "closed_at": { + "description": "When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "comments_count": { + "description": "Total number of comments posted on this task.", + "example": 1, + "type": "integer" + }, + "created_at": { + "description": "When the task was created (ISO 8601).", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "created_by_actor": { + "description": "Resolved creator details including `id`, `name`, `alias`, and `profile_picture`. `null` if no creator is set or the creator cannot be resolved (e.g. creating agent was deleted).", + "example": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "nullable": true, + "properties": { + "alias": { + "description": "Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.", + "example": "alice", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Composite actor identifier. Format is `\"user-\"` for human users or `\"agent-\"` for agents.", + "example": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "nullable": true, + "type": "string" + }, + "name": { + "description": "Display name of the actor shown in the UI. `null` if no name is set.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "profile_picture": { + "description": "Profile picture for the actor. `null` if the actor has no profile picture.", + "example": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "nullable": true, + "properties": { + "file": { + "description": "ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.", + "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "height": { + "description": "Height of the image in pixels. `null` if not known.", + "example": 600, + "nullable": true, + "type": "integer" + }, + "media": { + "description": "ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.", + "example": "med_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "mime_type": { + "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", + "example": "application/json", + "nullable": true, + "type": "string" + }, + "refresh_url": { + "description": "Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "url": { + "description": "Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "width": { + "description": "Width of the image in pixels. `null` if not known.", + "example": 800, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "created_by_agent": { + "description": "ID of the agent that created this task (`agi_...`). `null` if the task was created by a human user, or if the creating agent was later deleted.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "ID of the user who created this task (`usr_...`). `null` if the task was created by an agent, or if creator provenance was cleared after the creator was deleted.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "current_lease": { + "description": "Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included.", + "example": { + "expires_at": "2024-01-01T00:00:00Z", + "harness": "string", + "session_name": "Example Name" + }, + "nullable": true, + "properties": { + "expires_at": { + "description": "Server-calculated lease expiry in ISO 8601 format.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "harness": { + "description": "Bounded harness identifier for the coding session.", + "example": "string", + "type": "string" + }, + "session_name": { + "description": "Display name supplied by the coding session that holds the lease.", + "example": "Example Name", + "type": "string" + } + }, + "required": [ + "session_name", + "harness", + "expires_at" + ], + "type": "object" + }, + "description": { + "description": "Long-form description or notes for the task. `null` if no description has been provided.", + "example": "An example description.", + "nullable": true, + "type": "string" + }, + "due_date": { + "description": "Date and time by which the task should be completed (ISO 8601). `null` if no due date is set.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "epic": { + "description": "Free-form grouping label. `null` when the task is not in an epic.", + "example": "string", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Task ID (`tsk_...`).", + "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_blocked": { + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", + "example": true, + "type": "boolean" + }, + "is_stalled": { + "description": "True exactly when status is in_progress and the task has no lease or its lease expiry is in the past. Derived at read time from status and lease expiry, including on unannotated reads.", + "example": true, + "type": "boolean" + }, + "links": { + "description": "Key-value map of named URLs or references associated with the task. Returns an empty object when no links have been set.", + "example": { + "key": "value" + }, + "type": "object" + }, + "metadata": { + "description": "Arbitrary key-value map of application-specific data stored alongside the task. Returns an empty object when no metadata has been set.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Human-readable title of the task.", + "example": "Example Name", + "type": "string" + }, + "org": { + "description": "ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "owner_actor": { + "description": "Resolved owner details including `id`, `name`, `alias`, and `profile_picture`. `null` if the task is unassigned or the owner cannot be resolved (e.g. assigned agent was deleted).", + "example": { + "alias": "alice", + "id": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "name": "Example Name", + "profile_picture": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + } + }, + "nullable": true, + "properties": { + "alias": { + "description": "Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.", + "example": "alice", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Composite actor identifier. Format is `\"user-\"` for human users or `\"agent-\"` for agents.", + "example": "user-usr_01j3k5m7n9p2r4s6t8v0w1x2", + "nullable": true, + "type": "string" + }, + "name": { + "description": "Display name of the actor shown in the UI. `null` if no name is set.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "profile_picture": { + "description": "Profile picture for the actor. `null` if the actor has no profile picture.", + "example": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "nullable": true, + "properties": { + "file": { + "description": "ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.", + "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "height": { + "description": "Height of the image in pixels. `null` if not known.", + "example": 600, + "nullable": true, + "type": "integer" + }, + "media": { + "description": "ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.", + "example": "med_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "mime_type": { + "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", + "example": "application/json", + "nullable": true, + "type": "string" + }, + "refresh_url": { + "description": "Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "url": { + "description": "Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.", + "example": "https://example.com", + "nullable": true, + "type": "string" + }, + "width": { + "description": "Width of the image in pixels. `null` if not known.", + "example": 800, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "owner_agent": { + "description": "ID of the agent assigned as owner (`agi_...`). `null` if the owner is a human user, the task is unassigned, or the assigned agent was deleted.", + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "owner_user": { + "description": "ID of the user assigned as owner (`usr_...`). `null` if the owner is an agent, the task is unassigned, or the assigned agent was deleted.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "parent": { + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", + "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "priority": { + "description": "Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set.", + "example": 2, + "type": "integer" + }, + "project_id": { + "description": "Optional project ID (`prj_...`). Membership does not change task visibility.", + "example": "string", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "source_id": { + "description": "Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source.", + "example": "string", + "nullable": true, + "type": "string" + }, + "source_scope": { + "description": "Container of the work this task is about (for example `github.com`). `null` when the task has no source. Set together with `source_type` and `source_id`.", + "example": "string", + "nullable": true, + "type": "string" + }, + "source_type": { + "description": "Kind of source object (for example `repository`). `null` when the task has no source.", + "example": "string", + "nullable": true, + "type": "string" + }, + "stalled_since": { + "description": "Lease expiry for a stalled task, or its last update when no lease expiry exists. Null when not stalled.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "status": { + "description": "Current status of the task. One of `\"open\"`, `\"in_progress\"`, `\"in_review\"`, `\"paused\"`, `\"failed\"`, `\"superseding\"`, `\"done\"`, or `\"cancelled\"`.", + "example": "open", + "type": "string" + }, + "subtasks_count": { + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "example": 1, + "type": "integer" + }, + "tags": { + "description": "Labels for grouping and filtering, stored lowercase and de-duplicated. Empty array when untagged.", + "example": [ + "string" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "target_binary": { + "description": "Binary that must run this work (for example `my-cli`). A worker should take the task only when its own `target_binary` build is at least `target_version`. `null` when the task has no target. Set together with `target_version`.", + "example": "string", + "nullable": true, + "type": "string" + }, + "target_version": { + "description": "Minimum semantic version of `target_binary` that can run this work (for example `0.48.9`), in canonical `MAJOR.MINOR.PATCH[-prerelease][+build]` form. `null` when the task has no target.", + "example": "string", + "nullable": true, + "type": "string" + }, + "team": { + "description": "ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "thread": { + "description": "ID of the thread this task is bound to (`thr_...`) - the conversation it was filed from, or the thread passed at creation. `null` for tasks not tied to a thread.", + "example": "thr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "When the task was last modified (ISO 8601).", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "user": { + "description": "ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "type": "array" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "query": { + "example": "string", + "type": "string" + } + }, + "required": [ + "data", + "has_more", + "query" + ], + "type": "object" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Organization not found" + }, + "422": { + "description": "Invalid filters" + } + }, + "summary": "Search an organization's tasks", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/orgs/{org}/threads": { "get": { "description": "Returns org-visibility threads for the specified organization. Every member\nof the organization can list these threads; they require no team membership.\nApp-scoped developer tokens for the organization's app can list them too.\n", @@ -49186,8 +56225,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -49201,8 +56242,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -49598,8 +56641,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -49613,8 +56658,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -50007,8 +57054,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -50022,8 +57071,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -50642,8 +57693,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -50657,8 +57710,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -51050,8 +58105,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -51065,8 +58122,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -51104,8 +58163,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -51119,8 +58180,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -51277,8 +58340,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -51292,8 +58357,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -51301,8 +58368,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -51316,12 +58385,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -51334,6 +58411,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -51414,6 +58497,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -51426,6 +58515,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -51728,8 +58824,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -51743,8 +58841,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -59020,6 +66120,57 @@ ] } }, + "/api/v1/task_ownership_conversions/{job_id}": { + "get": { + "description": "Returns only the requesting user's job status, even after task visibility changes.", + "operationId": "get_api_v1_task_ownership_conversions__job_id", + "parameters": [ + { + "description": "The accepted background job ID.", + "example": 1, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskOwnershipJob" + } + } + }, + "description": "Current background job state." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not found" + }, + "422": { + "description": "Invalid parameters" + } + }, + "summary": "Read the status of a task ownership conversion", + "x-auth": [ + "publishable_key", + "bearer", + "device_flow" + ], + "x-required-scopes": [ + "tasks:read" + ] + } + }, "/api/v1/tasks/{task}": { "delete": { "description": "Deletes a task from task lists and detail views. The task event stream is\nretained for auditability, while comments are removed and direct subtasks\nare promoted to top-level tasks.\n\nThe delete event is accepted before the read model is updated. Clients\nshould remove the task from local collections immediately; subsequent reads\nconverge once the projection processes the event.\n\nAuthenticated users may delete tasks they can access using their session\nidentity. App-scoped developer and server-to-server callers must explicitly\nsupply the task's `org` and owner. `team` or `user` identifies that owner;\nwhen neither is present, `agent` identifies an agent-owned task. With a team\nor user owner, `agent` identifies the acting principal. Each reference is\nvalidated before deletion.\n", @@ -59183,6 +66334,7 @@ "parent": "string", "priority": 1, "project_id": "string", + "require_status_lease": true, "source_id": "string", "source_scope": "string", "source_type": "string", @@ -59279,6 +66431,11 @@ "example": "string", "type": "string" }, + "require_status_lease": { + "description": "Session clients must set true for status changes. A live lease then requires the holder's lease_id and lease_session_id; human and host overrides remain available.", + "example": true, + "type": "boolean" + }, "source_id": { "description": "Replacement source object identity. Must be supplied with the other source fields.", "example": "string", @@ -59357,7 +66514,7 @@ "description": "Task not found" }, "409": { - "description": "Task lease has expired; Task lease does not match the current holder; Task changed since it was read" + "description": "Task is leased by another coding session; Task lease has expired; Task lease does not match the current holder; Task changed since it was read" }, "422": { "description": "Invalid parameters" @@ -59893,7 +67050,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -60082,7 +67239,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -60226,7 +67383,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -60279,7 +67436,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -60858,7 +68015,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -61047,7 +68204,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -61191,7 +68348,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -61244,7 +68401,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -62505,6 +69662,94 @@ ] } }, + "/api/v1/tasks/{task}/ownership_conversions": { + "post": { + "description": "Queues ownership changes for the connected task graph across parent, child, blocker, and blocking relationships. The selected tasks and their versions are frozen when queued. Each transfer checks the requesting user’s current authority; conflicts fail the job without undoing completed transfers.", + "operationId": "post_api_v1_tasks__task_ownership_conversions", + "parameters": [ + { + "description": "Root task (`tsk_...`).", + "example": "string", + "in": "path", + "name": "task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "dest_agent": "string", + "dest_org": "string", + "dest_team": "string", + "dest_user": "string" + }, + "properties": { + "dest_agent": { + "description": "Destination agent (`agi_...`).", + "example": "string", + "type": "string" + }, + "dest_org": { + "description": "Destination organization (`org_...`).", + "example": "string", + "type": "string" + }, + "dest_team": { + "description": "Destination team (`tem_...`).", + "example": "string", + "type": "string" + }, + "dest_user": { + "description": "Destination user (`usr_...`). Supply exactly one destination.", + "example": "string", + "type": "string" + } + }, + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskOwnershipJob" + } + } + }, + "description": "The queued background job." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not found" + }, + "409": { + "description": "Conflict" + }, + "422": { + "description": "Invalid parameters" + } + }, + "summary": "Convert ownership of a connected task graph", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/tasks/{task}/subtasks": { "get": { "description": "Returns a bounded page of the specified task's subtasks (tasks whose\n`parent` is this task), newest first. Subtasks nest exactly one level, so\nentries never have subtasks of their own. Privileged callers explicitly\nprovide the owning `team`, `user`, or `agent` and `org`.\n", @@ -62856,7 +70101,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -63045,7 +70290,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -63189,7 +70434,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -63242,7 +70487,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -63334,6 +70579,103 @@ ] } }, + "/api/v1/tasks/{task}/transfer_ownership": { + "post": { + "description": "Changes one task’s privacy owner at the supplied aggregate version. Assignment, creator, source identity, comments, and relationship IDs remain unchanged. Source and destination must have the same app and sandbox; the authenticated user must have authority over both scopes.", + "operationId": "post_api_v1_tasks__task_transfer_ownership", + "parameters": [ + { + "description": "Task (`tsk_...`).", + "example": "string", + "in": "path", + "name": "task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "dest_agent": "string", + "dest_org": "string", + "dest_team": "string", + "dest_user": "string", + "expected_version": 1 + }, + "properties": { + "dest_agent": { + "description": "Destination agent (`agi_...`).", + "example": "string", + "type": "string" + }, + "dest_org": { + "description": "Destination organization (`org_...`).", + "example": "string", + "type": "string" + }, + "dest_team": { + "description": "Destination team (`tem_...`).", + "example": "string", + "type": "string" + }, + "dest_user": { + "description": "Destination user (`usr_...`). Supply exactly one destination.", + "example": "string", + "type": "string" + }, + "expected_version": { + "description": "The task version reviewed by the caller.", + "example": 1, + "type": "integer" + } + }, + "required": [ + "expected_version" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task" + } + } + }, + "description": "The task with its new owner." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not found" + }, + "409": { + "description": "Conflict; Task changed since it was read" + }, + "422": { + "description": "Invalid parameters" + } + }, + "summary": "Transfer one task to a different owner", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/team_memberships": { "get": { "description": "Returns a paginated list of team memberships across all teams accessible to\nthe authenticated caller. Use the `team`, `user`, and `agent` filters to\nnarrow results to a specific team or principal.\n\nThis endpoint requires S2S (service-to-service) authentication. Callers\nauthenticated with a user token receive a 401. Each membership includes the\nresolved `type` (`\"user\"`, `\"agent\"`, or `\"unknown\"`), display name, and\nprofile picture derived from the associated user or agent at request time.\n\nResults are returned in offset-based pages. Pass `page` and `page_size` to\nnavigate; the response includes `has_next` and `has_prev` to determine\nwhether adjacent pages exist.\n", @@ -64873,6 +72215,34 @@ "example": { "data": [ { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -64909,6 +72279,34 @@ "description": "Array of artifact objects belonging to the team.", "example": [ { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -64942,6 +72340,34 @@ "items": { "description": "A versioned artifact produced or managed by an agent, such as a generated file, report, or code output.", "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -64972,6 +72398,180 @@ "version": 1 }, "properties": { + "acl": { + "description": "Access control list for the artifact. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions` (`read`, `write`). `null` when the artifact has no grants or the viewer is not its owner.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "nullable": true, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, "agent": { "description": "ID of the agent that produced this artifact (`agt_...`). `null` if not agent-produced.", "example": "agt_0aBcDeFgHiJkLmNoPqRsTu", @@ -65277,6 +72877,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -65328,6 +72929,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -65375,6 +72977,7 @@ }, "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", "created_at": "2024-01-01T00:00:00Z", + "expires_at": "2024-01-01T00:00:00Z", "fields": { "key": "value" }, @@ -65573,6 +73176,13 @@ "format": "date-time", "type": "string" }, + "expires_at": { + "description": "Absolute expiry time (RFC 3339). Null when no expiry is set.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "fields": { "description": "Map of field names to their current values as defined by the object's schema type.", "example": { @@ -70186,7 +77796,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -70375,7 +77985,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -70519,7 +78129,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -70572,7 +78182,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -71432,7 +79042,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -71621,7 +79231,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -71765,7 +79375,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -71818,7 +79428,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -72665,7 +80275,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -72854,7 +80464,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -72998,7 +80608,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -73051,7 +80661,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -73604,7 +81214,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -73793,7 +81403,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -73937,7 +81547,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -73990,7 +81600,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -74221,8 +81831,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -74236,8 +81848,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -74633,8 +82247,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -74648,8 +82264,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -75042,8 +82660,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -75057,8 +82677,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -75677,8 +83299,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -75692,8 +83316,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -76085,8 +83711,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -76100,8 +83728,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -76139,8 +83769,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -76154,8 +83786,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -76312,8 +83946,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -76327,8 +83963,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -76336,8 +83974,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -76351,12 +83991,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -76369,6 +84017,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -76449,6 +84103,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -76461,6 +84121,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -76763,8 +84430,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -76778,8 +84447,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -80679,6 +88350,34 @@ "example": { "data": [ { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -80715,6 +88414,34 @@ "description": "Array of artifact objects produced during the thread's conversation.", "example": [ { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -80748,6 +88475,34 @@ "items": { "description": "A versioned artifact produced or managed by an agent, such as a generated file, report, or code output.", "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -80778,6 +88533,180 @@ "version": 1 }, "properties": { + "acl": { + "description": "Access control list for the artifact. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions` (`read`, `write`). `null` when the artifact has no grants or the viewer is not its owner.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "nullable": true, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, "agent": { "description": "ID of the agent that produced this artifact (`agt_...`). `null` if not agent-produced.", "example": "agt_0aBcDeFgHiJkLmNoPqRsTu", @@ -80971,6 +88900,350 @@ ] } }, + "/api/v1/threads/{thread}/computers": { + "get": { + "description": "Returns all live computers in the visible thread, oldest first, without pagination.", + "operationId": "get_api_v1_threads__thread_computers", + "parameters": [ + { + "description": "Thread ID (`thr_...`).", + "example": "string", + "in": "path", + "name": "thread", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentComputerListResponse" + } + } + }, + "description": "The thread's live computers." + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Thread not found" + } + }, + "summary": "List a thread's computers", + "x-auth": [ + "publishable_key", + "bearer" + ] + }, + "post": { + "description": "Creates a computer owned by the thread's owner. Requires permission to manage the thread; every thread viewer may use the computer.", + "operationId": "post_api_v1_threads__thread_computers", + "parameters": [ + { + "description": "Thread ID (`thr_...`).", + "example": "string", + "in": "path", + "name": "thread", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "config": {}, + "key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "provider": "string", + "region": "string" + }, + "properties": { + "acl": { + "description": "Initial access control list.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "config": { + "description": "Provider configuration; top-level provider takes precedence.", + "example": {}, + "type": "object" + }, + "key": { + "description": "Stable key unique within this thread.", + "example": "string", + "type": "string" + }, + "metadata": { + "description": "Arbitrary computer metadata.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Human-readable computer name.", + "example": "Example Name", + "type": "string" + }, + "provider": { + "description": "Compute backend: sprites (default), vercel or e2b.", + "example": "string", + "type": "string" + }, + "region": { + "description": "Provider region; defaults to iad.", + "example": "string", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentComputer" + } + } + }, + "description": "The newly created computer. Returns HTTP 201." + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Thread not found" + }, + "422": { + "description": "Unsupported thread or invalid computer" + } + }, + "summary": "Provision a computer for a thread", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/threads/{thread}/mark_read": { "post": { "description": "Records that a user has read up to a specific message in the thread. Unread\nindicators and badge counts are cleared up to the specified message.\n\nYou must supply exactly one of `last_read_message` or `use_latest_message`.\nOmitting both returns 400. If `use_latest_message` is `true` and the thread\nhas no messages, the request succeeds silently with no state change.\n\nFor server-to-server (S2S) requests where no user identity is present in the\ntoken, the `user` param is required to identify whose read state to update.\n", @@ -81415,7 +89688,7 @@ }, "/api/v1/threads/{thread}/messages": { "get": { - "description": "Returns a cursor-paginated list of messages belonging to the specified thread,\nordered from oldest to newest. Supply `before_cursor`, `after_cursor`, or both\nto page through or bound the result set; omit both to receive the most recent page.\nSupply `anchor` and `direction` to fetch a window before, after, or around a\nspecific message. Use `anchor=last_matching&anchor_agent_mode=embedded` to\nresolve the anchor from the latest embedded-agent message, and add\n`anchor_agent` to scope that resolution to a single sender agent.\nSupply `metadata` as a JSON-encoded structured expression to filter message\nmetadata before cursor pagination or anchored window limits are applied.\n\nThe authenticated user must have access to the thread's owner (workspace or user).\nA 403 is returned if the thread exists but is not accessible to the caller; a 404\nis returned if the thread does not exist or is not visible to the authenticated user.\n\nThreads with `kind: feed` return only top-level posts, each with its newest\nreplies inline under `replies` and reply cursors for paging the rest.\n\nPass `include_reply_counts: true` to annotate each message with the number of\nthreaded replies it has received. This adds a small amount of latency and should\nbe omitted when reply counts are not needed.\n", + "description": "Returns a cursor-paginated list of messages belonging to the specified thread,\nordered from oldest to newest. Supply `before_cursor`, `after_cursor`, or both\nto page through or bound the result set; omit both to receive the most recent page.\nSupply `anchor` and `direction` to fetch a window before, after, or around a\nspecific message. Use `anchor=last_matching&anchor_agent_mode=embedded` to\nresolve the anchor from the latest embedded-agent message, and add\n`anchor_agent` to scope that resolution to a single sender agent.\nSupply `metadata` as a JSON-encoded structured expression to filter message\nmetadata before cursor pagination or anchored window limits are applied.\n\nThe authenticated user must have access to the thread's owner (workspace or user).\nA 403 is returned if the thread exists but is not accessible to the caller; a 404\nis returned if the thread does not exist or is not visible to the authenticated user.\n\nThreads with `kind: feed` return only top-level posts, each with its newest\nreplies inline under `replies` and reply cursors for paging the rest.\nSet `include_replies: true` to page messages and replies together by creation\norder instead, without inline reply previews. Metadata filters and the page\nlimit apply to the updates themselves, before any client-side grouping.\n\nPass `include_reply_counts: true` to annotate each message with the number of\nthreaded replies it has received. This adds a small amount of latency and should\nbe omitted when reply counts are not needed.\n", "operationId": "get_api_v1_threads__thread_messages", "parameters": [ { @@ -81546,6 +89819,16 @@ "type": "integer" } }, + { + "description": "Include replies in feed message pagination instead of returning root posts with inline replies. Defaults to false.", + "example": true, + "in": "query", + "name": "include_replies", + "required": false, + "schema": { + "type": "boolean" + } + }, { "description": "Message ID (`msg_...`) to use as a window anchor, or `last_matching` to resolve the anchor from the latest message matching the anchor filters. Cannot be combined with `before_cursor` or `after_cursor`.", "example": "string", @@ -81723,8 +90006,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -81738,8 +90023,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -81879,8 +90166,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -81894,8 +90183,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -82048,8 +90339,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -82063,8 +90356,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -82196,8 +90491,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -82211,8 +90508,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -82332,8 +90631,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -82347,8 +90648,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -82747,8 +91050,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -82762,8 +91067,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -82801,8 +91108,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -82816,8 +91125,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -82974,8 +91285,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -82989,8 +91302,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -82998,8 +91313,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -83013,12 +91330,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -83031,6 +91356,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -83111,6 +91442,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -83123,6 +91460,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -83425,8 +91769,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -83440,8 +91786,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -84881,6 +93229,34 @@ "example": { "data": [ { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -84917,6 +93293,34 @@ "description": "Array of artifact objects belonging to the user.", "example": [ { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -84950,6 +93354,34 @@ "items": { "description": "A versioned artifact produced or managed by an agent, such as a generated file, report, or code output.", "example": { + "acl": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, "agent": "agt_0aBcDeFgHiJkLmNoPqRsTu", "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", @@ -84980,6 +93412,180 @@ "version": 1 }, "properties": { + "acl": { + "description": "Access control list for the artifact. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions` (`read`, `write`). `null` when the artifact has no grants or the viewer is not its owner.", + "example": { + "add": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "grants": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "remove": [ + { + "principal": "string", + "principal_type": "user" + } + ] + }, + "nullable": true, + "properties": { + "add": { + "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "grants": { + "description": "Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.", + "example": [ + { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "A single access-control grant that pairs a principal with the set of actions it is allowed to perform.", + "example": { + "actions": [ + "read", + "write" + ], + "principal": "string", + "principal_type": "user" + }, + "properties": { + "actions": { + "description": "Array of action strings the principal is permitted to perform, e.g. `[\"read\", \"write\"]`. Must contain at least one entry.", + "example": [ + "read", + "write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "principal": { + "description": "The identifier of the principal. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`; omit entirely when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal receiving the grant. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type", + "actions" + ], + "type": "object" + }, + "type": "array" + }, + "remove": { + "description": "Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.", + "example": [ + { + "principal": "string", + "principal_type": "user" + } + ], + "items": { + "description": "Identifies a principal to be removed from an access-control list.", + "example": { + "principal": "string", + "principal_type": "user" + }, + "properties": { + "principal": { + "description": "The identifier of the principal to remove. A string ID for `\"user\"`, `\"team\"`, `\"org\"`, and `\"agent\"` types; one of `\"admin\"`, `\"member\"`, or `\"viewer\"` for `\"org_role\"`. Omit when `principal_type` is `\"everyone\"`.", + "example": "string", + "type": "string" + }, + "principal_type": { + "description": "The kind of principal to remove. One of `\"user\"`, `\"team\"`, `\"org\"`, `\"org_role\"`, `\"agent\"`, or `\"everyone\"`.", + "example": "user", + "type": "string" + } + }, + "required": [ + "principal_type" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, "agent": { "description": "ID of the agent that produced this artifact (`agt_...`). `null` if not agent-produced.", "example": "agt_0aBcDeFgHiJkLmNoPqRsTu", @@ -86873,7 +95479,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -87062,7 +95668,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -87206,7 +95812,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -87259,7 +95865,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -88119,7 +96725,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -88308,7 +96914,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -88452,7 +97058,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -88505,7 +97111,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -89239,7 +97845,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -89428,7 +98034,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -89572,7 +98178,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -89625,7 +98231,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -90178,7 +98784,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -90367,7 +98973,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -90511,7 +99117,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -90564,7 +99170,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" }, @@ -90842,8 +99448,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -90857,8 +99465,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -91254,8 +99864,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -91269,8 +99881,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -91663,8 +100277,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -91678,8 +100294,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -92298,8 +100916,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -92313,8 +100933,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -92706,8 +101328,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -92721,8 +101345,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -92760,8 +101386,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -92775,8 +101403,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -92933,8 +101563,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -92948,8 +101580,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -92957,8 +101591,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -92972,12 +101608,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -92990,6 +101634,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -93070,6 +101720,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -93082,6 +101738,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -93384,8 +102047,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -93399,8 +102064,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -100323,6 +108990,7 @@ "selection_end": 1 }, "op": [], + "op_id": "string", "revision": 1 }, "properties": { @@ -100353,6 +109021,10 @@ "example": [], "type": "array" }, + "op_id": { + "example": "string", + "type": "string" + }, "revision": { "example": 1, "type": "integer" @@ -100441,6 +109113,53 @@ "type": "object" } }, + { + "description": "Relay opaque, transient coordination to joined actors in document order.", + "event": "signal", + "params": { + "example": { + "kind": "string", + "payload": {}, + "to": "string" + }, + "properties": { + "kind": { + "example": "string", + "type": "string" + }, + "payload": { + "example": {}, + "type": "object" + }, + "to": { + "example": "string", + "type": "string" + } + }, + "required": [ + "kind", + "to", + "payload" + ], + "type": "object" + }, + "returns": { + "description": "Acknowledges an Artifact editing presence or leave request.", + "example": { + "ok": true + }, + "properties": { + "ok": { + "example": true, + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" + } + }, { "description": "Persist the current live snapshot as a new durable ArtifactVersion.", "event": "checkpoint", @@ -100518,6 +109237,31 @@ ], "name": "ApiArtifactChannel", "pushes": [ + { + "description": "An identified operation was refused; it was not applied.", + "event": "op_rejected", + "payload": { + "example": { + "op_id": "string", + "reason": "string" + }, + "properties": { + "op_id": { + "example": "string", + "type": "string" + }, + "reason": { + "example": "string", + "type": "string" + } + }, + "required": [ + "op_id", + "reason" + ], + "type": "object" + } + }, { "description": "A peer operation applied by the authoritative OT server.", "event": "operation", @@ -100584,6 +109328,55 @@ "type": "object" } }, + { + "description": "Opaque coordination from another joined actor; never persisted or replayed.", + "event": "signal", + "payload": { + "example": { + "from": "string", + "incarnation": "string", + "kind": "string", + "payload": {}, + "revision": 1, + "to": "string" + }, + "properties": { + "from": { + "example": "string", + "type": "string" + }, + "incarnation": { + "example": "string", + "type": "string" + }, + "kind": { + "example": "string", + "type": "string" + }, + "payload": { + "example": {}, + "type": "object" + }, + "revision": { + "example": 1, + "type": "integer" + }, + "to": { + "example": "string", + "type": "string" + } + }, + "required": [ + "kind", + "to", + "from", + "revision", + "payload", + "incarnation" + ], + "type": "object" + } + }, { "description": "A peer joined, moved its cursor, or left.", "event": "presence", @@ -101730,8 +110523,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -101745,8 +110540,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -101941,8 +110738,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -101956,8 +110755,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -102392,8 +111193,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -102407,8 +111210,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -103190,8 +111995,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -103205,8 +112012,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -103401,8 +112210,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -103416,8 +112227,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -107975,8 +116788,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -107990,8 +116805,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -108123,8 +116940,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -108138,8 +116957,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -108259,8 +117080,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -108274,8 +117097,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -108674,8 +117499,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -108689,8 +117516,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -108728,8 +117557,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -108743,8 +117574,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -108901,8 +117734,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -108916,8 +117751,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -108925,8 +117762,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -108940,12 +117779,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -108958,6 +117805,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -109038,6 +117891,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -109050,6 +117909,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -109352,8 +118218,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -109367,8 +118235,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -110025,8 +118895,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -110040,8 +118912,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -110660,8 +119534,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -110675,8 +119551,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -111068,8 +119946,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -111083,8 +119963,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -111122,8 +120004,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -111137,8 +120021,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -111295,8 +120181,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -111310,8 +120198,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -111319,8 +120209,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -111334,12 +120226,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -111352,6 +120252,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -111432,6 +120338,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -111444,6 +120356,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -111746,8 +120665,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -111761,8 +120682,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -114702,8 +123625,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -114717,8 +123642,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -115337,8 +124264,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -115352,8 +124281,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -115745,8 +124676,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -115760,8 +124693,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -115799,8 +124734,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -115814,8 +124751,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -115972,8 +124911,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -115987,8 +124928,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -115996,8 +124939,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -116011,12 +124956,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -116029,6 +124982,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -116109,6 +125068,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -116121,6 +125086,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -116423,8 +125395,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -116438,8 +125412,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -119105,8 +128081,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -119120,8 +128098,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -119256,8 +128236,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -119271,8 +128253,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -119404,8 +128388,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -119419,8 +128405,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -119540,8 +128528,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -119555,8 +128545,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -119955,8 +128947,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -119970,8 +128964,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -120009,8 +129005,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -120024,8 +129022,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -120182,8 +129182,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -120197,8 +129199,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -120206,8 +129210,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -120221,12 +129227,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -120239,6 +129253,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -120319,6 +129339,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -120331,6 +129357,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -120633,8 +129666,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -120648,8 +129683,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -121430,8 +130467,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -121445,8 +130484,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -121641,8 +130682,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -121656,8 +130699,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -122440,8 +131485,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -122455,8 +131502,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -122651,8 +131700,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -122666,8 +131717,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -127225,8 +136278,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -127240,8 +136295,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -127373,8 +136430,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -127388,8 +136447,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -127509,8 +136570,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -127524,8 +136587,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -127924,8 +136989,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -127939,8 +137006,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -127978,8 +137047,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -127993,8 +137064,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -128151,8 +137224,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -128166,8 +137241,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -128175,8 +137252,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -128190,12 +137269,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -128208,6 +137295,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -128288,6 +137381,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -128300,6 +137399,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -128602,8 +137708,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -128617,8 +137725,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -129275,8 +138385,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -129290,8 +138402,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -129910,8 +139024,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -129925,8 +139041,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -130318,8 +139436,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -130333,8 +139453,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -130372,8 +139494,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -130387,8 +139511,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -130545,8 +139671,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -130560,8 +139688,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -130569,8 +139699,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -130584,12 +139716,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -130602,6 +139742,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -130682,6 +139828,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -130694,6 +139846,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -130996,8 +140155,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -131011,8 +140172,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -133580,6 +142743,12 @@ } ], "idempotency_key": "string", + "mentions": [ + "string" + ], + "metadata": { + "key": "value" + }, "reply_to": "string", "uploads": [ {} @@ -133642,6 +142811,21 @@ "example": "string", "type": "string" }, + "mentions": { + "example": [ + "string" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "metadata": { + "example": { + "key": "value" + }, + "type": "object" + }, "reply_to": { "example": "string", "type": "string" @@ -133739,8 +142923,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -133754,8 +142940,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -133888,8 +143076,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -133903,8 +143093,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -134295,8 +143487,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -134310,8 +143504,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -134349,8 +143545,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -134364,8 +143562,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -134522,8 +143722,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -134537,8 +143739,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -134546,8 +143750,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -134561,12 +143767,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -134579,6 +143793,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -134659,6 +143879,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -134671,6 +143897,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -134973,8 +144206,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -134988,8 +144223,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -135267,6 +144504,12 @@ } ], "idempotency_key": "string", + "mentions": [ + "string" + ], + "metadata": { + "key": "value" + }, "reply_to": "string" }, "properties": { @@ -135326,6 +144569,21 @@ "example": "string", "type": "string" }, + "mentions": { + "example": [ + "string" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "metadata": { + "example": { + "key": "value" + }, + "type": "object" + }, "reply_to": { "example": "string", "type": "string" @@ -135411,8 +144669,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -135426,8 +144686,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -135560,8 +144822,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -135575,8 +144839,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -135967,8 +145233,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -135982,8 +145250,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -136021,8 +145291,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -136036,8 +145308,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -136194,8 +145468,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -136209,8 +145485,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -136218,8 +145496,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -136233,12 +145513,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -136251,6 +145539,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -136331,6 +145625,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -136343,6 +145643,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -136645,8 +145952,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -136660,8 +145969,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -137423,8 +146734,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -137438,8 +146751,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -137581,8 +146896,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -137596,8 +146913,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -137988,8 +147307,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -138003,8 +147324,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -138042,8 +147365,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -138057,8 +147382,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -138215,8 +147542,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -138230,8 +147559,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -138239,8 +147570,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -138254,12 +147587,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -138272,6 +147613,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -138352,6 +147699,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -138364,6 +147717,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -138666,8 +148026,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -138681,8 +148043,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -139026,8 +148390,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -139041,8 +148407,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -139176,8 +148544,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -139191,8 +148561,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -139583,8 +148955,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -139598,8 +148972,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -139637,8 +149013,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -139652,8 +149030,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -139810,8 +149190,10 @@ "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -139825,8 +149207,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -139834,8 +149218,10 @@ "items": { "description": "A processed variant of a media item, such as the original upload or a resized thumbnail, including a signed download URL resolved at request time.", "example": { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -139849,12 +149235,20 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 }, "properties": { + "byte_size": { + "description": "Size of the stored bytes.", + "example": 1, + "nullable": true, + "type": "integer" + }, "content_type": { "description": "MIME type of this variant's file (e.g., `\"image/jpeg\"`, `\"video/mp4\"`). `null` if the file is not loaded.", "example": "application/json", @@ -139867,6 +149261,12 @@ "format": "date-time", "type": "string" }, + "duration_ms": { + "description": "Client-declared video duration in milliseconds; not server-probed.", + "example": 1, + "nullable": true, + "type": "integer" + }, "file": { "description": "ID of the underlying storage file that backs this variant (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", @@ -139947,6 +149347,12 @@ }, "type": "object" }, + "sha256": { + "description": "Lowercase SHA-256 of the stored bytes.", + "example": "string", + "nullable": true, + "type": "string" + }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", "example": "2024-01-01T00:00:00Z", @@ -139959,6 +149365,13 @@ "nullable": true, "type": "string" }, + "url_expires_at": { + "description": "Expiry of this variant's playable URL.", + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "nullable": true, + "type": "string" + }, "variant_key": { "description": "Identifier for this variant's processing tier. Common values include `\"original\"` (the unmodified upload) and `\"thumbnail\"` (a resized preview).", "example": "original", @@ -140261,8 +149674,10 @@ "url": "https://example.com", "variants": [ { + "byte_size": 1, "content_type": "application/json", "created_at": "2024-01-01T00:00:00Z", + "duration_ms": 1, "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "filename": "string", "height": 600, @@ -140276,8 +149691,10 @@ "url": "https://example.com", "width": 800 }, + "sha256": "string", "updated_at": "2024-01-01T00:00:00Z", "url": "https://example.com", + "url_expires_at": "2024-01-01T00:00:00Z", "variant_key": "original", "width": 800 } @@ -141253,16 +150670,22 @@ "event": "object_deleted", "payload": { "example": { - "id": "string" + "id": "string", + "reason": "string" }, "properties": { "id": { "example": "string", "type": "string" + }, + "reason": { + "example": "string", + "type": "string" } }, "required": [ - "id" + "id", + "reason" ], "type": "object" } @@ -141621,7 +151044,7 @@ "type": "integer" }, "blocked_by_count": { - "description": "Number of tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", + "description": "Number of readable tasks marked as blocking this task, whether or not they are done (see `GET /tasks/{task}/blockers`). Computed on list/show reads; create/update responses may lag one read behind.", "example": 1, "type": "integer" }, @@ -141810,7 +151233,7 @@ "type": "string" }, "is_blocked": { - "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on list/show reads; create/update responses report `false` until the next read.", + "description": "`true` while at least one blocking task is not yet done. Informational only - a blocked task can still change status - and derived at read time, so the task un-blocks automatically when its last open blocker completes. Computed on reads, including mutation responses.", "example": true, "type": "boolean" }, @@ -141954,7 +151377,7 @@ "type": "string" }, "parent": { - "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level.", + "description": "ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks or when the parent is not readable. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "nullable": true, "type": "string" @@ -142007,7 +151430,7 @@ "type": "string" }, "subtasks_count": { - "description": "Number of subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", + "description": "Number of readable subtasks under this task. Computed on list/show reads; create/update responses may report 0 until the next read. Always 0 for subtasks.", "example": 1, "type": "integer" },