diff --git a/package-lock.json b/package-lock.json index 7d20161..d409e8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "archastro-rust-tooling", "devDependencies": { - "@archastro/channel-harness": "latest", + "@archastro/channel-harness": "^0.7.1", "@archastro/sdk-generator": "latest", "@stoplight/prism-cli": "5.16.0" }, @@ -15,9 +15,9 @@ } }, "node_modules/@archastro/channel-harness": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@archastro/channel-harness/-/channel-harness-0.7.0.tgz", - "integrity": "sha512-jQsyzCuqzirzeT7846Y9/la9PfC8hyC1IOEqLIuOJR5CyhExuSY9ZfqYyjE1kuyq73A9/44I+SQmOVtK8dKgcA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@archastro/channel-harness/-/channel-harness-0.7.1.tgz", + "integrity": "sha512-/rBMtxEVNdzfB9q/gntRVuYwrYNRP5BD6PgLMTcCWSEAWA06a0nfhY1siJmhzK/XEtbv8ejWTPtnGkV2o2m8dA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 9002188..c1e1197 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "regenerate": "bash scripts/regenerate_sdk.sh" }, "devDependencies": { - "@archastro/channel-harness": "latest", + "@archastro/channel-harness": "^0.7.1", "@archastro/sdk-generator": "latest", "@stoplight/prism-cli": "5.16.0" }, @@ -18,5 +18,7 @@ "uuid": "11.1.1", "ws": "8.21.0" }, - "engines": { "node": ">=20" } + "engines": { + "node": ">=20" + } } diff --git a/specs/platform-openapi.json b/specs/platform-openapi.json index ed1d9e8..4f8d6be 100644 --- a/specs/platform-openapi.json +++ b/specs/platform-openapi.json @@ -686,7 +686,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -834,7 +834,7 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { @@ -868,6 +868,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -1018,23 +1019,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -1045,16 +1048,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -1072,26 +1078,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -1225,6 +1236,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -1299,13 +1311,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -1321,6 +1333,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -1331,16 +1344,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -1353,11 +1369,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -1371,40 +1389,48 @@ "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" } }, @@ -1413,11 +1439,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -1433,6 +1461,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -1448,11 +1477,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -1468,6 +1499,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -1500,6 +1532,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -1507,6 +1540,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -1531,12 +1565,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -1552,10 +1587,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -1580,6 +1617,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -1605,6 +1643,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -1653,11 +1692,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -1668,21 +1709,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -1695,8 +1740,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -1707,6 +1751,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -1792,13 +1837,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -1814,6 +1859,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -1824,16 +1870,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -1846,11 +1895,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -1864,40 +1915,48 @@ "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" } }, @@ -1906,11 +1965,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -1926,6 +1987,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -1941,11 +2003,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -1961,6 +2025,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -1993,6 +2058,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -2000,6 +2066,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -2024,12 +2091,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -2045,10 +2113,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -2073,6 +2143,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -2098,6 +2169,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -2146,11 +2218,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -2161,21 +2235,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -2188,8 +2266,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -2200,6 +2277,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -2235,11 +2313,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -2255,11 +2335,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -2271,6 +2353,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -2290,22 +2373,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -2428,6 +2513,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -2446,21 +2536,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -2483,36 +2607,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -2614,21 +2745,38 @@ "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": { - "$ref": "#/components/schemas/ImageSource", - "description": "Profile picture for the actor. `null` if the actor has no profile picture." + "allOf": [ + { + "$ref": "#/components/schemas/ImageSource" + } + ], + "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 } }, "type": "object" @@ -2665,7 +2813,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -2813,13 +2961,46 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { "acl": { - "$ref": "#/components/schemas/Acl", - "description": "Access control list for the agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied and the agent is accessible to all members of its scope." + "allOf": [ + { + "$ref": "#/components/schemas/Acl" + } + ], + "description": "Access control list for the agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied and the agent is accessible to all members of its scope.", + "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 }, "app": { "description": "ID of the application that owns this agent (`dap_...`).", @@ -2828,23 +3009,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -2855,16 +3038,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -2882,51 +3068,192 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { - "$ref": "#/components/schemas/AgentSourceSolution", - "description": "Source Solution and AgentTemplate summary for agents provisioned from a Solution. Includes `upgrade_available`, `latest_version`, and `latest_solution` so you can render an upgrade badge without a separate dry-run call. `null` for hand-built agents and agents whose tracked template or parent Solution has been deleted. Populated only on single-agent GET responses, never on list endpoints." + "allOf": [ + { + "$ref": "#/components/schemas/AgentSourceSolution" + } + ], + "description": "Source Solution and AgentTemplate summary for agents provisioned from a Solution. Includes `upgrade_available`, `latest_version`, and `latest_solution` so you can render an upgrade badge without a separate dry-run call. `null` for hand-built agents and agents whose tracked template or parent Solution has been deleted. Populated only on single-agent GET responses, never on list endpoints.", + "example": { + "current_solution": { + "category_keys": [ + "string" + ], + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "events": {}, + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "image_url": "https://example.com", + "kind": "Solution", + "latest_solution": "id_0aBcDeFgHiJkLmNoPqRsTu", + "latest_version": "1.0.0", + "lookup_key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_logo": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "org_name": "Example Name", + "org_slug": "example-slug", + "owners": [ + "string" + ], + "readme_url": "https://example.com", + "screenshot_urls": [ + "https://example.com" + ], + "solution_id": "01234567-89ab-cdef-0123-456789abcdef", + "solution_version": "1.2.0", + "tag_keys": [ + "string" + ], + "template_kind": "AgentTemplate", + "templates": [ + { + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "AgentTemplate", + "lookup_key": "string", + "name": "Example Name", + "readme_url": "https://example.com", + "virtual_path": "string" + } + ], + "updated_at": "2024-01-01T00:00:00Z", + "upgrade_available": true, + "virtual_path": "string" + }, + "solution": { + "category_keys": [ + "string" + ], + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "events": {}, + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "image_url": "https://example.com", + "kind": "Solution", + "latest_solution": "id_0aBcDeFgHiJkLmNoPqRsTu", + "latest_version": "1.0.0", + "lookup_key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_logo": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "org_name": "Example Name", + "org_slug": "example-slug", + "owners": [ + "string" + ], + "readme_url": "https://example.com", + "screenshot_urls": [ + "https://example.com" + ], + "solution_id": "01234567-89ab-cdef-0123-456789abcdef", + "solution_version": "1.2.0", + "tag_keys": [ + "string" + ], + "template_kind": "AgentTemplate", + "templates": [ + { + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "AgentTemplate", + "lookup_key": "string", + "name": "Example Name", + "readme_url": "https://example.com", + "virtual_path": "string" + } + ], + "updated_at": "2024-01-01T00:00:00Z", + "upgrade_available": true, + "virtual_path": "string" + }, + "template": { + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "agent_tool_template", + "lookup_key": "string", + "name": "Example Name", + "updated_at": "2024-01-01T00:00:00Z", + "virtual_path": "string" + } + }, + "nullable": true }, "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -3120,7 +3447,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-5-sonnet-20241022", "email": "user@example.com", "id": "agi_0aBcDeFgHiJkLmNoPqRsTu", @@ -3143,13 +3470,46 @@ "phone_number": "+15555550123", "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { "acl": { - "$ref": "#/components/schemas/Acl", - "description": "Access control list governing who can interact with this agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied." + "allOf": [ + { + "$ref": "#/components/schemas/Acl" + } + ], + "description": "Access control list governing who can interact with this agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied.", + "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 }, "app": { "description": "ID of the app this agent belongs to (`dap_...`).", @@ -3158,18 +3518,19 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default AI model the agent uses when no model is specified at runtime, e.g. `\"claude-3-5-sonnet-20241022\"`. `null` if not configured.", "example": "claude-3-5-sonnet-20241022", + "nullable": true, "type": "string" }, "email": { "description": "Email address assigned to this agent for inbound email handling. `null` if not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -3180,6 +3541,7 @@ "identity": { "description": "System prompt or persona description that shapes the agent's behavior. `null` if not set.", "example": "You are a helpful assistant.", + "nullable": true, "type": "string" }, "installed_configs": { @@ -3192,6 +3554,7 @@ "lookup_key": { "description": "Unique, stable identifier for the agent within its app. `null` if not set.", "example": "my-agent", + "nullable": true, "type": "string" }, "metadata": { @@ -3209,37 +3572,42 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` for agents outside an org.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author of the agent, e.g. a username or service name. `null` if not set.", "example": "my-service", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number assigned to this agent for inbound SMS or voice handling. `null` if not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`sbx_...`). `null` for agents not scoped to a sandbox.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team that owns this agent (`tea_...`). `null` if owned by a user rather than a team.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "updated_at": { "description": "When the agent record was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if owned by a team.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -6188,21 +6556,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -6213,40 +6585,59 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { - "$ref": "#/components/schemas/ImageSource", - "description": "Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise." + "allOf": [ + { + "$ref": "#/components/schemas/ImageSource" + } + ], + "description": "Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise.", + "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 }, "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -6257,10 +6648,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "items": { "$ref": "#/components/schemas/MediaVariant" }, @@ -6269,11 +6661,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -6297,6 +6691,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -6369,6 +6768,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -7078,6 +7478,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -7228,7 +7633,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -7430,7 +7835,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -7441,6 +7846,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -7657,7 +8067,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -7861,7 +8271,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -7872,6 +8282,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -8088,7 +8503,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -8491,6 +8906,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -8641,7 +9061,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -8843,7 +9263,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -8854,6 +9274,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -9070,7 +9495,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -9089,413 +9514,474 @@ ], "type": "object" }, - "ChatMarkThreadReadResponse": { - "description": "Response returned after marking a chat thread as read. Confirms that the read marker was successfully recorded for the authenticated user.", + "ChatLocalToolDefinition": { + "description": "An OpenAI-compatible local function definition supplied while joining a personal thread.", "example": { - "success": true + "function": { + "description": "An example description.", + "name": "Example Name", + "parameters": {} + }, + "type": "function" }, "properties": { - "success": { - "description": "Indicates whether the read marker was successfully applied. Always `true` on success; errors are returned as channel error replies rather than a `false` value here.", - "example": true, - "type": "boolean" + "function": { + "$ref": "#/components/schemas/ChatLocalToolFunction" + }, + "type": { + "enum": [ + "function" + ], + "example": "function", + "type": "string" } }, "required": [ - "success" + "type", + "function" ], "type": "object" }, - "ChatMember": { - "description": "A participant in a chat thread, which may be either a human user or an AI agent. Exactly one of `user` or `agent` is populated depending on `type`.", + "ChatLocalToolFunction": { + "description": "A function implemented by the client connected to a personal thread.", "example": { - "agent": { - "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" - } - ] - }, - "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", - "default_model": "claude-3-7-sonnet-latest", - "description": "An example description.", - "email": "user@example.com", - "id": "agi_0aBcDeFgHiJkLmNoPqRsTu", - "identity": "You are a helpful assistant that answers questions about ArchAstro products.", - "last_applied_template_config": "cfg_0aBcDeFgHiJkLmNoPqRsTu", - "lookup_key": "string", - "metadata": { - "key": "value" - }, - "name": "Example Name", - "org": "org_0aBcDeFgHiJkLmNoPqRsTu", - "org_name": "Example Name", - "originator": "deploy-pipeline", - "phone_number": "+15555550123", - "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", - "source_solution": { - "current_solution": { - "category_keys": [ - "string" - ], - "created_at": "2024-01-01T00:00:00Z", - "description": "An example description.", - "events": {}, - "id": "id_0aBcDeFgHiJkLmNoPqRsTu", - "image_url": "https://example.com", - "kind": "Solution", - "latest_solution": "id_0aBcDeFgHiJkLmNoPqRsTu", - "latest_version": "1.0.0", - "lookup_key": "string", - "metadata": { - "key": "value" - }, - "name": "Example Name", - "org": "org_0aBcDeFgHiJkLmNoPqRsTu", - "org_logo": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "org_name": "Example Name", - "org_slug": "example-slug", - "owners": [ - "string" - ], - "readme_url": "https://example.com", - "screenshot_urls": [ - "https://example.com" - ], - "solution_id": "01234567-89ab-cdef-0123-456789abcdef", - "solution_version": "1.2.0", - "tag_keys": [ - "string" - ], - "template_kind": "AgentTemplate", - "templates": [ - { - "description": "An example description.", - "display_name": "Example Name", - "id": "id_0aBcDeFgHiJkLmNoPqRsTu", - "kind": "AgentTemplate", - "lookup_key": "string", - "name": "Example Name", - "readme_url": "https://example.com", - "virtual_path": "string" - } - ], - "updated_at": "2024-01-01T00:00:00Z", - "upgrade_available": true, - "virtual_path": "string" - }, - "solution": { - "category_keys": [ - "string" - ], - "created_at": "2024-01-01T00:00:00Z", - "description": "An example description.", - "events": {}, - "id": "id_0aBcDeFgHiJkLmNoPqRsTu", - "image_url": "https://example.com", - "kind": "Solution", - "latest_solution": "id_0aBcDeFgHiJkLmNoPqRsTu", - "latest_version": "1.0.0", - "lookup_key": "string", - "metadata": { - "key": "value" - }, - "name": "Example Name", - "org": "org_0aBcDeFgHiJkLmNoPqRsTu", - "org_logo": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "org_name": "Example Name", - "org_slug": "example-slug", - "owners": [ - "string" - ], - "readme_url": "https://example.com", - "screenshot_urls": [ - "https://example.com" - ], - "solution_id": "01234567-89ab-cdef-0123-456789abcdef", - "solution_version": "1.2.0", - "tag_keys": [ - "string" - ], - "template_kind": "AgentTemplate", - "templates": [ - { - "description": "An example description.", - "display_name": "Example Name", - "id": "id_0aBcDeFgHiJkLmNoPqRsTu", - "kind": "AgentTemplate", - "lookup_key": "string", - "name": "Example Name", - "readme_url": "https://example.com", - "virtual_path": "string" - } - ], - "updated_at": "2024-01-01T00:00:00Z", - "upgrade_available": true, - "virtual_path": "string" - }, - "template": { - "created_at": "2024-01-01T00:00:00Z", - "description": "An example description.", - "display_name": "Example Name", - "id": "id_0aBcDeFgHiJkLmNoPqRsTu", - "kind": "agent_tool_template", - "lookup_key": "string", - "name": "Example Name", - "updated_at": "2024-01-01T00:00:00Z", - "virtual_path": "string" - } - }, - "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", - "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", - "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" - }, - "membership_type": "owner", - "type": "user", - "user": { - "alias": "jdoe", - "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "app_name": "Example Name", - "email": "user@example.com", - "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", - "is_system_user": true, - "metadata": { - "key": "value" - }, - "name": "Example Name", - "org": "org_0aBcDeFgHiJkLmNoPqRsTu", - "org_name": "Example Name", - "org_role": "member", - "org_slug": "example-slug", - "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", - "sandbox_name": "Example Name" - } + "description": "An example description.", + "name": "Example Name", + "parameters": {} }, "properties": { - "agent": { - "$ref": "#/components/schemas/Agent", - "description": "Full agent object for this member. Populated when `type` is `\"agent\"`; `null` for user members." - }, - "membership_type": { - "description": "Role of this member within the thread. Common values are `\"owner\"` and `\"member\"`. `null` when the membership type is not applicable.", - "example": "owner", + "description": { + "example": "An example description.", "type": "string" }, - "type": { - "description": "Kind of participant. One of `\"user\"` (a human user) or `\"agent\"` (an AI agent).", - "example": "user", + "name": { + "example": "Example Name", "type": "string" }, - "user": { - "$ref": "#/components/schemas/User", - "description": "Full user object for this member. Populated when `type` is `\"user\"`; `null` for agent members." + "parameters": { + "example": {}, + "type": "object" } }, "required": [ - "type" + "name", + "description", + "parameters" ], "type": "object" }, - "ChatMessageListResponse": { - "description": "Response returned when listing the messages of a joined chat thread. Contains the set of messages currently loaded for the thread.", + "ChatMarkThreadReadResponse": { + "description": "Response returned after marking a chat thread as read. Confirms that the read marker was successfully recorded for the authenticated user.", "example": { - "messages": [ - { - "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" - } - ] - }, - "actors": [ - { - "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 - } - } - ], - "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", - "agent_mode": "cli", - "attachments": [ - { - "content_type": "application/json", - "description": "An example description.", - "filename": "string", - "height": 1, - "id": "string", - "image_height": 1, - "image_source": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "image_url": "https://example.com", - "image_width": 1, - "media_type": "application/json", - "name": "Example Name", - "object": {}, - "title": "Example Title", - "type": "file", - "url": "https://example.com", - "variants": [ - { - "content_type": "application/json", - "created_at": "2024-01-01T00:00:00Z", - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "filename": "string", - "height": 600, - "id": "mvr_0aBcDeFgHiJkLmNoPqRsTu", - "image_source": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "updated_at": "2024-01-01T00:00:00Z", - "url": "https://example.com", - "variant_key": "original", - "width": 800 - } - ], - "version": 1, - "width": 1 - } - ], - "branched_thread": "string", - "content": "Hello, how can I help you today?", - "created_at": "2024-01-01T00:00:00Z", - "has_replies": true, - "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", - "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", - "is_deleted": true, - "legacy_agent": "string", - "metadata": { - "key": "value" - }, - "org": "org_0aBcDeFgHiJkLmNoPqRsTu", - "reactions": [ - { - "payload": { - "key": "value" - }, - "type": "emoji_reaction", - "user": "string" - } - ], - "rendering_mode": "reply", - "replies": [ - {} - ], - "replies_after_cursor": "string", - "replies_before_cursor": "string", - "reply_count": 1, - "reply_to": {}, - "root_message_id": "string", - "sandbox": "string", - "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", - "thread": "string", - "type": "note", - "user": "string", - "visibility": "default" - } - ] + "success": true }, "properties": { - "messages": { - "description": "Ordered array of message objects currently loaded for the thread, from oldest to newest. Use the `load_more_messages` channel message to fetch earlier pages.", - "items": { - "$ref": "#/components/schemas/Message" - }, - "type": "array" + "success": { + "description": "Indicates whether the read marker was successfully applied. Always `true` on success; errors are returned as channel error replies rather than a `false` value here.", + "example": true, + "type": "boolean" } }, "required": [ - "messages" + "success" ], "type": "object" }, - "ChatPostMessageResponse": { - "description": "Response returned after successfully posting a message to a chat thread. Contains the persisted message object echoed back to the sender.", + "ChatMember": { + "description": "A participant in a chat thread, which may be either a human user or an AI agent. Exactly one of `user` or `agent` is populated depending on `type`.", "example": { - "message": { + "agent": { + "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" + } + ] + }, + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "created_at": "2024-01-01T00:00:00Z", + "default_model": "claude-3-7-sonnet-latest", + "description": "An example description.", + "email": "user@example.com", + "id": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "identity": "You are a helpful assistant that answers questions about ArchAstro products.", + "last_applied_template_config": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "lookup_key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "originator": "deploy-pipeline", + "phone_number": "+15555550123", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_solution": { + "current_solution": { + "category_keys": [ + "string" + ], + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "events": {}, + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "image_url": "https://example.com", + "kind": "Solution", + "latest_solution": "id_0aBcDeFgHiJkLmNoPqRsTu", + "latest_version": "1.0.0", + "lookup_key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_logo": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "org_name": "Example Name", + "org_slug": "example-slug", + "owners": [ + "string" + ], + "readme_url": "https://example.com", + "screenshot_urls": [ + "https://example.com" + ], + "solution_id": "01234567-89ab-cdef-0123-456789abcdef", + "solution_version": "1.2.0", + "tag_keys": [ + "string" + ], + "template_kind": "AgentTemplate", + "templates": [ + { + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "AgentTemplate", + "lookup_key": "string", + "name": "Example Name", + "readme_url": "https://example.com", + "virtual_path": "string" + } + ], + "updated_at": "2024-01-01T00:00:00Z", + "upgrade_available": true, + "virtual_path": "string" + }, + "solution": { + "category_keys": [ + "string" + ], + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "events": {}, + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "image_url": "https://example.com", + "kind": "Solution", + "latest_solution": "id_0aBcDeFgHiJkLmNoPqRsTu", + "latest_version": "1.0.0", + "lookup_key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_logo": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "org_name": "Example Name", + "org_slug": "example-slug", + "owners": [ + "string" + ], + "readme_url": "https://example.com", + "screenshot_urls": [ + "https://example.com" + ], + "solution_id": "01234567-89ab-cdef-0123-456789abcdef", + "solution_version": "1.2.0", + "tag_keys": [ + "string" + ], + "template_kind": "AgentTemplate", + "templates": [ + { + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "AgentTemplate", + "lookup_key": "string", + "name": "Example Name", + "readme_url": "https://example.com", + "virtual_path": "string" + } + ], + "updated_at": "2024-01-01T00:00:00Z", + "upgrade_available": true, + "virtual_path": "string" + }, + "template": { + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "agent_tool_template", + "lookup_key": "string", + "name": "Example Name", + "updated_at": "2024-01-01T00:00:00Z", + "virtual_path": "string" + } + }, + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "template_upgrade_available": true, + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "membership_type": "owner", + "type": "user", + "user": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + } + }, + "properties": { + "agent": { + "$ref": "#/components/schemas/Agent", + "description": "Full agent object for this member. Populated when `type` is `\"agent\"`; `null` for user members." + }, + "membership_type": { + "description": "Role of this member within the thread. Common values are `\"owner\"` and `\"member\"`. `null` when the membership type is not applicable.", + "example": "owner", + "type": "string" + }, + "type": { + "description": "Kind of participant. One of `\"user\"` (a human user) or `\"agent\"` (an AI agent).", + "example": "user", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/User", + "description": "Full user object for this member. Populated when `type` is `\"user\"`; `null` for agent members." + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "ChatMessageListResponse": { + "description": "Response returned when listing the messages of a joined chat thread. Contains the set of messages currently loaded for the thread.", + "example": { + "messages": [ + { + "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" + } + ] + }, + "actors": [ + { + "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 + } + } + ], + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "agent_mode": "cli", + "attachments": [ + { + "content_type": "application/json", + "description": "An example description.", + "filename": "string", + "height": 1, + "id": "string", + "image_height": 1, + "image_source": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "image_url": "https://example.com", + "image_width": 1, + "media_type": "application/json", + "name": "Example Name", + "object": {}, + "title": "Example Title", + "type": "file", + "url": "https://example.com", + "variants": [ + { + "content_type": "application/json", + "created_at": "2024-01-01T00:00:00Z", + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "filename": "string", + "height": 600, + "id": "mvr_0aBcDeFgHiJkLmNoPqRsTu", + "image_source": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "updated_at": "2024-01-01T00:00:00Z", + "url": "https://example.com", + "variant_key": "original", + "width": 800 + } + ], + "version": 1, + "width": 1 + } + ], + "branched_thread": "string", + "content": "Hello, how can I help you today?", + "created_at": "2024-01-01T00:00:00Z", + "has_replies": true, + "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", + "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", + "is_deleted": true, + "legacy_agent": "string", + "metadata": { + "key": "value" + }, + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "reactions": [ + { + "payload": { + "key": "value" + }, + "type": "emoji_reaction", + "user": "string" + } + ], + "rendering_mode": "reply", + "replies": [ + {} + ], + "replies_after_cursor": "string", + "replies_before_cursor": "string", + "reply_count": 1, + "reply_to": {}, + "root_message_id": "string", + "sandbox": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "string", + "type": "note", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "visibility": "default" + } + ] + }, + "properties": { + "messages": { + "description": "Ordered array of message objects currently loaded for the thread, from oldest to newest. Use the `load_more_messages` channel message to fetch earlier pages.", + "items": { + "$ref": "#/components/schemas/Message" + }, + "type": "array" + } + }, + "required": [ + "messages" + ], + "type": "object" + }, + "ChatPostMessageResponse": { + "description": "Response returned after successfully posting a message to a chat thread. Contains the persisted message object echoed back to the sender.", + "example": { + "message": { "acl": { "add": [ { @@ -9628,7 +10114,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } }, @@ -10019,6 +10505,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -10169,7 +10660,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -10371,7 +10862,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -10382,6 +10873,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -10598,7 +11094,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -11793,6 +12289,558 @@ ], "type": "object" }, + "DomainEvent": { + "description": "A domain event with stable attribution fields and an event-specific payload.", + "example": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_at": "2024-01-01T00:00:00Z", + "event_name": "Example Name", + "id": "string", + "idempotency_key": "string", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "payload": {}, + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "properties": { + "agent": { + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "created_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "event_name": { + "example": "Example Name", + "type": "string" + }, + "id": { + "example": "string", + "type": "string" + }, + "idempotency_key": { + "example": "string", + "type": "string" + }, + "org": { + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "payload": { + "description": "Opaque event-specific JSON. Use event_name to select the expected payload schema.", + "example": {}, + "type": "object" + }, + "sandbox": { + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "team": { + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "user": { + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + } + }, + "required": [ + "id", + "event_name", + "payload", + "created_at" + ], + "type": "object" + }, + "EventSubscription": { + "description": "An app-scoped subscription to exact domain-event names.", + "example": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "available_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "dropped_events_total": 1, + "dropped_through_position": 1, + "event_names": [ + "Example Name" + ], + "id": "string", + "last_overflow_at": "2024-01-01T00:00:00Z", + "leased_count": 1, + "max_pending_events": 1, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "queue_epoch": 1, + "retention_seconds": 1, + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "status": "active", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "visibility_timeout_seconds": 1 + }, + "properties": { + "agent": { + "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "available_count": { + "example": 1, + "type": "integer" + }, + "created_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "dropped_events_total": { + "example": 1, + "type": "integer" + }, + "dropped_through_position": { + "example": 1, + "type": "integer" + }, + "event_names": { + "example": [ + "Example Name" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "example": "string", + "type": "string" + }, + "last_overflow_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "leased_count": { + "example": 1, + "type": "integer" + }, + "max_pending_events": { + "example": 1, + "type": "integer" + }, + "name": { + "example": "Example Name", + "type": "string" + }, + "org": { + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "queue_epoch": { + "example": 1, + "type": "integer" + }, + "retention_seconds": { + "example": 1, + "type": "integer" + }, + "sandbox": { + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "status": { + "enum": [ + "active", + "paused" + ], + "example": "active", + "type": "string" + }, + "team": { + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "updated_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "user": { + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "visibility_timeout_seconds": { + "example": 1, + "type": "integer" + } + }, + "required": [ + "id", + "name", + "event_names", + "status", + "max_pending_events", + "visibility_timeout_seconds", + "retention_seconds", + "available_count", + "leased_count", + "queue_epoch", + "dropped_events_total", + "dropped_through_position", + "created_at", + "updated_at" + ], + "type": "object" + }, + "EventSubscriptionClaim": { + "description": "Result of atomically claiming the head delivery.", + "example": { + "data": [ + { + "delivery_id": "string", + "event": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_at": "2024-01-01T00:00:00Z", + "event_name": "Example Name", + "id": "string", + "idempotency_key": "string", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "payload": {}, + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "lease_expires_at": "2024-01-01T00:00:00Z", + "receipt_handle": "string", + "receive_count": 1, + "sequence": 1 + } + ], + "dropped_events_total": 1, + "dropped_through_position": 1, + "has_more": true, + "queue_epoch": 1 + }, + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/EventSubscriptionDelivery" + }, + "type": "array" + }, + "dropped_events_total": { + "example": 1, + "type": "integer" + }, + "dropped_through_position": { + "example": 1, + "type": "integer" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "queue_epoch": { + "example": 1, + "type": "integer" + } + }, + "required": [ + "data", + "has_more", + "queue_epoch", + "dropped_events_total", + "dropped_through_position" + ], + "type": "object" + }, + "EventSubscriptionDelivery": { + "description": "A domain event leased from a subscription queue.", + "example": { + "delivery_id": "string", + "event": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_at": "2024-01-01T00:00:00Z", + "event_name": "Example Name", + "id": "string", + "idempotency_key": "string", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "payload": {}, + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "lease_expires_at": "2024-01-01T00:00:00Z", + "receipt_handle": "string", + "receive_count": 1, + "sequence": 1 + }, + "properties": { + "delivery_id": { + "example": "string", + "type": "string" + }, + "event": { + "$ref": "#/components/schemas/DomainEvent" + }, + "lease_expires_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "receipt_handle": { + "example": "string", + "type": "string" + }, + "receive_count": { + "example": 1, + "type": "integer" + }, + "sequence": { + "example": 1, + "type": "integer" + } + }, + "required": [ + "delivery_id", + "sequence", + "receipt_handle", + "lease_expires_at", + "receive_count", + "event" + ], + "type": "object" + }, + "EventSubscriptionHead": { + "description": "A non-reserving view of the queue head.", + "example": { + "data": { + "delivery_id": "string", + "event": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_at": "2024-01-01T00:00:00Z", + "event_name": "Example Name", + "id": "string", + "idempotency_key": "string", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "payload": {}, + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "lease_expires_at": "2024-01-01T00:00:00Z", + "receive_count": 1, + "sequence": 1, + "state": "available" + } + }, + "properties": { + "data": { + "$ref": "#/components/schemas/EventSubscriptionQueueEntry" + } + }, + "type": "object" + }, + "EventSubscriptionPage": { + "description": "A page of domain-event subscriptions.", + "example": { + "data": [ + { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "available_count": 1, + "created_at": "2024-01-01T00:00:00Z", + "dropped_events_total": 1, + "dropped_through_position": 1, + "event_names": [ + "Example Name" + ], + "id": "string", + "last_overflow_at": "2024-01-01T00:00:00Z", + "leased_count": 1, + "max_pending_events": 1, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "queue_epoch": 1, + "retention_seconds": 1, + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "status": "active", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "visibility_timeout_seconds": 1 + } + ], + "page": 1, + "per_page": 1, + "total_count": 1, + "total_pages": 1 + }, + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/EventSubscription" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "per_page": { + "example": 1, + "type": "integer" + }, + "total_count": { + "example": 1, + "type": "integer" + }, + "total_pages": { + "example": 1, + "type": "integer" + } + }, + "required": [ + "data", + "page", + "per_page", + "total_count", + "total_pages" + ], + "type": "object" + }, + "EventSubscriptionQueue": { + "description": "A cursor-paginated non-reserving view of a subscription queue.", + "example": { + "after_cursor": "string", + "before_cursor": "string", + "data": [ + { + "delivery_id": "string", + "event": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_at": "2024-01-01T00:00:00Z", + "event_name": "Example Name", + "id": "string", + "idempotency_key": "string", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "payload": {}, + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "lease_expires_at": "2024-01-01T00:00:00Z", + "receive_count": 1, + "sequence": 1, + "state": "available" + } + ], + "dropped_events_total": 1, + "dropped_through_position": 1, + "has_more": true, + "queue_epoch": 1 + }, + "properties": { + "after_cursor": { + "example": "string", + "type": "string" + }, + "before_cursor": { + "example": "string", + "type": "string" + }, + "data": { + "items": { + "$ref": "#/components/schemas/EventSubscriptionQueueEntry" + }, + "type": "array" + }, + "dropped_events_total": { + "example": 1, + "type": "integer" + }, + "dropped_through_position": { + "example": 1, + "type": "integer" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "queue_epoch": { + "example": 1, + "type": "integer" + } + }, + "required": [ + "data", + "has_more", + "queue_epoch", + "dropped_events_total", + "dropped_through_position" + ], + "type": "object" + }, + "EventSubscriptionQueueEntry": { + "description": "A non-reserving view of one queued delivery.", + "example": { + "delivery_id": "string", + "event": { + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "created_at": "2024-01-01T00:00:00Z", + "event_name": "Example Name", + "id": "string", + "idempotency_key": "string", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "payload": {}, + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "lease_expires_at": "2024-01-01T00:00:00Z", + "receive_count": 1, + "sequence": 1, + "state": "available" + }, + "properties": { + "delivery_id": { + "example": "string", + "type": "string" + }, + "event": { + "$ref": "#/components/schemas/DomainEvent" + }, + "lease_expires_at": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + }, + "receive_count": { + "example": 1, + "type": "integer" + }, + "sequence": { + "example": 1, + "type": "integer" + }, + "state": { + "enum": [ + "available", + "leased" + ], + "example": "available", + "type": "string" + } + }, + "required": [ + "delivery_id", + "sequence", + "state", + "receive_count", + "event" + ], + "type": "object" + }, "Extraction": { "description": "An extraction job: yields text from a document or website into a destination namespace, without committing knowledge to an agent.", "example": { @@ -12075,36 +13123,43 @@ "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" } }, @@ -12463,6 +13518,7 @@ "lookup_key": { "description": "Stored `lookup_key` for this config after any suffix has been applied. `null` for `File` children inside a skill bundle, which are keyed by `(parent_id, relative_path)` rather than by `lookup_key`.", "example": "my-skill", + "nullable": true, "type": "string" } }, @@ -12886,6 +13942,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -12902,11 +13959,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -12915,8 +13974,22 @@ "type": "string" }, "image_source": { - "$ref": "#/components/schemas/ImageSource", - "description": "Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types." + "allOf": [ + { + "$ref": "#/components/schemas/ImageSource" + } + ], + "description": "Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types.", + "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 }, "updated_at": { "description": "When this variant was last updated (ISO 8601).", @@ -12927,6 +14000,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -12937,6 +14011,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -13048,7 +14123,7 @@ ], "branched_thread": "string", "content": "Hello, how can I help you today?", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "has_replies": true, "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", @@ -13207,7 +14282,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "root_message_id": "string", @@ -13215,13 +14290,46 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { "acl": { - "$ref": "#/components/schemas/Acl", - "description": "Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else." + "allOf": [ + { + "$ref": "#/components/schemas/Acl" + } + ], + "description": "Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else.", + "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 }, "actors": { "description": "Resolved actor descriptors for the message sender, combining identity and display metadata. Always contains exactly one entry.", @@ -13233,6 +14341,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -13242,6 +14351,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -13254,17 +14364,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -13280,6 +14391,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -13290,6 +14402,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -13302,6 +14415,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -13314,6 +14428,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -13329,11 +14444,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -13476,9 +14593,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -13490,27 +14608,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -13748,6 +15019,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -13944,7 +15220,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -14257,6 +15533,83 @@ ], "type": "object" }, + "ProductKnowledgeReconcileFailure": { + "description": "One stamped customer whose product-knowledge tool update did not converge.", + "example": { + "customer_key": "string", + "error": "string", + "retryable": true + }, + "properties": { + "customer_key": { + "description": "Stable vendor-defined key for the customer whose agent did not converge.", + "example": "string", + "type": "string" + }, + "error": { + "description": "Stable failure reason for operator and vendor feedback.", + "example": "string", + "type": "string" + }, + "retryable": { + "description": "Whether rerunning the desired-state reconciliation is safe.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "customer_key", + "retryable", + "error" + ], + "type": "object" + }, + "ProductKnowledgeReconcileResponse": { + "description": "Desired-state reconciliation result for a CM install's stamped agents.", + "example": { + "complete": true, + "failures": [ + { + "customer_key": "string", + "error": "string", + "retryable": true + } + ], + "reconciled_customers": [ + "string" + ] + }, + "properties": { + "complete": { + "description": "True when every stamped customer agent now has the desired source allowlist.", + "example": true, + "type": "boolean" + }, + "failures": { + "description": "Per-customer failures. Empty when reconciliation is complete.", + "items": { + "$ref": "#/components/schemas/ProductKnowledgeReconcileFailure" + }, + "type": "array" + }, + "reconciled_customers": { + "description": "Customer keys whose agent tool config is converged.", + "example": [ + "string" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "complete", + "reconciled_customers", + "failures" + ], + "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": { @@ -14431,6 +15784,7 @@ "description": "When an eval sandbox expires and becomes eligible for platform cleanup. `null` for ordinary developer sandboxes.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "id": { @@ -14453,20 +15807,37 @@ "org": { "description": "Organization ID this sandbox is scoped to, or `null` for an app-level sandbox.", "example": "string", + "nullable": true, "type": "string" }, "org_logo": { - "$ref": "#/components/schemas/ImageSource", - "description": "Logo of the owning organization, when present." + "allOf": [ + { + "$ref": "#/components/schemas/ImageSource" + } + ], + "description": "Logo of the owning organization, when present.", + "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 }, "org_name": { "description": "Display name of the owning organization, when org-scoped.", "example": "Example Name", + "nullable": true, "type": "string" }, "purpose": { "description": "Sandbox purpose marker. `\"eval\"` marks a remote-eval sandbox; `null` for ordinary developer sandboxes.", "example": "string", + "nullable": true, "type": "string" }, "slug": { @@ -14512,6 +15883,7 @@ "description": "When this key expires and becomes invalid. `null` if the key does not expire.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "full_key": { @@ -14527,17 +15899,20 @@ "key_hint": { "description": "A short hint showing the last four characters of the key, used for identification. `null` if no hint is available.", "example": "Xk9q", + "nullable": true, "type": "string" }, "key_value": { "description": "The full key value for `\"publishable\"` keys. `null` for `\"secret\"` keys; use `full_key` instead, which is returned only at creation time.", "example": "string", + "nullable": true, "type": "string" }, "last_used_at": { "description": "When this key was last used to authenticate a request. `null` if the key has never been used.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "status": { @@ -14856,9 +16231,10 @@ "type": "string" }, "operation": { - "description": "Whether the attempt posted a new Slack message or updated an existing one (replacing a thinking placeholder).", + "description": "Which Slack call the attempt made. `post` — a new message in the channel, visible to everyone in it. `post_ephemeral` — a message only one named channel member could see; Slack returns no durable timestamp for one, so it has no `thread_ts` to correlate and cannot be found in the channel's history afterwards. `update` — replacing an existing message (typically a thinking placeholder).", "enum": [ "post", + "post_ephemeral", "update" ], "example": "post", @@ -14972,6 +16348,7 @@ "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -14979,6 +16356,7 @@ "items": { "$ref": "#/components/schemas/AutomationParticipantSlot" }, + "nullable": true, "type": "array" }, "prefills": { @@ -15014,13 +16392,34 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "$ref": "#/components/schemas/SolutionAutomationInvokeContract", - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning." + "allOf": [ + { + "$ref": "#/components/schemas/SolutionAutomationInvokeContract" + } + ], + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", + "example": { + "input_schema": {}, + "participants": [ + { + "description": "An example description.", + "name": "reporter", + "required": true, + "type": "agent_user" + } + ], + "prefills": { + "participants": {}, + "payload": {} + } + }, + "nullable": true }, "type": { "default": "automation", @@ -15474,7 +16873,7 @@ "SolutionImportResponse": { "description": "The result of importing a Solution bundle into the library, including the Solution config record, a structured import result, and the list of all configs persisted during the transaction.", "example": { - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "id": "id_0aBcDeFgHiJkLmNoPqRsTu", "import_result": { "code": "string", @@ -15560,14 +16959,13 @@ "upgrade_available": true, "virtual_path": "string" }, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "virtual_path": "string" }, "properties": { "created_at": { "description": "When the Solution config record was first created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "id": { @@ -15594,6 +16992,7 @@ "lookup_key": { "description": "The `lookup_key` stored on the Solution config after the import's suffix normalization. `null` when the Solution was not given a lookup key.", "example": "string", + "nullable": true, "type": "string" }, "solution": { @@ -15602,13 +17001,13 @@ }, "updated_at": { "description": "When the Solution config record was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "virtual_path": { "description": "The `virtual_path` stored on the Solution config, used as the stable dedupe key across owner scopes. `null` when no virtual path was assigned.", "example": "string", + "nullable": true, "type": "string" } }, @@ -15642,6 +17041,7 @@ "code": { "description": "Machine-readable conflict code present when `status` is `\"conflict\"`, identifying the specific conflict reason. `null` when `status` is `\"ready\"`.", "example": "string", + "nullable": true, "type": "string" }, "dry_run": { @@ -15652,16 +17052,19 @@ "existing_solution_version": { "description": "Semver string of the Solution version already present in the library. `null` when no prior version exists.", "example": "1.0.0", + "nullable": true, "type": "string" }, "incoming_solution_version": { "description": "Semver string of the Solution version in the bundle being imported. `null` when the bundle does not declare a version.", "example": "1.0.0", + "nullable": true, "type": "string" }, "message": { "description": "Human-readable description of the import status or conflict reason, suitable for display in a confirmation dialog. `null` when no detail is available.", "example": "string", + "nullable": true, "type": "string" }, "status": { @@ -15746,6 +17149,7 @@ "lookup_key": { "description": "The `lookup_key` stamped on the provisioned resource. `null` for `AgentSkill`, which is a join record and does not carry a lookup key.", "example": "string", + "nullable": true, "type": "string" }, "solution": { @@ -15808,16 +17212,19 @@ "agent": { "description": "Materialized agent for this customer (`agi_...`). `null` for a row without an agent.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_name": { "description": "Human-readable display name of the materialized agent. `null` when no agent is visible.", "example": "Example Name", + "nullable": true, "type": "string" }, "attachment_ref": { "description": "Opaque tagged reference to the deployment target. Consumers interpret its kind.", "example": {}, + "nullable": true, "type": "object" }, "created_at": { @@ -15834,6 +17241,7 @@ "customer_label": { "description": "Human-readable customer label. `null` when the vendor did not provide one.", "example": "string", + "nullable": true, "type": "string" }, "id": { @@ -15844,16 +17252,19 @@ "local_edit_count": { "description": "Count of local agent edits relative to the pinned template. `null` when unavailable.", "example": 1, + "nullable": true, "type": "integer" }, "pinned_template_version": { "description": "Pinned template version record (`cfv_...`). `null` when no version is pinned.", "example": "cfv_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "pinned_version_number": { "description": "Human-readable version number of the pinned template. `null` when unavailable.", "example": 1, + "nullable": true, "type": "integer" }, "solution_template_config": { @@ -16067,7 +17478,7 @@ "category_keys": [ "string" ], - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "description": "An example description.", "events": {}, "id": "id_0aBcDeFgHiJkLmNoPqRsTu", @@ -16117,7 +17528,7 @@ "virtual_path": "string" } ], - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "upgrade_available": true, "virtual_path": "string" }, @@ -16134,13 +17545,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -16156,6 +17567,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -16166,16 +17578,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -16188,25 +17603,43 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { - "$ref": "#/components/schemas/ImageSource", - "description": "Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo." + "allOf": [ + { + "$ref": "#/components/schemas/ImageSource" + } + ], + "description": "Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo.", + "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 }, "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -16222,6 +17655,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -16237,11 +17671,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -16257,6 +17693,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -16268,8 +17705,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -16280,6 +17716,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -16508,20 +17945,28 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { - "$ref": "#/components/schemas/SolutionTemplateDetails", - "description": "Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details." + "allOf": [ + { + "$ref": "#/components/schemas/SolutionTemplateDetails" + } + ], + "description": "Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details.", + "nullable": true }, "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -16532,21 +17977,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -16845,6 +18294,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -16876,8 +18330,36 @@ "type": "object" }, "user": { - "$ref": "#/components/schemas/User", - "description": "The authenticated user associated with the token. `null` when the token is invalid or absent." + "allOf": [ + { + "$ref": "#/components/schemas/User" + } + ], + "description": "The authenticated user associated with the token. `null` when the token is invalid or absent.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "nullable": true } }, "required": [ @@ -16994,6 +18476,11 @@ "description": "A long-lived API credential associated with a system account, used to authenticate server-to-server requests.", "example": { "created_at": "2024-01-01T00:00:00Z", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "expires_at": "2024-01-01T00:00:00Z", "id": "sat_0aBcDeFgHiJkLmNoPqRsTu", "last_used_at": "2024-01-01T00:00:00Z", @@ -17009,10 +18496,41 @@ "format": "date-time", "type": "string" }, + "created_by_agent_user": { + "description": "Agent user that minted this token (`usr_...`). `null` unless an agent minted it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that minted this token (`dva_...`). `null` unless minted with a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that minted this token (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that minted this token (`tem_...`). `null` unless minted as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who minted this token (`usr_...`). Distinct from the token subject. `null` on legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, "expires_at": { "description": "When the token expires. `null` on legacy rows that predate stored expiry.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "id": { @@ -17024,22 +18542,26 @@ "description": "When this token was last used to authenticate a request. `null` if the token has never been used.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "name": { - "description": "Human-readable label assigned to this token at creation time.", + "description": "Human-readable label assigned to this token at creation time. `null` when no label was supplied.", "example": "Example Name", + "nullable": true, "type": "string" }, "revoked_at": { "description": "When this token was revoked. `null` if the token is still active.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "scopes": { "description": "Space-separated OAuth scopes stamped on the token. `null` on legacy rows; treat as `full_access`.", "example": "string", + "nullable": true, "type": "string" }, "token": { @@ -17084,6 +18606,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -17113,6 +18636,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -17127,6 +18653,7 @@ "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" }, "blocked_by_count": { @@ -17138,6 +18665,7 @@ "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": { @@ -17152,17 +18680,38 @@ "type": "string" }, "created_by_actor": { - "$ref": "#/components/schemas/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)." + "allOf": [ + { + "$ref": "#/components/schemas/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 }, "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": { @@ -17182,12 +18731,20 @@ "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": { @@ -17222,25 +18779,48 @@ "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": { - "$ref": "#/components/schemas/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)." + "allOf": [ + { + "$ref": "#/components/schemas/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 }, "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -17251,6 +18831,25 @@ "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" }, "status": { @@ -17276,11 +18875,13 @@ "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": { @@ -17292,6 +18893,7 @@ "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" } }, @@ -17528,8 +19130,41 @@ }, "properties": { "acl": { - "$ref": "#/components/schemas/Acl", - "description": "Access control list governing visibility and join permissions for this team. `null` when no ACL restrictions are applied and the team inherits default access rules." + "allOf": [ + { + "$ref": "#/components/schemas/Acl" + } + ], + "description": "Access control list governing visibility and join permissions for this team. `null` when no ACL restrictions are applied and the team inherits default access rules.", + "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 }, "app": { "description": "ID of the developer application this team belongs to (`dap_...`). `null` if the team is not scoped to an app.", @@ -17539,6 +19174,7 @@ "badges": { "description": "Aggregated badge counts for the team, keyed by category. `null` when badge data is not loaded.", "example": {}, + "nullable": true, "type": "object" }, "created_at": { @@ -17550,6 +19186,7 @@ "description": { "description": "Human-readable description of the team's purpose. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -17560,6 +19197,7 @@ "membership_status": { "description": "The authenticated viewer's role on this team. One of `\"owner\"`, `\"admin\"`, or `\"member\"`. `null` if the viewer is not a member.", "example": "member", + "nullable": true, "type": "string" }, "metadata": { @@ -17577,16 +19215,19 @@ "org": { "description": "ID of the organization this team belongs to (`org_...`). `null` if the team is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this team is scoped to (`dsb_...`). `null` outside sandbox contexts.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "slug": { "description": "URL-safe slug for the team, derived from the team name. `null` if not set.", "example": "example-slug", + "nullable": true, "type": "string" }, "updated_at": { @@ -17826,6 +19467,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -17843,8 +19489,194 @@ }, "properties": { "agent": { - "$ref": "#/components/schemas/Agent", - "description": "The agent associated with this membership, as an expanded agent object. `null` when the member is a user, the type is unknown, or the association is not preloaded." + "allOf": [ + { + "$ref": "#/components/schemas/Agent" + } + ], + "description": "The agent associated with this membership, as an expanded agent object. `null` when the member is a user, the type is unknown, or the association is not preloaded.", + "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" + } + ] + }, + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "created_at": "2024-01-01T00:00:00Z", + "default_model": "claude-3-7-sonnet-latest", + "description": "An example description.", + "email": "user@example.com", + "id": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "identity": "You are a helpful assistant that answers questions about ArchAstro products.", + "last_applied_template_config": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "lookup_key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "originator": "deploy-pipeline", + "phone_number": "+15555550123", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_solution": { + "current_solution": { + "category_keys": [ + "string" + ], + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "events": {}, + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "image_url": "https://example.com", + "kind": "Solution", + "latest_solution": "id_0aBcDeFgHiJkLmNoPqRsTu", + "latest_version": "1.0.0", + "lookup_key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_logo": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "org_name": "Example Name", + "org_slug": "example-slug", + "owners": [ + "string" + ], + "readme_url": "https://example.com", + "screenshot_urls": [ + "https://example.com" + ], + "solution_id": "01234567-89ab-cdef-0123-456789abcdef", + "solution_version": "1.2.0", + "tag_keys": [ + "string" + ], + "template_kind": "AgentTemplate", + "templates": [ + { + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "AgentTemplate", + "lookup_key": "string", + "name": "Example Name", + "readme_url": "https://example.com", + "virtual_path": "string" + } + ], + "updated_at": "2024-01-01T00:00:00Z", + "upgrade_available": true, + "virtual_path": "string" + }, + "solution": { + "category_keys": [ + "string" + ], + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "events": {}, + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "image_url": "https://example.com", + "kind": "Solution", + "latest_solution": "id_0aBcDeFgHiJkLmNoPqRsTu", + "latest_version": "1.0.0", + "lookup_key": "string", + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_logo": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "org_name": "Example Name", + "org_slug": "example-slug", + "owners": [ + "string" + ], + "readme_url": "https://example.com", + "screenshot_urls": [ + "https://example.com" + ], + "solution_id": "01234567-89ab-cdef-0123-456789abcdef", + "solution_version": "1.2.0", + "tag_keys": [ + "string" + ], + "template_kind": "AgentTemplate", + "templates": [ + { + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "AgentTemplate", + "lookup_key": "string", + "name": "Example Name", + "readme_url": "https://example.com", + "virtual_path": "string" + } + ], + "updated_at": "2024-01-01T00:00:00Z", + "upgrade_available": true, + "virtual_path": "string" + }, + "template": { + "created_at": "2024-01-01T00:00:00Z", + "description": "An example description.", + "display_name": "Example Name", + "id": "id_0aBcDeFgHiJkLmNoPqRsTu", + "kind": "agent_tool_template", + "lookup_key": "string", + "name": "Example Name", + "updated_at": "2024-01-01T00:00:00Z", + "virtual_path": "string" + } + }, + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "template_upgrade_available": true, + "updated_at": "2024-01-01T00:00:00Z", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" + }, + "nullable": true }, "created_at": { "description": "When this membership record was created (ISO 8601).", @@ -17873,11 +19705,26 @@ "name": { "description": "Display name of the member, derived from the associated user or agent. `null` if the principal is unknown.", "example": "Example Name", + "nullable": true, "type": "string" }, "profile_picture": { - "$ref": "#/components/schemas/ImageSource", - "description": "Profile picture of the member, derived from the associated user or agent. `null` if not set or principal is unknown." + "allOf": [ + { + "$ref": "#/components/schemas/ImageSource" + } + ], + "description": "Profile picture of the member, derived from the associated user or agent. `null` if not set or principal is unknown.", + "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 }, "role": { "description": "The member's role within the team. One of `\"owner\"`, `\"admin\"`, or `\"member\"`.", @@ -17887,6 +19734,7 @@ "team": { "description": "The team this membership belongs to, as an expanded team object. `null` when the team association is not preloaded.", "example": {}, + "nullable": true, "type": "object" }, "type": { @@ -17901,8 +19749,36 @@ "type": "string" }, "user": { - "$ref": "#/components/schemas/User", - "description": "The user associated with this membership, as an expanded user object. `null` when the member is an agent, the type is unknown, or the association is not preloaded." + "allOf": [ + { + "$ref": "#/components/schemas/User" + } + ], + "description": "The user associated with this membership, as an expanded user object. `null` when the member is an agent, the type is unknown, or the association is not preloaded.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "nullable": true } }, "required": [ @@ -18120,6 +19996,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -18191,7 +20072,7 @@ "description": "A chat thread, representing a conversation channel that can be owned by a user, team, or agent and may contain messages, participants, and AI agent activity.", "example": { "agent_user": "agi_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "creator": "usr_0aBcDeFgHiJkLmNoPqRsTu", "description": "An example description.", "id": "string", @@ -18201,7 +20082,7 @@ "is_unlisted": true, "key": "string", "kind": "string", - "last_activity": "2024-01-01T00:00:00Z", + "last_activity": "string", "last_message_preview": "Sounds good — I'll ship the fix tomorrow.", "last_message_sender": "Alice Chen", "metadata": { @@ -18342,7 +20223,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -18353,6 +20234,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -18569,9 +20455,9 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "team" }, @@ -18579,17 +20465,18 @@ "agent_user": { "description": "ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "created_at": { "description": "When the thread was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "creator": { "description": "User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "oneOf": [ { "type": "string" @@ -18600,6 +20487,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -18618,21 +20510,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -18655,36 +20581,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -18698,6 +20631,7 @@ "description": { "description": "Optional description or purpose statement for the thread. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -18728,27 +20662,31 @@ "key": { "description": "Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set.", "example": "string", + "nullable": true, "type": "string" }, "kind": { - "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params.", + "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"personal\"` for a user-and-owned-agents roster, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, or `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived.", "example": "string", + "nullable": true, "type": "string" }, "last_activity": { "description": "When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment.", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", + "nullable": true, "type": "string" }, "last_message_preview": { "description": "Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment.", "example": "Sounds good — I'll ship the fix tomorrow.", + "nullable": true, "type": "string" }, "last_message_sender": { "description": "Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment.", "example": "Alice Chen", + "nullable": true, "type": "string" }, "metadata": { @@ -18756,6 +20694,7 @@ "example": { "key": "value" }, + "nullable": true, "type": "object" }, "muted": { @@ -18766,11 +20705,153 @@ "org": { "description": "ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "parent_message": { - "$ref": "#/components/schemas/Message", - "description": "The message that spawned this thread as a sub-thread. `null` for top-level threads." + "allOf": [ + { + "$ref": "#/components/schemas/Message" + } + ], + "description": "The message that spawned this thread as a sub-thread. `null` for top-level threads.", + "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" + } + ] + }, + "actors": [ + { + "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 + } + } + ], + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "agent_mode": "cli", + "attachments": [ + { + "content_type": "application/json", + "description": "An example description.", + "filename": "string", + "height": 1, + "id": "string", + "image_height": 1, + "image_source": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "image_url": "https://example.com", + "image_width": 1, + "media_type": "application/json", + "name": "Example Name", + "object": {}, + "title": "Example Title", + "type": "file", + "url": "https://example.com", + "variants": [ + { + "content_type": "application/json", + "created_at": "2024-01-01T00:00:00Z", + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "filename": "string", + "height": 600, + "id": "mvr_0aBcDeFgHiJkLmNoPqRsTu", + "image_source": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "updated_at": "2024-01-01T00:00:00Z", + "url": "https://example.com", + "variant_key": "original", + "width": 800 + } + ], + "version": 1, + "width": 1 + } + ], + "branched_thread": "string", + "content": "Hello, how can I help you today?", + "created_at": "2024-01-01T00:00:00Z", + "has_replies": true, + "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", + "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", + "is_deleted": true, + "legacy_agent": "string", + "metadata": { + "key": "value" + }, + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "reactions": [ + { + "payload": { + "key": "value" + }, + "type": "emoji_reaction", + "user": "string" + } + ], + "rendering_mode": "reply", + "replies": [ + {} + ], + "replies_after_cursor": "string", + "replies_before_cursor": "string", + "reply_count": 1, + "reply_to": {}, + "root_message_id": "string", + "sandbox": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "string", + "type": "note", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "visibility": "default" + }, + "nullable": true }, "participant": { "description": "Array of participant user IDs (`usr_...`) who are members of this thread.", @@ -18804,16 +20885,19 @@ "items": { "$ref": "#/components/schemas/Agent" }, + "nullable": true, "type": "array" }, "role": { "description": "The authenticated user's membership role in this thread, e.g. `\"owner\"`, `\"member\"`, or `\"viewer\"`. `null` if the user is not a member.", "example": "member", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "settings": { @@ -18823,6 +20907,7 @@ "slug": { "description": "URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned.", "example": "example-slug", + "nullable": true, "type": "string" }, "sub_threads": { @@ -18833,6 +20918,7 @@ "items": { "type": "object" }, + "nullable": true, "type": "array" }, "tags": { @@ -18849,32 +20935,36 @@ "team": { "description": "ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "title": { "description": "Human-readable name of the thread. `null` if no title has been set.", "example": "Example Title", + "nullable": true, "type": "string" }, "ttl": { - "description": "Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire.", - "example": 3600, - "type": "integer" + "description": "Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire.", + "example": "2026-08-15T12:00:00", + "nullable": true, + "type": "string" }, "unread_count": { "description": "Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested.", "example": 5, + "nullable": true, "type": "integer" }, "updated_at": { "description": "When the thread was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "visibility": { @@ -19155,8 +21245,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -19165,24 +21256,25 @@ "Trajectory": { "description": "A recorded sequence of AI messages and tool interactions representing a single AI reasoning session. Trajectories are stored as structured message logs and can be replayed or inspected after execution.", "example": { - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", "id": "trj_0aBcDeFgHiJkLmNoPqRsTu", - "messages": {}, + "messages": [ + {} + ], "org": "org_0aBcDeFgHiJkLmNoPqRsTu", "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", - "updated_at": "2024-01-01T00:00:00Z" + "updated_at": "string" }, "properties": { "created_at": { "description": "When the trajectory was recorded (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "file": { - "description": "ID of the storage file that persists the raw trajectory data (`fil_...`). `null` if the trajectory has not been written to a file.", + "description": "ID of the storage file that persists the raw trajectory data (`fil_...`).", "example": "fil_0aBcDeFgHiJkLmNoPqRsTu", "type": "string" }, @@ -19193,28 +21285,35 @@ }, "messages": { "description": "Serialized message log for this trajectory. Contains the ordered sequence of AI and tool messages produced during the session.", - "example": {}, - "type": "object" + "example": [ + {} + ], + "items": { + "type": "object" + }, + "type": "array" }, "org": { "description": "ID of the organization this trajectory belongs to (`org_...`). `null` for trajectories outside an org context.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this trajectory is scoped to (`sbx_...`). `null` for production trajectories.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this trajectory is scoped to (`team_...`). `null` for trajectories not associated with a team.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "updated_at": { "description": "When the trajectory record was last updated (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" } }, @@ -19246,11 +21345,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -19266,11 +21367,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -19282,6 +21385,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -19297,6 +21401,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -19315,21 +21424,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -19352,36 +21495,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -20284,7 +22434,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -20432,7 +22582,7 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { @@ -20466,6 +22616,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -20616,23 +22767,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -20643,16 +22796,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -20670,26 +22826,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -20823,6 +22984,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -20897,13 +23059,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -20919,6 +23081,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -20929,16 +23092,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -20951,11 +23117,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -20969,40 +23137,48 @@ "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" } }, @@ -21011,11 +23187,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -21031,6 +23209,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -21046,11 +23225,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -21066,6 +23247,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -21098,6 +23280,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -21105,6 +23288,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -21129,12 +23313,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -21150,10 +23335,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -21178,6 +23365,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -21203,6 +23391,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -21251,11 +23440,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -21266,21 +23457,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -21293,8 +23488,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -21305,6 +23499,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -21390,13 +23585,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -21412,6 +23607,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -21422,16 +23618,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -21444,11 +23643,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -21462,40 +23663,48 @@ "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" } }, @@ -21504,11 +23713,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -21524,6 +23735,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -21539,11 +23751,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -21559,6 +23773,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -21591,6 +23806,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -21598,6 +23814,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -21622,12 +23839,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -21643,10 +23861,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -21671,6 +23891,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -21696,6 +23917,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -21744,11 +23966,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -21759,21 +23983,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -21786,8 +24014,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -21798,6 +24025,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -21833,11 +24061,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -21853,11 +24083,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -21869,6 +24101,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -21888,22 +24121,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -22026,6 +24261,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -22044,21 +24284,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -22081,36 +24355,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -29307,6 +31588,7 @@ "description": "An example description.", "is_unlisted": true, "key": "string", + "kind": "personal", "members": [ { "id": "string", @@ -29344,6 +31626,7 @@ "description": "An example description.", "is_unlisted": true, "key": "string", + "kind": "personal", "members": [ { "id": "string", @@ -29388,6 +31671,14 @@ "example": "string", "type": "string" }, + "kind": { + "description": "Optional behavioral subtype. `personal` is accepted only for a user-owned thread and limits membership to that user and agents currently owned by them. Mirror kinds remain server-derived and cannot be selected by callers.", + "enum": [ + "personal" + ], + "example": "personal", + "type": "string" + }, "members": { "description": "Users and agents to add atomically when the thread is created. Each target must pass the same authorization rules as a post-creation member add. Slack mirror threads reject non-empty caller-supplied rosters because their membership is sync-owned.", "example": [ @@ -29476,8 +31767,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -30897,6 +33189,9 @@ }, "401": { "description": "Unauthorized" + }, + "403": { + "description": "Forbidden — app scope required" } }, "summary": "List available AI models", @@ -36323,6 +38618,584 @@ ] } }, + "/api/v1/event_subscription_deliveries/{delivery}/acknowledge": { + "post": { + "description": "Acknowledges a delivery using its current receipt handle. Repeating the same acknowledgement is idempotent; a stale or incorrect receipt returns 409. Acknowledging a delivery that aged out under the subscription's retention returns `delivery_not_found` — the event was already counted in `dropped_events_total`, and the acknowledgement should not be retried.", + "operationId": "post_api_v1_event_subscription_deliveries__delivery_acknowledge", + "parameters": [ + { + "description": "Delivery ID (`esd_...`).", + "example": "string", + "in": "path", + "name": "delivery", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "receipt_handle": "string" + }, + "properties": { + "receipt_handle": { + "description": "Opaque handle returned by claim.", + "example": "string", + "type": "string" + } + }, + "required": [ + "receipt_handle" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No content" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Event subscription delivery not found" + }, + "409": { + "description": "The delivery lease is no longer current" + } + }, + "summary": "Acknowledge a claimed event", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/event_subscriptions": { + "get": { + "description": "Lists the subscriptions visible to the caller, with current queue counters.", + "operationId": "get_api_v1_event_subscriptions", + "parameters": [ + { + "description": "Page number, starting at 1.", + "example": 1, + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Subscriptions per page, from 1 through 100.", + "example": 1, + "in": "query", + "name": "per_page", + "required": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSubscriptionPage" + } + } + }, + "description": "Subscriptions visible to this caller." + }, + "401": { + "description": "Unauthorized" + }, + "422": { + "description": "Invalid parameters" + } + }, + "summary": "List domain-event subscriptions", + "x-auth": [ + "publishable_key", + "bearer" + ] + }, + "post": { + "description": "Creates a durable subscription that receives exportable domain events matching its exact event names. Matching events fan out into a per-subscription queue bounded by max_pending_events and retention_seconds; consume with claim and acknowledge.", + "operationId": "post_api_v1_event_subscriptions", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "event_names": [ + "Example Name" + ], + "max_pending_events": 1, + "name": "Example Name", + "retention_seconds": 1, + "status": "active", + "visibility_timeout_seconds": 1 + }, + "properties": { + "event_names": { + "description": "Exact event names to receive.", + "example": [ + "Example Name" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "max_pending_events": { + "description": "Queue cap. Defaults to 100; maximum 1000.", + "example": 1, + "type": "integer" + }, + "name": { + "description": "Customer-defined subscription name.", + "example": "Example Name", + "type": "string" + }, + "retention_seconds": { + "description": "Delivery retention in seconds. Defaults to 86400 (24 hours); between 7200 and 2592000. Applies to future deliveries only.", + "example": 1, + "type": "integer" + }, + "status": { + "description": "Initial status. Defaults to active.", + "enum": [ + "active", + "paused" + ], + "example": "active", + "type": "string" + }, + "visibility_timeout_seconds": { + "description": "Default claim lease in seconds. Defaults to 300.", + "example": 1, + "type": "integer" + } + }, + "required": [ + "name", + "event_names" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSubscription" + } + } + }, + "description": "The new volatile subscription." + }, + "401": { + "description": "Unauthorized" + }, + "422": { + "description": "Invalid parameters; Validation failed" + } + }, + "summary": "Create a domain-event subscription", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/event_subscriptions/{subscription}": { + "delete": { + "description": "Deletes the subscription and every delivery still in its queue.", + "operationId": "delete_api_v1_event_subscriptions__subscription", + "parameters": [ + { + "description": "Subscription ID (`esub_...`).", + "example": "string", + "in": "path", + "name": "subscription", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No content" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Event subscription not found" + } + }, + "summary": "Delete a domain-event subscription", + "x-auth": [ + "publishable_key", + "bearer" + ] + }, + "get": { + "description": "Returns one subscription and its current queue counters.", + "operationId": "get_api_v1_event_subscriptions__subscription", + "parameters": [ + { + "description": "Subscription ID (`esub_...`).", + "example": "string", + "in": "path", + "name": "subscription", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSubscription" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Event subscription not found" + } + }, + "summary": "Get a domain-event subscription", + "x-auth": [ + "publishable_key", + "bearer" + ] + }, + "patch": { + "description": "Updates matching, status, or queue limits for future fanout. Already queued deliveries remain unless a lower cap trims the oldest entries; retention changes apply to future deliveries only.", + "operationId": "patch_api_v1_event_subscriptions__subscription", + "parameters": [ + { + "description": "Subscription ID (`esub_...`).", + "example": "string", + "in": "path", + "name": "subscription", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "event_names": [ + "Example Name" + ], + "max_pending_events": 1, + "name": "Example Name", + "retention_seconds": 1, + "status": "active", + "visibility_timeout_seconds": 1 + }, + "properties": { + "event_names": { + "example": [ + "Example Name" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "max_pending_events": { + "example": 1, + "type": "integer" + }, + "name": { + "example": "Example Name", + "type": "string" + }, + "retention_seconds": { + "description": "Delivery retention in seconds. Defaults to 86400 (24 hours); between 7200 and 2592000. Applies to future deliveries only.", + "example": 1, + "type": "integer" + }, + "status": { + "enum": [ + "active", + "paused" + ], + "example": "active", + "type": "string" + }, + "visibility_timeout_seconds": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSubscription" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Event subscription not found" + }, + "422": { + "description": "Invalid parameters; Validation failed" + } + }, + "summary": "Update a domain-event subscription", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/event_subscriptions/{subscription}/claim": { + "post": { + "description": "Atomically leases the oldest unacknowledged delivery. Returns an empty data array when the queue is empty or its head already has an active lease. Passing max_events opts into batch mode, where leased entries are skipped instead of blocking; wait_seconds bounds a long poll on an empty queue.", + "operationId": "post_api_v1_event_subscriptions__subscription_claim", + "parameters": [ + { + "description": "Subscription ID (`esub_...`).", + "example": "string", + "in": "path", + "name": "subscription", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "consumer_id": "string", + "max_events": 1, + "request_id": "string", + "visibility_timeout_seconds": 1, + "wait_seconds": 1 + }, + "properties": { + "consumer_id": { + "description": "Consumer identity between 1 and 128 bytes, recorded on the lease for attribution.", + "example": "string", + "type": "string" + }, + "max_events": { + "description": "Opts into batch mode: leases up to this many lease-available deliveries (between 1 and 20) in sequence order, skipping leased entries instead of blocking on the head. Omit to keep strict head-of-line semantics.", + "example": 1, + "type": "integer" + }, + "request_id": { + "description": "Idempotency key between 1 and 128 bytes. Use a value unique per claim attempt (e.g. a UUID) — the key is scoped to the subscription, so a reused value takes over whatever leases it last stamped. Retrying a claim with the same request_id while its leases are unexpired returns the same deliveries (regardless of max_events) with fresh receipt handles and refreshed leases.", + "example": "string", + "type": "string" + }, + "visibility_timeout_seconds": { + "description": "Lease duration override between 15 and 3600 seconds.", + "example": 1, + "type": "integer" + }, + "wait_seconds": { + "description": "Long-poll bound between 0 and 20 seconds. When the queue is empty, the request waits up to this long for a delivery before returning an empty data array. 0 (or omitting) returns immediately.", + "example": 1, + "type": "integer" + } + }, + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSubscriptionClaim" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Event subscription not found" + }, + "422": { + "description": "Invalid parameters; Validation failed" + } + }, + "summary": "Claim events from a subscription", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/event_subscriptions/{subscription}/head": { + "get": { + "description": "Returns the oldest unacknowledged delivery without reserving it. This diagnostic read cannot be used as a safe substitute for claim.", + "operationId": "get_api_v1_event_subscriptions__subscription_head", + "parameters": [ + { + "description": "Subscription ID (`esub_...`).", + "example": "string", + "in": "path", + "name": "subscription", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSubscriptionHead" + } + } + }, + "description": "Successful response" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Event subscription not found" + } + }, + "summary": "Peek at the head of a subscription queue", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, + "/api/v1/event_subscriptions/{subscription}/queue": { + "get": { + "description": "Returns a non-reserving, oldest-first view of unacknowledged deliveries, including the queue's loss indicators (queue_epoch, dropped_events_total, dropped_through_position). Use claim to obtain a receipt handle before acknowledging.", + "operationId": "get_api_v1_event_subscriptions__subscription_queue", + "parameters": [ + { + "description": "Subscription ID (`esub_...`).", + "example": "string", + "in": "path", + "name": "subscription", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Maximum entries to return, from 1 through 100.", + "example": 1, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "Opaque cursor for the preceding page.", + "example": "string", + "in": "query", + "name": "before_cursor", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Opaque cursor for the following page.", + "example": "string", + "in": "query", + "name": "after_cursor", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventSubscriptionQueue" + } + } + }, + "description": "Successful response" + }, + "400": { + "description": "Invalid cursor" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Event subscription not found" + } + }, + "summary": "Read a subscription queue", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/extractions": { "post": { "description": "Records a text-extraction job for a document (`file`) or a URL (`url` + `mode`).\nThe job is owner-scoped and tagged with the caller-supplied `destination`\nnamespace, **without** committing knowledge to an agent (no embeddings, no\nagent attach).\n\nExactly one of `file` or (`url` + `mode`) is required.\n\nDocument extraction (`file`) runs synchronously: the response already\nreflects the final state (`done` with its output, or an error if extraction\ncouldn't complete), status `201`. URL extraction (`url` + `mode`) submits an\nasync crawl and returns immediately with state `running`, status `202` —\npoll `GET /extractions/:extraction` for its terminal state.\n", @@ -38138,6 +41011,9 @@ }, "422": { "description": "Invalid parameters; Validation failed" + }, + "502": { + "description": "Service unavailable" } }, "summary": "Create a knowledge source", @@ -38327,7 +41203,10 @@ "description": "Knowledge source not found" }, "422": { - "description": "Validation failed" + "description": "Invalid parameters; Validation failed" + }, + "502": { + "description": "Service unavailable" } }, "summary": "Update a knowledge source", @@ -42513,6 +45392,56 @@ "summary": "Retrieve a Solution README or asset" } }, + "/api/v1/solutions/{solution}/reconcile_product_knowledge": { + "post": { + "description": "Recomputes every stamped customer's knowledge-search source allowlist\nfrom the template-resolved customer refs plus the install's current marked\nproduct-knowledge sources. Safe to retry; partial failures are returned by\ncustomer key rather than hidden behind an aggregate success.\n", + "operationId": "post_api_v1_solutions__solution_reconcile_product_knowledge", + "parameters": [ + { + "description": "Installed Customer Management Solution config (`cfg_...`) to reconcile.", + "example": "string", + "in": "path", + "name": "solution", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductKnowledgeReconcileResponse" + } + } + }, + "description": "Per-customer convergence result for this installed solution." + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Solution not found" + }, + "502": { + "description": "Service unavailable" + } + }, + "summary": "Reconcile Customer Management product knowledge", + "x-auth": [ + "publishable_key", + "bearer" + ] + } + }, "/api/v1/solutions/{solution}/upgrade": { "post": { "description": "Applies an incoming bundle to an already-installed Solution in a single atomic\ntransaction, bringing its configs in line with the new bundle. Config IDs are\npreserved across the upgrade. Configs that existed in the old bundle but are\nabsent from the new one are orphaned (top-level) or hard-deleted (child rows).\n\nTwo mutually exclusive source modes: pass `target_solution` to pull the\nincoming bundle from an existing Solution by ID or `lookup_key`, or pass\n`solution_bundle` to supply a complete inline bundle directly. Exactly one\nmust be present.\n\nWhen `dry_run` is `true` the full diff is computed and returned but no\nchanges are written. Pass the dry-run response's `review_fingerprint` as\n`expected_review_fingerprint` when applying to guard against the bundle\nchanging between review and apply.\n", @@ -43374,6 +46303,7 @@ "agent": "string", "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "lease_id": "string", "lease_session_id": "string", "links": {}, @@ -43386,6 +46316,9 @@ "owner_user": "string", "parent": "string", "priority": 1, + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "string", "tags": [ "string" @@ -43410,6 +46343,11 @@ "format": "date-time", "type": "string" }, + "epic": { + "description": "Replacement grouping label. Pass null to clear it.", + "example": "string", + "type": "string" + }, "lease_id": { "description": "Current caller-held lease UUID. Must be paired with `lease_session_id`.", "example": "string", @@ -43462,6 +46400,21 @@ "example": 1, "type": "integer" }, + "source_id": { + "description": "Replacement source object identity. Must be supplied with the other source fields.", + "example": "string", + "type": "string" + }, + "source_scope": { + "description": "Replacement source container. Pass together with `source_type` and `source_id`, or pass all three as null to clear the source.", + "example": "string", + "type": "string" + }, + "source_type": { + "description": "Replacement source object kind. Must be supplied with the other source fields.", + "example": "string", + "type": "string" + }, "status": { "description": "Updated status: `open`, `in_progress`, or `done`.", "example": "string", @@ -43815,6 +46768,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -43844,6 +46798,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -43897,6 +46854,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -43926,6 +46884,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -43968,6 +46929,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -43997,6 +46959,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -44011,6 +46976,7 @@ "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" }, "blocked_by_count": { @@ -44022,6 +46988,7 @@ "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": { @@ -44051,20 +47018,24 @@ "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": { @@ -44078,40 +47049,48 @@ "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" } }, @@ -44123,11 +47102,13 @@ "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": { @@ -44166,12 +47147,20 @@ "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": { @@ -44206,6 +47195,7 @@ "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": { @@ -44224,20 +47214,24 @@ "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": { @@ -44251,40 +47245,48 @@ "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" } }, @@ -44296,16 +47298,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -44316,6 +47321,25 @@ "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" }, "status": { @@ -44341,11 +47365,13 @@ "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": { @@ -44357,6 +47383,7 @@ "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" } }, @@ -44652,6 +47679,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -44681,6 +47709,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -44734,6 +47765,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -44763,6 +47795,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -44805,6 +47840,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -44834,6 +47870,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -44848,6 +47887,7 @@ "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" }, "blocked_by_count": { @@ -44859,6 +47899,7 @@ "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": { @@ -44888,20 +47929,24 @@ "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": { @@ -44915,40 +47960,48 @@ "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" } }, @@ -44960,11 +48013,13 @@ "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": { @@ -45003,12 +48058,20 @@ "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": { @@ -45043,6 +48106,7 @@ "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": { @@ -45061,20 +48125,24 @@ "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": { @@ -45088,40 +48156,48 @@ "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" } }, @@ -45133,16 +48209,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -45153,6 +48232,25 @@ "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" }, "status": { @@ -45178,11 +48276,13 @@ "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": { @@ -45194,6 +48294,7 @@ "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" } }, @@ -45440,16 +48541,19 @@ "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": { @@ -45463,40 +48567,48 @@ "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" } }, @@ -46323,6 +49435,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -46352,6 +49465,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -46405,6 +49521,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -46434,6 +49551,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -46476,6 +49596,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -46505,6 +49626,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -46519,6 +49643,7 @@ "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" }, "blocked_by_count": { @@ -46530,6 +49655,7 @@ "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": { @@ -46559,20 +49685,24 @@ "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": { @@ -46586,40 +49716,48 @@ "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" } }, @@ -46631,11 +49769,13 @@ "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": { @@ -46674,12 +49814,20 @@ "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": { @@ -46714,6 +49862,7 @@ "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": { @@ -46732,20 +49881,24 @@ "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": { @@ -46759,40 +49912,48 @@ "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" } }, @@ -46804,16 +49965,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -46824,6 +49988,25 @@ "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" }, "status": { @@ -46849,11 +50032,13 @@ "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": { @@ -46865,6 +50050,7 @@ "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" } }, @@ -47030,6 +50216,9 @@ "401": { "description": "Unauthorized" }, + "403": { + "description": "Forbidden" + }, "404": { "description": "Team or member not found" } @@ -47363,6 +50552,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -47514,6 +50704,7 @@ "badges": { "description": "Aggregated badge counts for the team, keyed by category. `null` when badge data is not loaded.", "example": {}, + "nullable": true, "type": "object" }, "created_at": { @@ -47525,6 +50716,7 @@ "description": { "description": "Human-readable description of the team's purpose. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -47535,6 +50727,7 @@ "membership_status": { "description": "The authenticated viewer's role on this team. One of `\"owner\"`, `\"admin\"`, or `\"member\"`. `null` if the viewer is not a member.", "example": "member", + "nullable": true, "type": "string" }, "metadata": { @@ -47552,16 +50745,19 @@ "org": { "description": "ID of the organization this team belongs to (`org_...`). `null` if the team is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this team is scoped to (`dsb_...`). `null` outside sandbox contexts.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "slug": { "description": "URL-safe slug for the team, derived from the team name. `null` if not set.", "example": "example-slug", + "nullable": true, "type": "string" }, "updated_at": { @@ -48569,36 +51765,43 @@ "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" } }, @@ -49723,6 +52926,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -49950,6 +53158,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -50174,6 +53387,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -50373,6 +53591,7 @@ "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, + "nullable": true, "properties": { "acl": { "description": "Access control list for the agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied and the agent is accessible to all members of its scope.", @@ -50404,6 +53623,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -50554,23 +53774,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -50581,16 +53803,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -50608,26 +53833,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -50761,6 +53991,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -50835,13 +54066,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -50857,6 +54088,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -50867,16 +54099,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -50889,11 +54124,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -50907,40 +54144,48 @@ "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" } }, @@ -50949,11 +54194,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -50969,6 +54216,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -50984,11 +54232,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -51004,6 +54254,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -51036,6 +54287,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -51043,6 +54295,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -51067,12 +54320,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -51088,10 +54342,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -51116,6 +54372,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -51141,6 +54398,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -51189,11 +54447,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -51204,21 +54464,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -51231,8 +54495,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -51243,6 +54506,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -51328,13 +54592,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -51350,6 +54614,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -51360,16 +54625,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -51382,11 +54650,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -51400,40 +54670,48 @@ "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" } }, @@ -51442,11 +54720,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -51462,6 +54742,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -51477,11 +54758,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -51497,6 +54780,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -51529,6 +54813,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -51536,6 +54821,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -51560,12 +54846,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -51581,10 +54868,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -51609,6 +54898,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -51634,6 +54924,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -51682,11 +54973,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -51697,21 +54990,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -51724,8 +55021,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -51736,6 +55032,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -51771,11 +55068,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -51791,11 +55090,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -51807,6 +55108,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -51826,22 +55128,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -51877,6 +55181,7 @@ "name": { "description": "Display name of the member, derived from the associated user or agent. `null` if the principal is unknown.", "example": "Example Name", + "nullable": true, "type": "string" }, "profile_picture": { @@ -51890,40 +55195,48 @@ "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" } }, @@ -51937,6 +55250,7 @@ "team": { "description": "The team this membership belongs to, as an expanded team object. `null` when the team association is not preloaded.", "example": {}, + "nullable": true, "type": "object" }, "type": { @@ -51956,6 +55270,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -51970,25 +55289,60 @@ "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", "sandbox_name": "Example Name" }, + "nullable": true, "properties": { "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -52011,36 +55365,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -52081,7 +55442,7 @@ ] }, "post": { - "description": "Adds a user or agent as a member of the specified team and returns the new\nmembership with HTTP 201. Provide exactly one of `user` or `agent` — supplying\nboth or neither returns a 400 error.\n\nThe caller must have permission to manage the team. When an `app` is provided,\nthe request is scoped to that app and the caller must hold a valid app-scoped\ntoken. The default role is `\"member\"` when `role` is omitted.\n", + "description": "Adds a user or agent as a member of the specified team and returns the new\nmembership with HTTP 201. Provide exactly one of `user` or `agent` — supplying\nboth or neither returns a 400 error.\n\nAdding a user requires permission to manage the team (team owner, team\nadmin, or org admin). Adding an agent with the default `\"member\"` role is\nalso open to any existing member of the team; assigning an elevated role to\nan agent still requires team-manage permission. When an `app` is provided,\nthe request is scoped to that app and the caller must hold a valid app-scoped\ntoken. The default role is `\"member\"` when `role` is omitted.\n", "operationId": "post_api_v1_teams__team_members", "parameters": [ { @@ -52358,16 +55719,19 @@ "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": { @@ -52381,40 +55745,48 @@ "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" } }, @@ -52569,6 +55941,46 @@ "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", @@ -52699,6 +56111,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -52728,6 +56141,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -52744,10 +56160,12 @@ "properties": { "after_cursor": { "example": "string", + "nullable": true, "type": "string" }, "before_cursor": { "example": "string", + "nullable": true, "type": "string" }, "data": { @@ -52782,6 +56200,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -52811,6 +56230,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -52853,6 +56275,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -52882,6 +56305,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -52896,6 +56322,7 @@ "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" }, "blocked_by_count": { @@ -52907,6 +56334,7 @@ "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": { @@ -52936,20 +56364,24 @@ "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": { @@ -52963,40 +56395,48 @@ "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" } }, @@ -53008,11 +56448,13 @@ "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": { @@ -53051,12 +56493,20 @@ "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": { @@ -53091,6 +56541,7 @@ "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": { @@ -53109,20 +56560,24 @@ "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": { @@ -53136,40 +56591,48 @@ "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" } }, @@ -53181,16 +56644,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -53201,6 +56667,25 @@ "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" }, "status": { @@ -53226,11 +56711,13 @@ "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": { @@ -53242,6 +56729,7 @@ "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" } }, @@ -53310,6 +56798,7 @@ "task": { "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "billing-cadence", "links": { "key": "value" }, @@ -53321,6 +56810,9 @@ "owner_user": "string", "parent": "tsk_01j3k5m7n9p2r4s6t8v0w1x2", "priority": 2, + "source_id": "ArchAstro/firstlanding", + "source_scope": "github.com", + "source_type": "repository", "status": "open", "tags": [ "backend", @@ -53346,6 +56838,7 @@ "example": { "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "billing-cadence", "links": { "key": "value" }, @@ -53357,6 +56850,9 @@ "owner_user": "string", "parent": "tsk_01j3k5m7n9p2r4s6t8v0w1x2", "priority": 2, + "source_id": "ArchAstro/firstlanding", + "source_scope": "github.com", + "source_type": "repository", "status": "open", "tags": [ "backend", @@ -53376,6 +56872,11 @@ "format": "date-time", "type": "string" }, + "epic": { + "description": "Optional free-form grouping label.", + "example": "billing-cadence", + "type": "string" + }, "links": { "description": "Arbitrary key-value map of named URLs or references associated with the task (e.g. external ticket links).", "example": { @@ -53415,6 +56916,21 @@ "example": 2, "type": "integer" }, + "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\"`, or `\"done\"`. Defaults to `\"open\"` when omitted.", "example": "open", @@ -53582,6 +57098,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -53611,6 +57128,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -53668,6 +57188,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -53697,6 +57218,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -53743,6 +57267,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -53772,6 +57297,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -53817,6 +57345,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -53846,6 +57375,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -53888,6 +57420,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -53917,6 +57450,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -53931,6 +57467,7 @@ "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" }, "blocked_by_count": { @@ -53942,6 +57479,7 @@ "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": { @@ -53971,20 +57509,24 @@ "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": { @@ -53998,40 +57540,48 @@ "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" } }, @@ -54043,11 +57593,13 @@ "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": { @@ -54086,12 +57638,20 @@ "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": { @@ -54126,6 +57686,7 @@ "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": { @@ -54144,20 +57705,24 @@ "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": { @@ -54171,40 +57736,48 @@ "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" } }, @@ -54216,16 +57789,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -54236,6 +57812,25 @@ "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" }, "status": { @@ -54261,11 +57856,13 @@ "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": { @@ -54277,6 +57874,7 @@ "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" } }, @@ -54497,6 +58095,46 @@ "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, @@ -54561,6 +58199,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -54590,6 +58229,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -54652,6 +58294,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -54681,6 +58324,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -54727,6 +58373,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -54756,6 +58403,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -54819,6 +58469,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -54848,6 +58499,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -54862,6 +58516,7 @@ "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" }, "blocked_by_count": { @@ -54873,6 +58528,7 @@ "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": { @@ -54902,20 +58558,24 @@ "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": { @@ -54929,40 +58589,48 @@ "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" } }, @@ -54974,11 +58642,13 @@ "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": { @@ -55017,12 +58687,20 @@ "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": { @@ -55057,6 +58735,7 @@ "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": { @@ -55075,20 +58754,24 @@ "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": { @@ -55102,40 +58785,48 @@ "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" } }, @@ -55147,16 +58838,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -55167,6 +58861,25 @@ "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" }, "status": { @@ -55192,11 +58905,13 @@ "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": { @@ -55208,6 +58923,7 @@ "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" } }, @@ -55375,6 +59091,46 @@ "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.", + "example": "string", + "in": "query", + "name": "source_type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks whose source matches this object identity.", + "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, @@ -55435,6 +59191,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -55464,6 +59221,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -55519,6 +59279,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -55548,6 +59309,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -55590,6 +59354,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -55619,6 +59384,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -55633,6 +59401,7 @@ "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" }, "blocked_by_count": { @@ -55644,6 +59413,7 @@ "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": { @@ -55673,20 +59443,24 @@ "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": { @@ -55700,40 +59474,48 @@ "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" } }, @@ -55745,11 +59527,13 @@ "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": { @@ -55788,12 +59572,20 @@ "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": { @@ -55828,6 +59620,7 @@ "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": { @@ -55846,20 +59639,24 @@ "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": { @@ -55873,40 +59670,48 @@ "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" } }, @@ -55918,16 +59723,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -55938,6 +59746,25 @@ "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" }, "status": { @@ -55963,11 +59790,13 @@ "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": { @@ -55979,6 +59808,7 @@ "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" } }, @@ -56220,7 +60050,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -56231,6 +60061,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -56447,7 +60282,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -56612,7 +60447,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -56623,6 +60458,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -56839,7 +60679,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -56850,7 +60690,7 @@ "description": "A chat thread, representing a conversation channel that can be owned by a user, team, or agent and may contain messages, participants, and AI agent activity.", "example": { "agent_user": "agi_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "creator": "usr_0aBcDeFgHiJkLmNoPqRsTu", "description": "An example description.", "id": "string", @@ -56860,7 +60700,7 @@ "is_unlisted": true, "key": "string", "kind": "string", - "last_activity": "2024-01-01T00:00:00Z", + "last_activity": "string", "last_message_preview": "Sounds good — I'll ship the fix tomorrow.", "last_message_sender": "Alice Chen", "metadata": { @@ -57001,7 +60841,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -57012,6 +60852,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -57228,9 +61073,9 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "team" }, @@ -57238,17 +61083,18 @@ "agent_user": { "description": "ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "created_at": { "description": "When the thread was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "creator": { "description": "User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "oneOf": [ { "type": "string" @@ -57259,6 +61105,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -57277,21 +61128,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -57314,36 +61199,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -57357,6 +61249,7 @@ "description": { "description": "Optional description or purpose statement for the thread. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -57387,27 +61280,31 @@ "key": { "description": "Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set.", "example": "string", + "nullable": true, "type": "string" }, "kind": { - "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params.", + "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"personal\"` for a user-and-owned-agents roster, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, or `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived.", "example": "string", + "nullable": true, "type": "string" }, "last_activity": { "description": "When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment.", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", + "nullable": true, "type": "string" }, "last_message_preview": { "description": "Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment.", "example": "Sounds good — I'll ship the fix tomorrow.", + "nullable": true, "type": "string" }, "last_message_sender": { "description": "Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment.", "example": "Alice Chen", + "nullable": true, "type": "string" }, "metadata": { @@ -57415,6 +61312,7 @@ "example": { "key": "value" }, + "nullable": true, "type": "object" }, "muted": { @@ -57425,6 +61323,7 @@ "org": { "description": "ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "parent_message": { @@ -57562,9 +61461,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "properties": { "acl": { "description": "Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else.", @@ -57596,6 +61496,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -57777,16 +61678,19 @@ "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": { @@ -57800,40 +61704,48 @@ "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" } }, @@ -57847,6 +61759,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -57856,6 +61769,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -57968,21 +61882,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -57993,6 +61911,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -58006,40 +61925,48 @@ "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" } }, @@ -58048,31 +61975,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -58083,10 +62014,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -58137,6 +62069,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -58153,11 +62086,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -58176,40 +62111,48 @@ "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" } }, @@ -58224,6 +62167,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -58234,6 +62178,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -58247,11 +62192,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -58266,17 +62213,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -58292,6 +62240,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -58302,6 +62251,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -58314,6 +62264,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -58365,6 +62316,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -58380,11 +62332,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -58527,9 +62481,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -58541,27 +62496,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -58595,6 +62703,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -58616,6 +62729,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -58634,21 +62752,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -58671,36 +62823,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -58938,7 +63097,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -59086,7 +63245,7 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { @@ -59120,6 +63279,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -59270,23 +63430,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -59297,16 +63459,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -59324,26 +63489,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -59477,6 +63647,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -59551,13 +63722,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -59573,6 +63744,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -59583,16 +63755,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -59605,11 +63780,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -59623,40 +63800,48 @@ "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" } }, @@ -59665,11 +63850,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -59685,6 +63872,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -59700,11 +63888,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -59720,6 +63910,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -59752,6 +63943,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -59759,6 +63951,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -59783,12 +63976,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -59804,10 +63998,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -59832,6 +64028,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -59857,6 +64054,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -59905,11 +64103,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -59920,21 +64120,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -59947,8 +64151,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -59959,6 +64162,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -60044,13 +64248,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -60066,6 +64270,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -60076,16 +64281,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -60098,11 +64306,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -60116,40 +64326,48 @@ "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" } }, @@ -60158,11 +64376,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -60178,6 +64398,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -60193,11 +64414,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -60213,6 +64436,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -60245,6 +64469,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -60252,6 +64477,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -60276,12 +64502,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -60297,10 +64524,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -60325,6 +64554,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -60350,6 +64580,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -60398,11 +64629,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -60413,21 +64646,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -60440,8 +64677,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -60452,6 +64688,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -60487,11 +64724,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -60507,11 +64746,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -60523,6 +64764,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -60542,22 +64784,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -60566,16 +64810,19 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "role": { "description": "The authenticated user's membership role in this thread, e.g. `\"owner\"`, `\"member\"`, or `\"viewer\"`. `null` if the user is not a member.", "example": "member", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "settings": { @@ -60585,8 +64832,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -60595,6 +64843,7 @@ "slug": { "description": "URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned.", "example": "example-slug", + "nullable": true, "type": "string" }, "sub_threads": { @@ -60605,6 +64854,7 @@ "items": { "type": "object" }, + "nullable": true, "type": "array" }, "tags": { @@ -60621,32 +64871,36 @@ "team": { "description": "ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "title": { "description": "Human-readable name of the thread. `null` if no title has been set.", "example": "Example Title", + "nullable": true, "type": "string" }, "ttl": { - "description": "Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire.", - "example": 3600, - "type": "integer" + "description": "Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire.", + "example": "2026-08-15T12:00:00", + "nullable": true, + "type": "string" }, "unread_count": { "description": "Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested.", "example": 5, + "nullable": true, "type": "integer" }, "updated_at": { "description": "When the thread was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "visibility": { @@ -60717,6 +64971,7 @@ "description": "An example description.", "is_unlisted": true, "key": "string", + "kind": "personal", "members": [ { "id": "string", @@ -60754,6 +65009,7 @@ "description": "An example description.", "is_unlisted": true, "key": "string", + "kind": "personal", "members": [ { "id": "string", @@ -60798,6 +65054,14 @@ "example": "string", "type": "string" }, + "kind": { + "description": "Optional behavioral subtype. `personal` is accepted only for a user-owned thread and limits membership to that user and agents currently owned by them. Mirror kinds remain server-derived and cannot be selected by callers.", + "enum": [ + "personal" + ], + "example": "personal", + "type": "string" + }, "members": { "description": "Users and agents to add atomically when the thread is created. Each target must pass the same authorization rules as a post-creation member add. Slack mirror threads reject non-empty caller-supplied rosters because their membership is sync-owned.", "example": [ @@ -60886,8 +65150,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -62146,36 +66411,43 @@ "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" } }, @@ -63067,7 +67339,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ] @@ -63214,7 +67486,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ] @@ -63223,16 +67495,19 @@ "after_cursor": { "description": "Opaque cursor to pass as `after` to retrieve the page of messages newer than this result set. `null` when there are no later messages.", "example": "string", + "nullable": true, "type": "string" }, "anchor": { "description": "Message ID used as the anchor for a windowed query. `null` for ordinary cursor pagination.", "example": "string", + "nullable": true, "type": "string" }, "before_cursor": { "description": "Opaque cursor to pass as `before` to retrieve the page of messages older than this result set. `null` when there are no earlier messages.", "example": "string", + "nullable": true, "type": "string" }, "messages": { @@ -63365,145 +67640,145 @@ "replies_after_cursor": "string", "replies_before_cursor": "string", "reply_count": 1, - "reply_to": {}, - "root_message_id": "string", - "sandbox": "string", - "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", - "thread": "string", - "type": "note", - "user": "string", - "visibility": "default" - } - ], - "items": { - "description": "A chat message posted in a thread, including its content, author, attachments, reactions, and optional reply metadata.", - "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" - } - ] - }, - "actors": [ - { - "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 - } - } - ], - "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", - "agent_mode": "cli", - "attachments": [ - { - "content_type": "application/json", - "description": "An example description.", - "filename": "string", - "height": 1, - "id": "string", - "image_height": 1, - "image_source": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "image_url": "https://example.com", - "image_width": 1, - "media_type": "application/json", - "name": "Example Name", - "object": {}, - "title": "Example Title", - "type": "file", - "url": "https://example.com", - "variants": [ - { - "content_type": "application/json", - "created_at": "2024-01-01T00:00:00Z", - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "filename": "string", - "height": 600, - "id": "mvr_0aBcDeFgHiJkLmNoPqRsTu", - "image_source": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "updated_at": "2024-01-01T00:00:00Z", - "url": "https://example.com", - "variant_key": "original", - "width": 800 - } - ], - "version": 1, - "width": 1 - } - ], - "branched_thread": "string", - "content": "Hello, how can I help you today?", - "created_at": "2024-01-01T00:00:00Z", - "has_replies": true, - "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", - "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", - "is_deleted": true, - "legacy_agent": "string", - "metadata": { - "key": "value" - }, - "org": "org_0aBcDeFgHiJkLmNoPqRsTu", - "reactions": [ - { - "payload": { - "key": "value" - }, - "type": "emoji_reaction", - "user": "string" - } - ], - "rendering_mode": "reply", - "replies": [ - {} - ], - "replies_after_cursor": "string", - "replies_before_cursor": "string", - "reply_count": 1, + "reply_to": {}, + "root_message_id": "string", + "sandbox": "string", + "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "thread": "string", + "type": "note", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "visibility": "default" + } + ], + "items": { + "description": "A chat message posted in a thread, including its content, author, attachments, reactions, and optional reply metadata.", + "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" + } + ] + }, + "actors": [ + { + "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 + } + } + ], + "agent": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "agent_mode": "cli", + "attachments": [ + { + "content_type": "application/json", + "description": "An example description.", + "filename": "string", + "height": 1, + "id": "string", + "image_height": 1, + "image_source": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "image_url": "https://example.com", + "image_width": 1, + "media_type": "application/json", + "name": "Example Name", + "object": {}, + "title": "Example Title", + "type": "file", + "url": "https://example.com", + "variants": [ + { + "content_type": "application/json", + "created_at": "2024-01-01T00:00:00Z", + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "filename": "string", + "height": 600, + "id": "mvr_0aBcDeFgHiJkLmNoPqRsTu", + "image_source": { + "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", + "height": 600, + "media": "med_0aBcDeFgHiJkLmNoPqRsTu", + "mime_type": "application/json", + "refresh_url": "https://example.com", + "url": "https://example.com", + "width": 800 + }, + "updated_at": "2024-01-01T00:00:00Z", + "url": "https://example.com", + "variant_key": "original", + "width": 800 + } + ], + "version": 1, + "width": 1 + } + ], + "branched_thread": "string", + "content": "Hello, how can I help you today?", + "created_at": "string", + "has_replies": true, + "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", + "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", + "is_deleted": true, + "legacy_agent": "string", + "metadata": { + "key": "value" + }, + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "reactions": [ + { + "payload": { + "key": "value" + }, + "type": "emoji_reaction", + "user": "string" + } + ], + "rendering_mode": "reply", + "replies": [ + {} + ], + "replies_after_cursor": "string", + "replies_before_cursor": "string", + "reply_count": 1, "reply_to": { "acl": { "add": [ @@ -63637,7 +67912,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "root_message_id": "string", @@ -63645,7 +67920,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { @@ -63679,6 +67954,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -63860,16 +68136,19 @@ "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": { @@ -63883,40 +68162,48 @@ "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" } }, @@ -63930,6 +68217,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -63939,6 +68227,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -64051,21 +68340,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -64076,6 +68369,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -64089,40 +68383,48 @@ "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" } }, @@ -64131,31 +68433,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -64166,10 +68472,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -64220,6 +68527,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -64236,11 +68544,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -64259,40 +68569,48 @@ "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" } }, @@ -64307,6 +68625,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -64317,6 +68636,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -64330,11 +68650,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -64349,17 +68671,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -64375,6 +68698,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -64385,6 +68709,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -64397,6 +68722,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -64448,6 +68774,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -64463,11 +68790,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -64610,9 +68939,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -64624,27 +68954,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -65394,7 +69877,7 @@ }, "/api/v1/threads/{thread}/trajectories": { "get": { - "description": "Returns a cursor-paginated list of thread message trajectories associated with the\nspecified thread. Each trajectory links a user message and its agent response to the\nunderlying AI trajectory record that captured the model's reasoning steps.\n\nThe authenticated user must own the thread or be a member of the workspace it belongs\nto. Results are returned in reverse chronological order by default. Use `before_cursor`\nand `after_cursor` to navigate pages; provide at most one cursor per request.\n\nOptionally filter results to trajectories produced in response to a specific message\nby supplying the `message` parameter. When no trajectories match the query, `data`\nis an empty array and both cursor fields are `null`.\n", + "description": "Returns a cursor-paginated list of thread message trajectories associated with the\nspecified thread. Each trajectory links a user message and its agent response to the\nunderlying AI trajectory record that captured the model's reasoning steps.\n\nThe authenticated user must own the thread or be a member of the workspace it belongs\nto. Results are returned in reverse chronological order by default. Use `before_cursor`\nand `after_cursor` to navigate pages; provide at most one cursor per request.\n\nOptionally filter results to trajectories produced in response to a specific message\nby supplying the `message` parameter. When no trajectories match the query, `data`\nis an empty array and both cursor fields are `null`. A cursor that cannot be decoded\nreturns a 400 `invalid_cursor` error.\n", "operationId": "get_api_v1_threads__thread_trajectories", "parameters": [ { @@ -65475,11 +69958,13 @@ "after_cursor": { "description": "Opaque cursor to pass as `after_cursor` to retrieve the next page. `null` when no further pages exist.", "example": "string", + "nullable": true, "type": "string" }, "before_cursor": { "description": "Opaque cursor to pass as `before_cursor` to retrieve the previous page. `null` when this is the first page.", "example": "string", + "nullable": true, "type": "string" }, "data": { @@ -65501,25 +69986,25 @@ "description": "Links a pair of thread messages (user turn and agent reply) to the AI trajectory that produced the response, enabling replay and debugging of model interactions.", "example": { "agent_message": "msg_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "id": "tmt_0aBcDeFgHiJkLmNoPqRsTu", "org": "org_0aBcDeFgHiJkLmNoPqRsTu", "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", "thread": "thr_0aBcDeFgHiJkLmNoPqRsTu", "trajectory": "trj_0aBcDeFgHiJkLmNoPqRsTu", - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user_message": "msg_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { "agent_message": { "description": "ID of the agent-authored reply message (`msg_...`). `null` if the trajectory has not yet produced a response message.", "example": "msg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "created_at": { "description": "When this trajectory link was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "id": { @@ -65530,11 +70015,13 @@ "org": { "description": "ID of the organization this trajectory belongs to (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment in which this trajectory was produced (`dsb_...`). `null` in production contexts.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { @@ -65549,13 +70036,13 @@ }, "updated_at": { "description": "When this trajectory link was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user_message": { "description": "ID of the user-authored message that triggered the agent response (`msg_...`). `null` if the agent turn was not preceded by a user message.", "example": "msg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -65576,6 +70063,9 @@ }, "description": "Successful response" }, + "400": { + "description": "Invalid cursor" + }, "401": { "description": "Unauthorized" }, @@ -65933,36 +70423,43 @@ "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" } }, @@ -66185,19 +70682,6 @@ "slug": "example-slug", "status": "active", "updated_at": "2024-01-01T00:00:00Z", - "vendor": { - "id": "org_0aBcDeFgHiJkLmNoPqRsTu", - "logo": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "name": "Example Name" - }, "website": "https://example.com" } ] @@ -66222,19 +70706,6 @@ "slug": "example-slug", "status": "active", "updated_at": "2024-01-01T00:00:00Z", - "vendor": { - "id": "org_0aBcDeFgHiJkLmNoPqRsTu", - "logo": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "name": "Example Name" - }, "website": "https://example.com" } ], @@ -66256,19 +70727,6 @@ "slug": "example-slug", "status": "active", "updated_at": "2024-01-01T00:00:00Z", - "vendor": { - "id": "org_0aBcDeFgHiJkLmNoPqRsTu", - "logo": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "name": "Example Name" - }, "website": "https://example.com" }, "properties": { @@ -66304,7 +70762,7 @@ "type": "string" }, "onboarding_solution_lookup_key": { - "description": "Lookup key (`sol-...`) of the Solution that drove this org's customer onboarding, stamped when the org was first linked into a vendor's network via an explore-install. `null` for vendor-track orgs and invite-driven customers. The onboarding UI reads the referenced Solution's `metadata.onboarding` block to tailor the customer checklist.", + "description": "Lookup key (`sol-...`) of the Solution currently driving this org's customer onboarding — the active onboarding solution pointer. Stamped when the org is linked into a vendor's network via an explore-install and re-stamped by every later solution-driven link, so the latest install wins. `null` for vendor-track orgs and invite-driven customers. The onboarding UI reads the referenced Solution's `metadata.onboarding` block to tailor the customer checklist.", "example": "string", "type": "string" }, @@ -66344,88 +70802,6 @@ "format": "date-time", "type": "string" }, - "vendor": { - "description": "Branding of the solution vendor whose network this organization belongs to — the vendor of the oldest active vendor relationship. Only present for organizations on the `\"customer\"` onboarding track; `null` for vendor-track organizations (including vendors that later joined another vendor's network) and for customers with no active vendor link. Clients use it to co-brand the workspace (\"ArchAgents by Acme\").", - "example": { - "id": "org_0aBcDeFgHiJkLmNoPqRsTu", - "logo": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "name": "Example Name" - }, - "properties": { - "id": { - "description": "Organization ID of the vendor (`org_...`).", - "example": "org_0aBcDeFgHiJkLmNoPqRsTu", - "type": "string" - }, - "logo": { - "description": "Logo of the vendor organization. The `url` is a stable, non-expiring capability URL served by the platform (the same mechanism as catalog `org_logo` fields), safe to hold in caches; `refresh_url` is `null`. `null` when the vendor has no logo.", - "example": { - "file": "fil_0aBcDeFgHiJkLmNoPqRsTu", - "height": 600, - "media": "med_0aBcDeFgHiJkLmNoPqRsTu", - "mime_type": "application/json", - "refresh_url": "https://example.com", - "url": "https://example.com", - "width": 800 - }, - "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", - "type": "string" - }, - "height": { - "description": "Height of the image in pixels. `null` if not known.", - "example": 600, - "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", - "type": "string" - }, - "mime_type": { - "description": "MIME type of the image, e.g. `\"image/png\"` or `\"image/jpeg\"`. `null` if not known.", - "example": "application/json", - "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", - "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", - "type": "string" - }, - "width": { - "description": "Width of the image in pixels. `null` if not known.", - "example": 800, - "type": "integer" - } - }, - "type": "object" - }, - "name": { - "description": "Display name of the vendor organization. `null` if the vendor has not set a name.", - "example": "Example Name", - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, "website": { "description": "Public website URL for the organization. `null` if not set.", "example": "https://example.com", @@ -66663,6 +71039,46 @@ "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", @@ -66793,6 +71209,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -66822,6 +71239,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -66838,10 +71258,12 @@ "properties": { "after_cursor": { "example": "string", + "nullable": true, "type": "string" }, "before_cursor": { "example": "string", + "nullable": true, "type": "string" }, "data": { @@ -66876,6 +71298,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -66905,6 +71328,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -66947,6 +71373,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -66976,6 +71403,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -66990,6 +71420,7 @@ "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" }, "blocked_by_count": { @@ -67001,6 +71432,7 @@ "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": { @@ -67030,20 +71462,24 @@ "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": { @@ -67057,40 +71493,48 @@ "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" } }, @@ -67102,11 +71546,13 @@ "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": { @@ -67145,12 +71591,20 @@ "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": { @@ -67185,6 +71639,7 @@ "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": { @@ -67203,20 +71658,24 @@ "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": { @@ -67230,40 +71689,48 @@ "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" } }, @@ -67275,16 +71742,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -67295,6 +71765,25 @@ "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" }, "status": { @@ -67320,11 +71809,13 @@ "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": { @@ -67336,6 +71827,7 @@ "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" } }, @@ -67404,6 +71896,7 @@ "task": { "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "billing-cadence", "links": { "key": "value" }, @@ -67415,6 +71908,9 @@ "owner_user": "string", "parent": "tsk_01j3k5m7n9p2r4s6t8v0w1x2", "priority": 2, + "source_id": "ArchAstro/firstlanding", + "source_scope": "github.com", + "source_type": "repository", "status": "open", "tags": [ "backend", @@ -67440,6 +71936,7 @@ "example": { "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "billing-cadence", "links": { "key": "value" }, @@ -67451,6 +71948,9 @@ "owner_user": "string", "parent": "tsk_01j3k5m7n9p2r4s6t8v0w1x2", "priority": 2, + "source_id": "ArchAstro/firstlanding", + "source_scope": "github.com", + "source_type": "repository", "status": "open", "tags": [ "backend", @@ -67470,6 +71970,11 @@ "format": "date-time", "type": "string" }, + "epic": { + "description": "Optional free-form grouping label.", + "example": "billing-cadence", + "type": "string" + }, "links": { "description": "Arbitrary key-value map of named URLs or references associated with the task (e.g. external ticket links).", "example": { @@ -67509,6 +72014,21 @@ "example": 2, "type": "integer" }, + "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\"`, or `\"done\"`. Defaults to `\"open\"` when omitted.", "example": "open", @@ -67676,6 +72196,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -67705,6 +72226,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -67762,6 +72286,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -67791,6 +72316,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -67837,6 +72365,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -67866,6 +72395,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -67911,6 +72443,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -67940,6 +72473,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -67982,6 +72518,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -68011,6 +72548,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -68025,6 +72565,7 @@ "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" }, "blocked_by_count": { @@ -68036,6 +72577,7 @@ "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": { @@ -68065,20 +72607,24 @@ "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": { @@ -68092,40 +72638,48 @@ "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" } }, @@ -68137,11 +72691,13 @@ "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": { @@ -68180,12 +72736,20 @@ "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": { @@ -68220,6 +72784,7 @@ "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": { @@ -68238,20 +72803,24 @@ "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": { @@ -68265,40 +72834,48 @@ "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" } }, @@ -68310,16 +72887,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -68330,6 +72910,25 @@ "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" }, "status": { @@ -68355,11 +72954,13 @@ "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": { @@ -68371,6 +72972,7 @@ "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" } }, @@ -68478,6 +73080,46 @@ "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, @@ -68542,6 +73184,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -68571,6 +73214,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -68633,6 +73279,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -68662,6 +73309,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -68708,6 +73358,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -68737,6 +73388,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -68800,6 +73454,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -68829,6 +73484,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -68843,6 +73501,7 @@ "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" }, "blocked_by_count": { @@ -68854,6 +73513,7 @@ "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": { @@ -68883,20 +73543,24 @@ "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": { @@ -68910,40 +73574,48 @@ "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" } }, @@ -68955,11 +73627,13 @@ "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": { @@ -68998,12 +73672,20 @@ "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": { @@ -69038,6 +73720,7 @@ "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": { @@ -69056,20 +73739,24 @@ "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": { @@ -69083,40 +73770,48 @@ "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" } }, @@ -69128,16 +73823,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -69148,6 +73846,25 @@ "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" }, "status": { @@ -69173,11 +73890,13 @@ "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": { @@ -69189,6 +73908,7 @@ "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" } }, @@ -69356,6 +74076,46 @@ "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.", + "example": "string", + "in": "query", + "name": "source_type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Return only tasks whose source matches this object identity.", + "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, @@ -69416,6 +74176,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -69445,6 +74206,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -69500,6 +74264,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -69529,6 +74294,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -69571,6 +74339,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -69600,6 +74369,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -69614,6 +74386,7 @@ "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" }, "blocked_by_count": { @@ -69625,6 +74398,7 @@ "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": { @@ -69654,20 +74428,24 @@ "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": { @@ -69681,40 +74459,48 @@ "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" } }, @@ -69726,11 +74512,13 @@ "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": { @@ -69769,12 +74557,20 @@ "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": { @@ -69809,6 +74605,7 @@ "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": { @@ -69827,20 +74624,24 @@ "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": { @@ -69854,40 +74655,48 @@ "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" } }, @@ -69899,16 +74708,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -69919,6 +74731,25 @@ "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" }, "status": { @@ -69944,11 +74775,13 @@ "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": { @@ -69960,6 +74793,7 @@ "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" } }, @@ -70248,7 +75082,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -70259,6 +75093,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -70475,7 +75314,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -70640,7 +75479,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -70651,6 +75490,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -70867,7 +75711,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -70878,7 +75722,7 @@ "description": "A chat thread, representing a conversation channel that can be owned by a user, team, or agent and may contain messages, participants, and AI agent activity.", "example": { "agent_user": "agi_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "creator": "usr_0aBcDeFgHiJkLmNoPqRsTu", "description": "An example description.", "id": "string", @@ -70888,7 +75732,7 @@ "is_unlisted": true, "key": "string", "kind": "string", - "last_activity": "2024-01-01T00:00:00Z", + "last_activity": "string", "last_message_preview": "Sounds good — I'll ship the fix tomorrow.", "last_message_sender": "Alice Chen", "metadata": { @@ -71029,7 +75873,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -71040,6 +75884,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -71256,9 +76105,9 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "team" }, @@ -71266,17 +76115,18 @@ "agent_user": { "description": "ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "created_at": { "description": "When the thread was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "creator": { "description": "User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "oneOf": [ { "type": "string" @@ -71287,6 +76137,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -71305,21 +76160,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -71342,36 +76231,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -71385,6 +76281,7 @@ "description": { "description": "Optional description or purpose statement for the thread. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -71415,27 +76312,31 @@ "key": { "description": "Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set.", "example": "string", + "nullable": true, "type": "string" }, "kind": { - "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params.", + "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"personal\"` for a user-and-owned-agents roster, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, or `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived.", "example": "string", + "nullable": true, "type": "string" }, "last_activity": { "description": "When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment.", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", + "nullable": true, "type": "string" }, "last_message_preview": { "description": "Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment.", "example": "Sounds good — I'll ship the fix tomorrow.", + "nullable": true, "type": "string" }, "last_message_sender": { "description": "Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment.", "example": "Alice Chen", + "nullable": true, "type": "string" }, "metadata": { @@ -71443,6 +76344,7 @@ "example": { "key": "value" }, + "nullable": true, "type": "object" }, "muted": { @@ -71453,6 +76355,7 @@ "org": { "description": "ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "parent_message": { @@ -71590,9 +76493,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "properties": { "acl": { "description": "Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else.", @@ -71624,6 +76528,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -71805,16 +76710,19 @@ "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": { @@ -71828,40 +76736,48 @@ "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" } }, @@ -71875,6 +76791,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -71884,6 +76801,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -71996,21 +76914,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -72021,6 +76943,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -72034,40 +76957,48 @@ "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" } }, @@ -72076,31 +77007,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -72111,10 +77046,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -72165,6 +77101,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -72181,11 +77118,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -72204,40 +77143,48 @@ "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" } }, @@ -72252,6 +77199,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -72262,6 +77210,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -72275,11 +77224,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -72294,17 +77245,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -72320,6 +77272,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -72330,6 +77283,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -72342,6 +77296,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -72393,6 +77348,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -72408,11 +77364,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -72555,9 +77513,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -72569,27 +77528,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -72623,6 +77735,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -72644,6 +77761,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -72662,21 +77784,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -72699,36 +77855,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -72966,7 +78129,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -73114,7 +78277,7 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { @@ -73148,6 +78311,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -73298,23 +78462,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -73325,16 +78491,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -73352,26 +78521,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -73505,6 +78679,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -73579,13 +78754,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -73601,6 +78776,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -73611,16 +78787,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -73633,11 +78812,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -73651,40 +78832,48 @@ "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" } }, @@ -73693,11 +78882,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -73713,6 +78904,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -73728,11 +78920,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -73748,6 +78942,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -73780,6 +78975,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -73787,6 +78983,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -73811,12 +79008,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -73832,10 +79030,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -73860,6 +79060,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -73885,6 +79086,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -73933,11 +79135,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -73948,21 +79152,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -73975,8 +79183,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -73987,6 +79194,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -74072,13 +79280,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -74094,6 +79302,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -74104,16 +79313,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -74126,11 +79338,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -74144,40 +79358,48 @@ "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" } }, @@ -74186,11 +79408,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -74206,6 +79430,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -74221,11 +79446,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -74241,6 +79468,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -74273,6 +79501,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -74280,6 +79509,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -74304,12 +79534,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -74325,10 +79556,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -74353,6 +79586,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -74378,6 +79612,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -74426,11 +79661,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -74441,21 +79678,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -74468,8 +79709,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -74480,6 +79720,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -74515,11 +79756,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -74535,11 +79778,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -74551,6 +79796,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -74570,22 +79816,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -74594,16 +79842,19 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "role": { "description": "The authenticated user's membership role in this thread, e.g. `\"owner\"`, `\"member\"`, or `\"viewer\"`. `null` if the user is not a member.", "example": "member", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "settings": { @@ -74613,8 +79864,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -74623,6 +79875,7 @@ "slug": { "description": "URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned.", "example": "example-slug", + "nullable": true, "type": "string" }, "sub_threads": { @@ -74633,6 +79886,7 @@ "items": { "type": "object" }, + "nullable": true, "type": "array" }, "tags": { @@ -74649,32 +79903,36 @@ "team": { "description": "ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "title": { "description": "Human-readable name of the thread. `null` if no title has been set.", "example": "Example Title", + "nullable": true, "type": "string" }, "ttl": { - "description": "Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire.", - "example": 3600, - "type": "integer" + "description": "Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire.", + "example": "2026-08-15T12:00:00", + "nullable": true, + "type": "string" }, "unread_count": { "description": "Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested.", "example": 5, + "nullable": true, "type": "integer" }, "updated_at": { "description": "When the thread was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "visibility": { @@ -74745,6 +80003,7 @@ "description": "An example description.", "is_unlisted": true, "key": "string", + "kind": "personal", "members": [ { "id": "string", @@ -74782,6 +80041,7 @@ "description": "An example description.", "is_unlisted": true, "key": "string", + "kind": "personal", "members": [ { "id": "string", @@ -74826,6 +80086,14 @@ "example": "string", "type": "string" }, + "kind": { + "description": "Optional behavioral subtype. `personal` is accepted only for a user-owned thread and limits membership to that user and agents currently owned by them. Mirror kinds remain server-derived and cannot be selected by callers.", + "enum": [ + "personal" + ], + "example": "personal", + "type": "string" + }, "members": { "description": "Users and agents to add atomically when the thread is created. Each target must pass the same authorization rules as a post-creation member add. Slack mirror threads reject non-empty caller-supplied rosters because their membership is sync-owned.", "example": [ @@ -74914,8 +80182,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -75008,6 +80277,11 @@ "data": [ { "created_at": "2024-01-01T00:00:00Z", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "expires_at": "2024-01-01T00:00:00Z", "id": "sat_0aBcDeFgHiJkLmNoPqRsTu", "last_used_at": "2024-01-01T00:00:00Z", @@ -75024,6 +80298,11 @@ "example": [ { "created_at": "2024-01-01T00:00:00Z", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "expires_at": "2024-01-01T00:00:00Z", "id": "sat_0aBcDeFgHiJkLmNoPqRsTu", "last_used_at": "2024-01-01T00:00:00Z", @@ -75037,6 +80316,11 @@ "description": "A long-lived API credential associated with a system account, used to authenticate server-to-server requests.", "example": { "created_at": "2024-01-01T00:00:00Z", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "expires_at": "2024-01-01T00:00:00Z", "id": "sat_0aBcDeFgHiJkLmNoPqRsTu", "last_used_at": "2024-01-01T00:00:00Z", @@ -75052,10 +80336,41 @@ "format": "date-time", "type": "string" }, + "created_by_agent_user": { + "description": "Agent user that minted this token (`usr_...`). `null` unless an agent minted it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that minted this token (`dva_...`). `null` unless minted with a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that minted this token (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that minted this token (`tem_...`). `null` unless minted as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who minted this token (`usr_...`). Distinct from the token subject. `null` on legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, "expires_at": { "description": "When the token expires. `null` on legacy rows that predate stored expiry.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "id": { @@ -75067,22 +80382,26 @@ "description": "When this token was last used to authenticate a request. `null` if the token has never been used.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "name": { - "description": "Human-readable label assigned to this token at creation time.", + "description": "Human-readable label assigned to this token at creation time. `null` when no label was supplied.", "example": "Example Name", + "nullable": true, "type": "string" }, "revoked_at": { "description": "When this token was revoked. `null` if the token is still active.", "example": "2024-01-01T00:00:00Z", "format": "date-time", + "nullable": true, "type": "string" }, "scopes": { "description": "Space-separated OAuth scopes stamped on the token. `null` on legacy rows; treat as `full_access`.", "example": "string", + "nullable": true, "type": "string" }, "token": { @@ -76195,7 +81514,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -76343,7 +81662,7 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { @@ -76377,6 +81696,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -76527,23 +81847,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -76554,16 +81876,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -76581,26 +81906,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -76734,6 +82064,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -76808,13 +82139,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -76830,6 +82161,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -76840,16 +82172,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -76862,11 +82197,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -76880,40 +82217,48 @@ "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" } }, @@ -76922,11 +82267,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -76942,6 +82289,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -76957,11 +82305,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -76977,6 +82327,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -77009,6 +82360,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -77016,6 +82368,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -77040,12 +82393,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -77061,10 +82415,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -77089,6 +82445,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -77114,6 +82471,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -77162,11 +82520,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -77177,21 +82537,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -77204,8 +82568,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -77216,6 +82579,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -77301,13 +82665,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -77323,6 +82687,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -77333,16 +82698,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -77355,11 +82723,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -77373,40 +82743,48 @@ "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" } }, @@ -77415,11 +82793,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -77435,6 +82815,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -77450,11 +82831,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -77470,6 +82853,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -77502,6 +82886,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -77509,6 +82894,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -77533,12 +82919,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -77554,10 +82941,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -77582,6 +82971,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -77607,6 +82997,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -77655,11 +83046,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -77670,21 +83063,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -77697,8 +83094,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -77709,6 +83105,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -77744,11 +83141,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -77764,11 +83163,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -77780,6 +83181,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -77799,22 +83201,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -77937,6 +83341,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -77955,21 +83364,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -77992,36 +83435,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -78228,7 +83678,7 @@ } }, { - "description": "Join a user-scoped thread by ID", + "description": "Join a user-scoped thread by ID, optionally supplying local tools for a personal thread", "name": "join_user_thread", "params": { "example": { @@ -78236,6 +83686,17 @@ "before_cursor": "string", "include_metadata": true, "limit": 1, + "local_tool_provider_id": "string", + "local_tools": [ + { + "function": { + "description": "An example description.", + "name": "Example Name", + "parameters": {} + }, + "type": "function" + } + ], "thread_id": "string" }, "properties": { @@ -78255,6 +83716,76 @@ "example": 1, "type": "integer" }, + "local_tool_provider_id": { + "example": "string", + "type": "string" + }, + "local_tools": { + "example": [ + { + "function": { + "description": "An example description.", + "name": "Example Name", + "parameters": {} + }, + "type": "function" + } + ], + "items": { + "description": "An OpenAI-compatible local function definition supplied while joining a personal thread.", + "example": { + "function": { + "description": "An example description.", + "name": "Example Name", + "parameters": {} + }, + "type": "function" + }, + "properties": { + "function": { + "description": "A function implemented by the client connected to a personal thread.", + "example": { + "description": "An example description.", + "name": "Example Name", + "parameters": {} + }, + "properties": { + "description": { + "example": "An example description.", + "type": "string" + }, + "name": { + "example": "Example Name", + "type": "string" + }, + "parameters": { + "example": {}, + "type": "object" + } + }, + "required": [ + "name", + "description", + "parameters" + ], + "type": "object" + }, + "type": { + "enum": [ + "function" + ], + "example": "function", + "type": "string" + } + }, + "required": [ + "type", + "function" + ], + "type": "object" + }, + "type": "array" + }, "thread_id": { "example": "string", "type": "string" @@ -78758,6 +84289,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -78908,7 +84444,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -79110,7 +84646,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -79121,6 +84657,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -79337,7 +84878,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -79541,7 +85082,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -79552,6 +85093,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -79768,7 +85314,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -80152,6 +85698,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -80302,7 +85853,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -80504,7 +86055,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -80515,6 +86066,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -80731,7 +86287,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -80958,6 +86514,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -81108,23 +86665,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -81135,16 +86694,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -81162,26 +86724,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -81315,6 +86882,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -81389,13 +86957,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -81411,6 +86979,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -81421,16 +86990,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -81443,11 +87015,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -81461,40 +87035,48 @@ "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" } }, @@ -81503,11 +87085,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -81523,6 +87107,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -81538,11 +87123,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -81558,6 +87145,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -81590,6 +87178,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -81597,6 +87186,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -81621,12 +87211,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -81642,10 +87233,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -81670,6 +87263,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -81695,6 +87289,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -81743,11 +87338,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -81758,21 +87355,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -81785,8 +87386,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -81797,6 +87397,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -81882,13 +87483,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -81904,6 +87505,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -81914,16 +87516,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -81936,11 +87541,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -81954,40 +87561,48 @@ "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" } }, @@ -81996,11 +87611,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -82016,6 +87633,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -82031,11 +87649,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -82051,6 +87671,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -82083,6 +87704,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -82090,6 +87712,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -82114,12 +87737,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -82135,10 +87759,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -82163,6 +87789,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -82188,6 +87815,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -82236,11 +87864,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -82251,21 +87881,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -82278,8 +87912,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -82290,6 +87923,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -82325,11 +87959,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -82345,11 +87981,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -82361,6 +87999,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -82380,22 +88019,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -82605,6 +88246,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -82811,6 +88457,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -83041,6 +88692,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -83191,23 +88843,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -83218,16 +88872,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -83245,26 +88902,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -83398,6 +89060,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -83472,13 +89135,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -83494,6 +89157,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -83504,16 +89168,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -83526,11 +89193,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -83544,40 +89213,48 @@ "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" } }, @@ -83586,11 +89263,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -83606,6 +89285,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -83621,11 +89301,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -83641,6 +89323,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -83673,6 +89356,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -83680,6 +89364,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -83704,12 +89389,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -83725,10 +89411,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -83753,6 +89441,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -83778,6 +89467,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -83826,11 +89516,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -83841,21 +89533,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -83868,8 +89564,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -83880,6 +89575,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -83965,13 +89661,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -83987,6 +89683,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -83997,16 +89694,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -84019,11 +89719,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -84037,40 +89739,48 @@ "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" } }, @@ -84079,11 +89789,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -84099,6 +89811,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -84114,11 +89827,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -84134,6 +89849,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -84166,6 +89882,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -84173,6 +89890,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -84197,12 +89915,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -84218,10 +89937,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -84246,6 +89967,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -84271,6 +89993,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -84319,11 +90042,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -84334,21 +90059,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -84361,8 +90090,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -84373,6 +90101,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -84408,11 +90137,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -84428,11 +90159,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -84444,6 +90177,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -84463,22 +90197,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -84503,6 +90239,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -84521,21 +90262,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -84558,36 +90333,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -84740,7 +90522,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -84847,7 +90629,7 @@ ], "branched_thread": "string", "content": "Hello, how can I help you today?", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "has_replies": true, "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", @@ -85006,7 +90788,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "root_message_id": "string", @@ -85014,7 +90796,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { @@ -85048,6 +90830,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -85229,16 +91012,19 @@ "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": { @@ -85252,40 +91038,48 @@ "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" } }, @@ -85299,6 +91093,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -85308,6 +91103,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -85420,21 +91216,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -85445,6 +91245,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -85458,40 +91259,48 @@ "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" } }, @@ -85500,31 +91309,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -85535,10 +91348,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -85589,6 +91403,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -85605,11 +91420,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -85628,40 +91445,48 @@ "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" } }, @@ -85676,6 +91501,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -85686,6 +91512,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -85699,11 +91526,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -85718,17 +91547,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -85744,6 +91574,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -85754,6 +91585,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -85766,6 +91598,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -85817,6 +91650,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -85832,11 +91666,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -85979,9 +91815,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -85993,27 +91830,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -86114,6 +92104,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -86265,6 +92256,7 @@ "badges": { "description": "Aggregated badge counts for the team, keyed by category. `null` when badge data is not loaded.", "example": {}, + "nullable": true, "type": "object" }, "created_at": { @@ -86276,6 +92268,7 @@ "description": { "description": "Human-readable description of the team's purpose. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -86286,6 +92279,7 @@ "membership_status": { "description": "The authenticated viewer's role on this team. One of `\"owner\"`, `\"admin\"`, or `\"member\"`. `null` if the viewer is not a member.", "example": "member", + "nullable": true, "type": "string" }, "metadata": { @@ -86303,16 +92297,19 @@ "org": { "description": "ID of the organization this team belongs to (`org_...`). `null` if the team is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this team is scoped to (`dsb_...`). `null` outside sandbox contexts.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "slug": { "description": "URL-safe slug for the team, derived from the team name. `null` if not set.", "example": "example-slug", + "nullable": true, "type": "string" }, "updated_at": { @@ -86482,7 +92479,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -86493,6 +92490,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -86709,7 +92711,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -86719,17 +92721,18 @@ "agent_user": { "description": "ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "created_at": { "description": "When the thread was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "creator": { "description": "User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "oneOf": [ { "type": "string" @@ -86740,6 +92743,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -86758,21 +92766,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -86795,36 +92837,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -86838,6 +92887,7 @@ "description": { "description": "Optional description or purpose statement for the thread. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -86868,27 +92918,31 @@ "key": { "description": "Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set.", "example": "string", + "nullable": true, "type": "string" }, "kind": { - "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params.", + "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"personal\"` for a user-and-owned-agents roster, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, or `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived.", "example": "string", + "nullable": true, "type": "string" }, "last_activity": { "description": "When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment.", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", + "nullable": true, "type": "string" }, "last_message_preview": { "description": "Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment.", "example": "Sounds good — I'll ship the fix tomorrow.", + "nullable": true, "type": "string" }, "last_message_sender": { "description": "Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment.", "example": "Alice Chen", + "nullable": true, "type": "string" }, "metadata": { @@ -86896,6 +92950,7 @@ "example": { "key": "value" }, + "nullable": true, "type": "object" }, "muted": { @@ -86906,6 +92961,7 @@ "org": { "description": "ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "parent_message": { @@ -87043,9 +93099,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "properties": { "acl": { "description": "Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else.", @@ -87077,6 +93134,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -87258,16 +93316,19 @@ "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": { @@ -87281,40 +93342,48 @@ "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" } }, @@ -87328,6 +93397,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -87337,6 +93407,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -87449,21 +93520,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -87474,6 +93549,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -87487,40 +93563,48 @@ "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" } }, @@ -87529,31 +93613,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -87564,10 +93652,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -87618,6 +93707,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -87634,11 +93724,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -87657,40 +93749,48 @@ "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" } }, @@ -87705,6 +93805,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -87715,6 +93816,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -87728,11 +93830,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -87747,17 +93851,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -87773,6 +93878,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -87783,6 +93889,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -87795,6 +93902,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -87846,6 +93954,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -87861,11 +93970,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -88008,9 +94119,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -88022,27 +94134,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -88076,6 +94341,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -88097,6 +94367,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -88115,21 +94390,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -88152,36 +94461,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -88419,7 +94735,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -88567,7 +94883,7 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { @@ -88601,6 +94917,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -88751,23 +95068,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -88778,16 +95097,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -88805,26 +95127,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -88958,6 +95285,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -89032,13 +95360,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -89054,6 +95382,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -89064,16 +95393,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -89086,11 +95418,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -89104,40 +95438,48 @@ "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" } }, @@ -89146,11 +95488,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -89166,6 +95510,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -89181,11 +95526,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -89201,6 +95548,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -89233,6 +95581,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -89240,6 +95589,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -89264,12 +95614,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -89285,10 +95636,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -89313,6 +95666,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -89338,6 +95692,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -89386,11 +95741,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -89401,21 +95758,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -89428,8 +95789,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -89440,6 +95800,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -89525,13 +95886,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -89547,6 +95908,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -89557,16 +95919,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -89579,11 +95944,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -89597,40 +95964,48 @@ "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" } }, @@ -89639,11 +96014,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -89659,6 +96036,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -89674,11 +96052,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -89694,6 +96074,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -89726,6 +96107,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -89733,6 +96115,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -89757,12 +96140,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -89778,10 +96162,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -89806,6 +96192,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -89831,6 +96218,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -89879,11 +96267,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -89894,21 +96284,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -89921,8 +96315,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -89933,6 +96326,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -89968,11 +96362,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -89988,11 +96384,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -90004,6 +96402,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -90023,22 +96422,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -90047,16 +96448,19 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "role": { "description": "The authenticated user's membership role in this thread, e.g. `\"owner\"`, `\"member\"`, or `\"viewer\"`. `null` if the user is not a member.", "example": "member", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "settings": { @@ -90066,8 +96470,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -90076,6 +96481,7 @@ "slug": { "description": "URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned.", "example": "example-slug", + "nullable": true, "type": "string" }, "sub_threads": { @@ -90086,6 +96492,7 @@ "items": { "type": "object" }, + "nullable": true, "type": "array" }, "tags": { @@ -90102,32 +96509,36 @@ "team": { "description": "ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "title": { "description": "Human-readable name of the thread. `null` if no title has been set.", "example": "Example Title", + "nullable": true, "type": "string" }, "ttl": { - "description": "Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire.", - "example": 3600, - "type": "integer" + "description": "Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire.", + "example": "2026-08-15T12:00:00", + "nullable": true, + "type": "string" }, "unread_count": { "description": "Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested.", "example": 5, + "nullable": true, "type": "integer" }, "updated_at": { "description": "When the thread was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "visibility": { @@ -90233,6 +96644,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -90384,6 +96796,7 @@ "badges": { "description": "Aggregated badge counts for the team, keyed by category. `null` when badge data is not loaded.", "example": {}, + "nullable": true, "type": "object" }, "created_at": { @@ -90395,6 +96808,7 @@ "description": { "description": "Human-readable description of the team's purpose. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -90405,6 +96819,7 @@ "membership_status": { "description": "The authenticated viewer's role on this team. One of `\"owner\"`, `\"admin\"`, or `\"member\"`. `null` if the viewer is not a member.", "example": "member", + "nullable": true, "type": "string" }, "metadata": { @@ -90422,16 +96837,19 @@ "org": { "description": "ID of the organization this team belongs to (`org_...`). `null` if the team is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this team is scoped to (`dsb_...`). `null` outside sandbox contexts.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "slug": { "description": "URL-safe slug for the team, derived from the team name. `null` if not set.", "example": "example-slug", + "nullable": true, "type": "string" }, "updated_at": { @@ -90601,7 +97019,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -90612,6 +97030,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -90828,7 +97251,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -90838,17 +97261,18 @@ "agent_user": { "description": "ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "created_at": { "description": "When the thread was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "creator": { "description": "User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "oneOf": [ { "type": "string" @@ -90859,6 +97283,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -90877,21 +97306,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -90914,36 +97377,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -90957,6 +97427,7 @@ "description": { "description": "Optional description or purpose statement for the thread. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -90987,27 +97458,31 @@ "key": { "description": "Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set.", "example": "string", + "nullable": true, "type": "string" }, "kind": { - "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params.", + "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"personal\"` for a user-and-owned-agents roster, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, or `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived.", "example": "string", + "nullable": true, "type": "string" }, "last_activity": { "description": "When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment.", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", + "nullable": true, "type": "string" }, "last_message_preview": { "description": "Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment.", "example": "Sounds good — I'll ship the fix tomorrow.", + "nullable": true, "type": "string" }, "last_message_sender": { "description": "Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment.", "example": "Alice Chen", + "nullable": true, "type": "string" }, "metadata": { @@ -91015,6 +97490,7 @@ "example": { "key": "value" }, + "nullable": true, "type": "object" }, "muted": { @@ -91025,6 +97501,7 @@ "org": { "description": "ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "parent_message": { @@ -91162,9 +97639,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "properties": { "acl": { "description": "Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else.", @@ -91196,6 +97674,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -91377,16 +97856,19 @@ "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": { @@ -91400,40 +97882,48 @@ "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" } }, @@ -91447,6 +97937,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -91456,6 +97947,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -91568,21 +98060,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -91593,6 +98089,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -91606,40 +98103,48 @@ "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" } }, @@ -91648,31 +98153,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -91683,10 +98192,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -91737,6 +98247,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -91753,11 +98264,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -91776,40 +98289,48 @@ "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" } }, @@ -91824,6 +98345,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -91834,6 +98356,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -91847,11 +98370,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -91866,17 +98391,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -91892,6 +98418,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -91902,6 +98429,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -91914,6 +98442,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -91965,6 +98494,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -91980,11 +98510,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -92127,9 +98659,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -92141,27 +98674,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -92195,6 +98881,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -92216,6 +98907,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -92234,21 +98930,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -92271,36 +99001,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -92538,7 +99275,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -92686,7 +99423,7 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { @@ -92720,6 +99457,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -92870,23 +99608,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -92897,16 +99637,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -92924,26 +99667,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -93077,6 +99825,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -93151,13 +99900,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -93173,6 +99922,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -93183,16 +99933,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -93205,11 +99958,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -93223,40 +99978,48 @@ "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" } }, @@ -93265,11 +100028,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -93285,6 +100050,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -93300,11 +100066,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -93320,6 +100088,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -93352,6 +100121,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -93359,6 +100129,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -93383,12 +100154,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -93404,10 +100176,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -93432,6 +100206,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -93457,6 +100232,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -93505,11 +100281,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -93520,21 +100298,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -93547,8 +100329,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -93559,6 +100340,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -93644,13 +100426,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -93666,6 +100448,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -93676,16 +100459,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -93698,11 +100484,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -93716,40 +100504,48 @@ "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" } }, @@ -93758,11 +100554,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -93778,6 +100576,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -93793,11 +100592,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -93813,6 +100614,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -93845,6 +100647,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -93852,6 +100655,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -93876,12 +100680,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -93897,10 +100702,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -93925,6 +100732,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -93950,6 +100758,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -93998,11 +100807,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -94013,21 +100824,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -94040,8 +100855,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -94052,6 +100866,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -94087,11 +100902,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -94107,11 +100924,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -94123,6 +100942,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -94142,22 +100962,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -94166,16 +100988,19 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "role": { "description": "The authenticated user's membership role in this thread, e.g. `\"owner\"`, `\"member\"`, or `\"viewer\"`. `null` if the user is not a member.", "example": "member", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "settings": { @@ -94185,8 +101010,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -94195,6 +101021,7 @@ "slug": { "description": "URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned.", "example": "example-slug", + "nullable": true, "type": "string" }, "sub_threads": { @@ -94205,6 +101032,7 @@ "items": { "type": "object" }, + "nullable": true, "type": "array" }, "tags": { @@ -94221,32 +101049,36 @@ "team": { "description": "ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "title": { "description": "Human-readable name of the thread. `null` if no title has been set.", "example": "Example Title", + "nullable": true, "type": "string" }, "ttl": { - "description": "Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire.", - "example": 3600, - "type": "integer" + "description": "Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire.", + "example": "2026-08-15T12:00:00", + "nullable": true, + "type": "string" }, "unread_count": { "description": "Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested.", "example": 5, + "nullable": true, "type": "integer" }, "updated_at": { "description": "When the thread was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "visibility": { @@ -94453,7 +101285,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ] @@ -94595,7 +101427,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -94702,7 +101534,7 @@ ], "branched_thread": "string", "content": "Hello, how can I help you today?", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "has_replies": true, "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", @@ -94861,7 +101693,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "root_message_id": "string", @@ -94869,7 +101701,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { @@ -94903,6 +101735,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -95084,16 +101917,19 @@ "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": { @@ -95107,40 +101943,48 @@ "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" } }, @@ -95154,6 +101998,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -95163,6 +102008,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -95275,21 +102121,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -95300,6 +102150,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -95313,40 +102164,48 @@ "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" } }, @@ -95355,31 +102214,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -95390,10 +102253,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -95444,6 +102308,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -95460,11 +102325,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -95483,40 +102350,48 @@ "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" } }, @@ -95531,6 +102406,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -95541,6 +102417,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -95554,11 +102431,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -95573,17 +102452,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -95599,6 +102479,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -95609,6 +102490,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -95621,6 +102503,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -95672,6 +102555,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -95687,11 +102571,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -95834,9 +102720,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -95848,27 +102735,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -96301,6 +103341,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -96451,7 +103496,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -96653,7 +103698,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -96664,6 +103709,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -96880,7 +103930,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -97265,6 +104315,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -97415,7 +104470,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -97617,7 +104672,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -97628,6 +104683,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -97844,7 +104904,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -98071,6 +105131,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -98221,23 +105282,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -98248,16 +105311,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -98275,26 +105341,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -98428,6 +105499,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -98502,13 +105574,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -98524,6 +105596,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -98534,16 +105607,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -98556,11 +105632,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -98574,40 +105652,48 @@ "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" } }, @@ -98616,11 +105702,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -98636,6 +105724,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -98651,11 +105740,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -98671,6 +105762,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -98703,6 +105795,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -98710,6 +105803,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -98734,12 +105828,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -98755,10 +105850,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -98783,6 +105880,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -98808,6 +105906,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -98856,11 +105955,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -98871,21 +105972,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -98898,8 +106003,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -98910,6 +106014,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -98995,13 +106100,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -99017,6 +106122,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -99027,16 +106133,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -99049,11 +106158,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -99067,40 +106178,48 @@ "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" } }, @@ -99109,11 +106228,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -99129,6 +106250,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -99144,11 +106266,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -99164,6 +106288,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -99196,6 +106321,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -99203,6 +106329,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -99227,12 +106354,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -99248,10 +106376,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -99276,6 +106406,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -99301,6 +106432,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -99349,11 +106481,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -99364,21 +106498,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -99391,8 +106529,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -99403,6 +106540,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -99438,11 +106576,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -99458,11 +106598,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -99474,6 +106616,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -99493,22 +106636,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -99718,6 +106863,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -99924,6 +107074,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -100154,6 +107309,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -100304,23 +107460,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -100331,16 +107489,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -100358,26 +107519,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -100511,6 +107677,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -100585,13 +107752,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -100607,6 +107774,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -100617,16 +107785,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -100639,11 +107810,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -100657,40 +107830,48 @@ "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" } }, @@ -100699,11 +107880,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -100719,6 +107902,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -100734,11 +107918,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -100754,6 +107940,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -100786,6 +107973,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -100793,6 +107981,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -100817,12 +108006,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -100838,10 +108028,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -100866,6 +108058,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -100891,6 +108084,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -100939,11 +108133,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -100954,21 +108150,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -100981,8 +108181,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -100993,6 +108192,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -101078,13 +108278,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -101100,6 +108300,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -101110,16 +108311,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -101132,11 +108336,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -101150,40 +108356,48 @@ "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" } }, @@ -101192,11 +108406,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -101212,6 +108428,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -101227,11 +108444,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -101247,6 +108466,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -101279,6 +108499,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -101286,6 +108507,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -101310,12 +108532,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -101331,10 +108554,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -101359,6 +108584,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -101384,6 +108610,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -101432,11 +108659,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -101447,21 +108676,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -101474,8 +108707,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -101486,6 +108718,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -101521,11 +108754,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -101541,11 +108776,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -101557,6 +108794,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -101576,22 +108814,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -101616,6 +108856,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -101634,21 +108879,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -101671,36 +108950,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -101853,7 +109139,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } ], @@ -101960,7 +109246,7 @@ ], "branched_thread": "string", "content": "Hello, how can I help you today?", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "has_replies": true, "id": "msg_0aBcDeFgHiJkLmNoPqRsTu", "idempotency_key": "01234567-89ab-cdef-0123-456789abcdef", @@ -102119,7 +109405,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "root_message_id": "string", @@ -102127,7 +109413,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { @@ -102161,6 +109447,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -102342,16 +109629,19 @@ "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": { @@ -102365,40 +109655,48 @@ "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" } }, @@ -102412,6 +109710,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -102421,6 +109720,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -102533,21 +109833,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -102558,6 +109862,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -102571,40 +109876,48 @@ "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" } }, @@ -102613,31 +109926,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -102648,10 +109965,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -102702,6 +110020,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -102718,11 +110037,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -102741,40 +110062,48 @@ "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" } }, @@ -102789,6 +110118,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -102799,6 +110129,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -102812,11 +110143,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -102831,17 +110164,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -102857,6 +110191,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -102867,6 +110202,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -102879,6 +110215,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -102930,6 +110267,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -102945,11 +110283,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -103092,9 +110432,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -103106,27 +110447,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -103227,6 +110721,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -103378,6 +110873,7 @@ "badges": { "description": "Aggregated badge counts for the team, keyed by category. `null` when badge data is not loaded.", "example": {}, + "nullable": true, "type": "object" }, "created_at": { @@ -103389,6 +110885,7 @@ "description": { "description": "Human-readable description of the team's purpose. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -103399,6 +110896,7 @@ "membership_status": { "description": "The authenticated viewer's role on this team. One of `\"owner\"`, `\"admin\"`, or `\"member\"`. `null` if the viewer is not a member.", "example": "member", + "nullable": true, "type": "string" }, "metadata": { @@ -103416,16 +110914,19 @@ "org": { "description": "ID of the organization this team belongs to (`org_...`). `null` if the team is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this team is scoped to (`dsb_...`). `null` outside sandbox contexts.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "slug": { "description": "URL-safe slug for the team, derived from the team name. `null` if not set.", "example": "example-slug", + "nullable": true, "type": "string" }, "updated_at": { @@ -103595,7 +111096,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "participant": [ @@ -103606,6 +111107,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -103822,7 +111328,7 @@ ], "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "title": "Example Title", - "ttl": 3600, + "ttl": "2026-08-15T12:00:00", "unread_count": 5, "updated_at": "2024-01-01T00:00:00Z", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", @@ -103832,17 +111338,18 @@ "agent_user": { "description": "ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "created_at": { "description": "When the thread was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "creator": { "description": "User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "oneOf": [ { "type": "string" @@ -103853,6 +111360,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -103871,21 +111383,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -103908,36 +111454,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -103951,6 +111504,7 @@ "description": { "description": "Optional description or purpose statement for the thread. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "id": { @@ -103981,27 +111535,31 @@ "key": { "description": "Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set.", "example": "string", + "nullable": true, "type": "string" }, "kind": { - "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params.", + "description": "Thread subtype: `\"standard\"` for ordinary threads, `\"personal\"` for a user-and-owned-agents roster, `\"slack_mirror\"` for the membership-strict mirror of a Slack channel, or `\"slashwork_mirror\"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived.", "example": "string", + "nullable": true, "type": "string" }, "last_activity": { "description": "When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment.", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", + "nullable": true, "type": "string" }, "last_message_preview": { "description": "Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment.", "example": "Sounds good — I'll ship the fix tomorrow.", + "nullable": true, "type": "string" }, "last_message_sender": { "description": "Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment.", "example": "Alice Chen", + "nullable": true, "type": "string" }, "metadata": { @@ -104009,6 +111567,7 @@ "example": { "key": "value" }, + "nullable": true, "type": "object" }, "muted": { @@ -104019,6 +111578,7 @@ "org": { "description": "ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "parent_message": { @@ -104156,9 +111716,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "properties": { "acl": { "description": "Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else.", @@ -104190,6 +111751,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -104371,16 +111933,19 @@ "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": { @@ -104394,40 +111959,48 @@ "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" } }, @@ -104441,6 +112014,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -104450,6 +112024,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -104562,21 +112137,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -104587,6 +112166,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -104600,40 +112180,48 @@ "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" } }, @@ -104642,31 +112230,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -104677,10 +112269,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -104731,6 +112324,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -104747,11 +112341,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -104770,40 +112366,48 @@ "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" } }, @@ -104818,6 +112422,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -104828,6 +112433,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -104841,11 +112447,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -104860,17 +112468,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -104886,6 +112495,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -104896,6 +112506,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -104908,6 +112519,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -104959,6 +112571,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -104974,11 +112587,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -105121,9 +112736,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -105135,27 +112751,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -105189,6 +112958,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -105210,6 +112984,11 @@ "alias": "jdoe", "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "email": "user@example.com", "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", "is_system_user": true, @@ -105228,21 +113007,55 @@ "alias": { "description": "Short handle or alias for the user. `null` if not set.", "example": "jdoe", + "nullable": true, "type": "string" }, "app": { "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "app_name": { "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "email": { "description": "Email address of the user.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -105265,36 +113078,43 @@ "name": { "description": "Full display name of the user. `null` if the user has not set a name.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_role": { "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", "example": "member", + "nullable": true, "type": "string" }, "org_slug": { "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", "example": "example-slug", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "sandbox_name": { "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", "example": "Example Name", + "nullable": true, "type": "string" } }, @@ -105532,7 +113352,7 @@ ] }, "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", - "created_at": "2024-01-01T00:00:00Z", + "created_at": "string", "default_model": "claude-3-7-sonnet-latest", "description": "An example description.", "email": "user@example.com", @@ -105680,7 +113500,7 @@ }, "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "template_upgrade_available": true, - "updated_at": "2024-01-01T00:00:00Z", + "updated_at": "string", "user": "usr_0aBcDeFgHiJkLmNoPqRsTu" }, "properties": { @@ -105714,6 +113534,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -105864,23 +113685,25 @@ }, "created_at": { "description": "When the agent was created (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "default_model": { "description": "Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `\"claude-3-7-sonnet-latest\"`).", "example": "claude-3-7-sonnet-latest", + "nullable": true, "type": "string" }, "description": { "description": "Human-readable description of what the agent does. `null` if not set.", "example": "An example description.", + "nullable": true, "type": "string" }, "email": { "description": "Email address provisioned for this agent. `null` if email delivery is not configured.", "example": "user@example.com", + "nullable": true, "type": "string" }, "id": { @@ -105891,16 +113714,19 @@ "identity": { "description": "System-level identity prompt that shapes the agent's persona and behavior.", "example": "You are a helpful assistant that answers questions about ArchAstro products.", + "nullable": true, "type": "string" }, "last_applied_template_config": { "description": "ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.", "example": "cfg_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "lookup_key": { "description": "Stable, user-defined identifier for this agent within the application. Unique per app.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -105918,26 +113744,31 @@ "org": { "description": "ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_name": { "description": "Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.", "example": "Example Name", + "nullable": true, "type": "string" }, "originator": { "description": "Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).", "example": "deploy-pipeline", + "nullable": true, "type": "string" }, "phone_number": { "description": "Phone number provisioned for this agent. `null` if SMS is not configured.", "example": "+15555550123", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "source_solution": { @@ -106071,6 +113902,7 @@ "virtual_path": "string" } }, + "nullable": true, "properties": { "current_solution": { "description": "Summary of the current parent Solution config row. `solution` is the pinned Solution version the agent points at; `current_solution` is the source Solution config row as it exists now.", @@ -106145,13 +113977,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -106167,6 +113999,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -106177,16 +114010,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -106199,11 +114035,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -106217,40 +114055,48 @@ "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" } }, @@ -106259,11 +114105,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -106279,6 +114127,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -106294,11 +114143,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -106314,6 +114165,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -106346,6 +114198,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -106353,6 +114206,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -106377,12 +114231,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -106398,10 +114253,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -106426,6 +114283,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -106451,6 +114309,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -106499,11 +114358,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -106514,21 +114375,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -106541,8 +114406,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -106553,6 +114417,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -106638,13 +114503,13 @@ }, "created_at": { "description": "When the Solution config was first imported (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "description": { "description": "Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.", "example": "An example description.", + "nullable": true, "type": "string" }, "events": { @@ -106660,6 +114525,7 @@ "image_url": { "description": "Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only.", "example": "https://example.com", + "nullable": true, "type": "string" }, "kind": { @@ -106670,16 +114536,19 @@ "latest_solution": { "description": "When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "latest_version": { "description": "When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.", "example": "1.0.0", + "nullable": true, "type": "string" }, "lookup_key": { "description": "The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -106692,11 +114561,13 @@ "name": { "description": "Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.", "example": "Example Name", + "nullable": true, "type": "string" }, "org": { "description": "Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "org_logo": { @@ -106710,40 +114581,48 @@ "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" } }, @@ -106752,11 +114631,13 @@ "org_name": { "description": "Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.", "example": "Example Name", + "nullable": true, "type": "string" }, "org_slug": { "description": "Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.", "example": "example-slug", + "nullable": true, "type": "string" }, "owners": { @@ -106772,6 +114653,7 @@ "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "screenshot_urls": { @@ -106787,11 +114669,13 @@ "solution_id": { "description": "Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "solution_version": { "description": "Semver string declared in the Solution body (e.g. `\"1.2.0\"`). `null` when the body does not declare a version.", "example": "1.2.0", + "nullable": true, "type": "string" }, "tag_keys": { @@ -106807,6 +114691,7 @@ "template_kind": { "description": "Wrapped template kind — `\"AgentTemplate\"`, `\"AutomationTemplate\"`, `\"AgentRoutineTemplate\"`, `\"AgentToolTemplate\"`, `\"AgentComputerTemplate\"`, or `\"SolutionTemplateRef\"` for ref-mode bundles.", "example": "AgentTemplate", + "nullable": true, "type": "string" }, "templates": { @@ -106839,6 +114724,7 @@ "description": { "description": "Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.", "example": "An example description.", + "nullable": true, "type": "string" }, "details": { @@ -106846,6 +114732,7 @@ "discriminator": { "propertyName": "type" }, + "nullable": true, "oneOf": [ { "description": "AutomationTemplate-specific details exposed by a Solution template summary.", @@ -106870,12 +114757,13 @@ }, "properties": { "automation_type": { - "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`).", + "description": "Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one.", "example": "string", + "nullable": true, "type": "string" }, "invoke_contract": { - "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning.", + "description": "Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types.", "example": { "input_schema": {}, "participants": [ @@ -106891,10 +114779,12 @@ "payload": {} } }, + "nullable": true, "properties": { "input_schema": { "description": "JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured.", "example": {}, + "nullable": true, "type": "object" }, "participants": { @@ -106919,6 +114809,7 @@ "description": { "description": "Workflow-authored explanation of the slot's role. `null` when the workflow declares none.", "example": "An example description.", + "nullable": true, "type": "string" }, "name": { @@ -106944,6 +114835,7 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "prefills": { @@ -106992,11 +114884,13 @@ "display_name": { "description": "Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { "description": "Template config ID (`cfg_...`). `null` for inline-only templates.", "example": "id_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "kind": { @@ -107007,21 +114901,25 @@ "lookup_key": { "description": "Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.", "example": "Example Name", + "nullable": true, "type": "string" }, "readme_url": { "description": "Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.", "example": "https://example.com", + "nullable": true, "type": "string" }, "virtual_path": { "description": "Stable virtual path assigned to the template config. `null` when no virtual path was set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -107034,8 +114932,7 @@ }, "updated_at": { "description": "When the Solution config was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "upgrade_available": { @@ -107046,6 +114943,7 @@ "virtual_path": { "description": "The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.", "example": "string", + "nullable": true, "type": "string" } }, @@ -107081,11 +114979,13 @@ "description": { "description": "Description of the template from the config body. `null` if the current version has no `description` field.", "example": "An example description.", + "nullable": true, "type": "string" }, "display_name": { "description": "Human-readable display name from the config body. `null` if the current version has no `display_name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "id": { @@ -107101,11 +115001,13 @@ "lookup_key": { "description": "Stable lookup key assigned to this template config. `null` if no lookup key is set.", "example": "string", + "nullable": true, "type": "string" }, "name": { "description": "Template name as stored in the config body. `null` if the current version has no `name` field.", "example": "Example Name", + "nullable": true, "type": "string" }, "updated_at": { @@ -107117,6 +115019,7 @@ "virtual_path": { "description": "Virtual filesystem path for this template config. `null` if not set.", "example": "string", + "nullable": true, "type": "string" } }, @@ -107136,22 +115039,24 @@ "team": { "description": "ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "template_upgrade_available": { "description": "True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`).", "example": true, + "nullable": true, "type": "boolean" }, "updated_at": { "description": "When the agent was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" } }, @@ -107160,16 +115065,19 @@ ], "type": "object" }, + "nullable": true, "type": "array" }, "role": { "description": "The authenticated user's membership role in this thread, e.g. `\"owner\"`, `\"member\"`, or `\"viewer\"`. `null` if the user is not a member.", "example": "member", + "nullable": true, "type": "string" }, "sandbox": { "description": "ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads.", "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "settings": { @@ -107179,8 +115087,9 @@ }, "properties": { "agent_enabled": { - "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.", + "description": "Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting.", "example": true, + "nullable": true, "type": "boolean" } }, @@ -107189,6 +115098,7 @@ "slug": { "description": "URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned.", "example": "example-slug", + "nullable": true, "type": "string" }, "sub_threads": { @@ -107199,6 +115109,7 @@ "items": { "type": "object" }, + "nullable": true, "type": "array" }, "tags": { @@ -107215,32 +115126,36 @@ "team": { "description": "ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "title": { "description": "Human-readable name of the thread. `null` if no title has been set.", "example": "Example Title", + "nullable": true, "type": "string" }, "ttl": { - "description": "Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire.", - "example": 3600, - "type": "integer" + "description": "Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire.", + "example": "2026-08-15T12:00:00", + "nullable": true, + "type": "string" }, "unread_count": { "description": "Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested.", "example": 5, + "nullable": true, "type": "integer" }, "updated_at": { "description": "When the thread was last modified (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "user": { "description": "ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads.", "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "visibility": { @@ -107452,7 +115367,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } }, @@ -107592,7 +115507,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { @@ -107626,6 +115541,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -107807,16 +115723,19 @@ "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": { @@ -107830,40 +115749,48 @@ "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" } }, @@ -107877,6 +115804,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -107886,6 +115814,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -107998,21 +115927,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -108023,6 +115956,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -108036,40 +115970,48 @@ "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" } }, @@ -108078,31 +116020,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -108113,10 +116059,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -108167,6 +116114,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -108183,11 +116131,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -108206,40 +116156,48 @@ "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" } }, @@ -108254,6 +116212,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -108264,6 +116223,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -108277,11 +116237,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -108296,17 +116258,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -108322,6 +116285,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -108332,6 +116296,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -108344,6 +116309,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -108395,6 +116361,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -108410,11 +116377,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -108557,9 +116526,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -108571,27 +116541,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -108776,7 +116899,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" } }, @@ -108916,7 +117039,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { @@ -108950,6 +117073,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -109131,16 +117255,19 @@ "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": { @@ -109154,40 +117281,48 @@ "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" } }, @@ -109201,6 +117336,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -109210,6 +117346,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -109322,21 +117459,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -109347,6 +117488,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -109360,40 +117502,48 @@ "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" } }, @@ -109402,31 +117552,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -109437,10 +117591,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -109491,6 +117646,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -109507,11 +117663,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -109530,40 +117688,48 @@ "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" } }, @@ -109578,6 +117744,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -109588,6 +117755,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -109601,11 +117769,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -109620,17 +117790,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -109646,6 +117817,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -109656,6 +117828,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -109668,6 +117841,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -109719,6 +117893,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -109734,11 +117909,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -109881,9 +118058,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -109895,27 +118073,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -110220,7 +118551,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "thread_id": "string" @@ -110369,7 +118700,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { @@ -110403,6 +118734,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -110584,16 +118916,19 @@ "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": { @@ -110607,40 +118942,48 @@ "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" } }, @@ -110654,6 +118997,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -110663,6 +119007,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -110775,21 +119120,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -110800,6 +119149,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -110813,40 +119163,48 @@ "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" } }, @@ -110855,31 +119213,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -110890,10 +119252,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -110944,6 +119307,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -110960,11 +119324,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -110983,40 +119349,48 @@ "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" } }, @@ -111031,6 +119405,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -111041,6 +119416,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -111054,11 +119430,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -111073,17 +119451,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -111099,6 +119478,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -111109,6 +119489,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -111121,6 +119502,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -111172,6 +119554,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -111187,11 +119570,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -111334,9 +119719,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -111348,27 +119734,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -111531,7 +120070,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "thread_id": "string" @@ -111672,7 +120211,7 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, "properties": { @@ -111706,6 +120245,7 @@ } ] }, + "nullable": true, "properties": { "add": { "description": "Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.", @@ -111887,16 +120427,19 @@ "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": { @@ -111910,40 +120453,48 @@ "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" } }, @@ -111957,6 +120508,7 @@ "agent": { "description": "ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.", "example": "agi_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "agent_mode": { @@ -111966,6 +120518,7 @@ "embedded" ], "example": "cli", + "nullable": true, "type": "string" }, "attachments": { @@ -112078,21 +120631,25 @@ "content_type": { "description": "MIME type of the attached file, e.g. `\"image/png\"` or `\"application/pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "application/json", + "nullable": true, "type": "string" }, "description": { "description": "Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.", "example": "An example description.", + "nullable": true, "type": "string" }, "filename": { "description": "Original filename of the attached file, e.g. `\"report.pdf\"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "id": { @@ -112103,6 +120660,7 @@ "image_height": { "description": "Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "image_source": { @@ -112116,40 +120674,48 @@ "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" } }, @@ -112158,31 +120724,35 @@ "image_url": { "description": "URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.", "example": "https://example.com", + "nullable": true, "type": "string" }, "image_width": { "description": "Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "media_type": { - "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only. `null` otherwise.", + "description": "The media category, e.g. `\"video\"` or `\"audio\"`. Present on `media` type only; omitted otherwise.", "example": "application/json", "type": "string" }, "name": { "description": "Display name of the media item. Present on `media` type only. `null` otherwise.", "example": "Example Name", + "nullable": true, "type": "string" }, "object": { - "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types.", + "description": "The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types.", "example": {}, "type": "object" }, "title": { "description": "Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.", "example": "Example Title", + "nullable": true, "type": "string" }, "type": { @@ -112193,10 +120763,11 @@ "url": { "description": "URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variants": { - "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.", + "description": "Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise.", "example": [ { "content_type": "application/json", @@ -112247,6 +120818,7 @@ "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", + "nullable": true, "type": "string" }, "created_at": { @@ -112263,11 +120835,13 @@ "filename": { "description": "Original filename of the uploaded file for this variant. `null` if the file is not loaded.", "example": "string", + "nullable": true, "type": "string" }, "height": { "description": "Height of this variant in pixels. `null` if not recorded.", "example": 600, + "nullable": true, "type": "integer" }, "id": { @@ -112286,40 +120860,48 @@ "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" } }, @@ -112334,6 +120916,7 @@ "url": { "description": "Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.", "example": "https://example.com", + "nullable": true, "type": "string" }, "variant_key": { @@ -112344,6 +120927,7 @@ "width": { "description": "Width of this variant in pixels. `null` if not recorded.", "example": 800, + "nullable": true, "type": "integer" } }, @@ -112357,11 +120941,13 @@ "version": { "description": "Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" }, "width": { "description": "Width in pixels of the media item. Present on `media` type only. `null` otherwise.", "example": 1, + "nullable": true, "type": "integer" } }, @@ -112376,17 +120962,18 @@ "branched_thread": { "description": "ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.", "example": "string", + "nullable": true, "type": "string" }, "content": { "description": "Text content of the message. `null` for messages that contain only attachments.", "example": "Hello, how can I help you today?", + "nullable": true, "type": "string" }, "created_at": { "description": "When the message was posted (ISO 8601).", - "example": "2024-01-01T00:00:00Z", - "format": "date-time", + "example": "string", "type": "string" }, "has_replies": { @@ -112402,6 +120989,7 @@ "idempotency_key": { "description": "Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.", "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, "type": "string" }, "is_deleted": { @@ -112412,6 +121000,7 @@ "legacy_agent": { "description": "Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.", "example": "string", + "nullable": true, "type": "string" }, "metadata": { @@ -112424,6 +121013,7 @@ "org": { "description": "ID of the organization that owns this message (`org_...`).", "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "reactions": { @@ -112475,6 +121065,7 @@ "rendering_mode": { "description": "Display hint for how the message should be rendered. One of `\"reply\"`, `\"direct\"`, or `\"inline\"`. `null` for user-authored messages, which are always rendered as standard replies.", "example": "reply", + "nullable": true, "type": "string" }, "replies": { @@ -112490,11 +121081,13 @@ "replies_after_cursor": { "description": "Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "replies_before_cursor": { "description": "Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.", "example": "string", + "nullable": true, "type": "string" }, "reply_count": { @@ -112637,9 +121230,10 @@ "team": "tem_0aBcDeFgHiJkLmNoPqRsTu", "thread": "string", "type": "note", - "user": "string", + "user": "usr_0aBcDeFgHiJkLmNoPqRsTu", "visibility": "default" }, + "nullable": true, "type": "object" }, "root_message_id": { @@ -112651,27 +121245,180 @@ "sandbox": { "description": "ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.", "example": "string", + "nullable": true, "type": "string" }, "team": { "description": "ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.", "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "thread": { - "description": "ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.", + "description": "ID of the thread this message belongs to (`thr_...`).", "example": "string", "type": "string" }, "type": { "description": "Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset.", "example": "note", + "nullable": true, "type": "string" }, "user": { "description": "The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.", - "example": "string", - "type": "string" + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "oneOf": [ + { + "type": "string" + }, + { + "description": "A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API.", + "example": { + "alias": "jdoe", + "app": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "app_name": "Example Name", + "created_by_agent_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_developer": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_team": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "created_by_user": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "email": "user@example.com", + "id": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "is_system_user": true, + "metadata": { + "key": "value" + }, + "name": "Example Name", + "org": "org_0aBcDeFgHiJkLmNoPqRsTu", + "org_name": "Example Name", + "org_role": "member", + "org_slug": "example-slug", + "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "sandbox_name": "Example Name" + }, + "properties": { + "alias": { + "description": "Short handle or alias for the user. `null` if not set.", + "example": "jdoe", + "nullable": true, + "type": "string" + }, + "app": { + "description": "ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.", + "example": "dap_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "app_name": { + "description": "Display name of the user's app. `null` when the app association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "created_by_agent_user": { + "description": "Agent user that created this account (`usr_...`). `null` unless an agent created it.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_developer": { + "description": "Developer account that created this user (`dva_...`). `null` unless created via a developer token.", + "example": "dva_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_org": { + "description": "Org of the principal that created this user (`org_...`). `null` on legacy rows.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_team": { + "description": "Team that created this user (`tem_...`). `null` unless created as a team.", + "example": "tem_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "created_by_user": { + "description": "User who created this account (`usr_...`). `null` on self-signup or legacy rows.", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "email": { + "description": "Email address of the user.", + "example": "user@example.com", + "nullable": true, + "type": "string" + }, + "id": { + "description": "User ID (`usr_...`).", + "example": "usr_0aBcDeFgHiJkLmNoPqRsTu", + "type": "string" + }, + "is_system_user": { + "description": "`true` if this account is an internal system user rather than a human. System users are created automatically by the platform.", + "example": true, + "type": "boolean" + }, + "metadata": { + "description": "Arbitrary key-value metadata attached to the user. Defaults to an empty object.", + "example": { + "key": "value" + }, + "type": "object" + }, + "name": { + "description": "Full display name of the user. `null` if the user has not set a name.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org": { + "description": "ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.", + "example": "org_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "org_name": { + "description": "Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + }, + "org_role": { + "description": "Role of the user within their organization. One of `\"admin\"`, `\"member\"`, or `\"viewer\"`. `null` when the user is not a member of any organization.", + "example": "member", + "nullable": true, + "type": "string" + }, + "org_slug": { + "description": "Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.", + "example": "example-slug", + "nullable": true, + "type": "string" + }, + "sandbox": { + "description": "ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.", + "example": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, + "type": "string" + }, + "sandbox_name": { + "description": "Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.", + "example": "Example Name", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] }, "visibility": { "description": "Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees.", @@ -112781,16 +121528,19 @@ "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": { @@ -112804,40 +121554,48 @@ "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" } }, @@ -113398,6 +122156,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -113427,6 +122186,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -113471,6 +122233,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -113500,6 +122263,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -113542,6 +122308,7 @@ }, "description": "An example description.", "due_date": "2024-01-01T00:00:00Z", + "epic": "string", "id": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "is_blocked": true, "links": { @@ -113571,6 +122338,9 @@ "parent": "tsk_0aBcDeFgHiJkLmNoPqRsTu", "priority": 2, "sandbox": "dsb_0aBcDeFgHiJkLmNoPqRsTu", + "source_id": "string", + "source_scope": "string", + "source_type": "string", "status": "open", "subtasks_count": 1, "tags": [ @@ -113585,6 +122355,7 @@ "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" }, "blocked_by_count": { @@ -113596,6 +122367,7 @@ "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": { @@ -113625,20 +122397,24 @@ "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": { @@ -113652,40 +122428,48 @@ "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" } }, @@ -113697,11 +122481,13 @@ "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": { @@ -113740,12 +122526,20 @@ "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": { @@ -113780,6 +122574,7 @@ "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": { @@ -113798,20 +122593,24 @@ "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": { @@ -113825,40 +122624,48 @@ "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" } }, @@ -113870,16 +122677,19 @@ "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. Subtasks nest exactly one level.", "example": "tsk_0aBcDeFgHiJkLmNoPqRsTu", + "nullable": true, "type": "string" }, "priority": { @@ -113890,6 +122700,25 @@ "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" }, "status": { @@ -113915,11 +122744,13 @@ "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": { @@ -113931,6 +122762,7 @@ "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" } }, diff --git a/src/generated/channels.rs b/src/generated/channels.rs index a5ef02a..6bf0256 100644 --- a/src/generated/channels.rs +++ b/src/generated/channels.rs @@ -1,6 +1,6 @@ // Copyright (c) 2026 ArchAstro Inc. Licensed under the MIT License. // This file is auto-generated by @archastro/sdk-generator. Do not edit. -// Content hash: c35ce7867ef7 +// Content hash: 71d5ea122fe1 use crate::{Channel, ChannelEventStream, Result, Socket}; use serde::{Deserialize, Serialize}; @@ -249,25 +249,25 @@ pub struct ApiChatChannelMessageAddedPayloadMessageAcl { pub struct ApiChatChannelMessageAddedPayloadMessageActorsItemProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -275,16 +275,17 @@ pub struct ApiChatChannelMessageAddedPayloadMessageActorsItemProfilePicture { pub struct ApiChatChannelMessageAddedPayloadMessageActorsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -292,25 +293,25 @@ pub struct ApiChatChannelMessageAddedPayloadMessageActorsItem { pub struct ApiChatChannelMessageAddedPayloadMessageAttachmentsItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -318,25 +319,25 @@ pub struct ApiChatChannelMessageAddedPayloadMessageAttachmentsItemImageSource { pub struct ApiChatChannelMessageAddedPayloadMessageAttachmentsItemVariantsItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -344,7 +345,7 @@ pub struct ApiChatChannelMessageAddedPayloadMessageAttachmentsItemVariantsItemIm pub struct ApiChatChannelMessageAddedPayloadMessageAttachmentsItemVariantsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of this variant's file (e.g., `"image/jpeg"`, `"video/mp4"`). `null` if the file is not loaded. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was created (ISO 8601). pub created_at: Option>, @@ -353,28 +354,29 @@ pub struct ApiChatChannelMessageAddedPayloadMessageAttachmentsItemVariantsItem { pub file: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the uploaded file for this variant. `null` if the file is not loaded. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of this variant in pixels. `null` if not recorded. - pub height: Option, + pub height: Option>, /// Media variant ID (`mvr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types. - pub image_source: + pub image_source: Option< Option, + >, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was last updated (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed download URL for this variant, resolved at request time. `null` if the file is unavailable. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier for this variant's processing tier. Common values include `"original"` (the unmodified upload) and `"thumbnail"` (a resized preview). pub variant_key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of this variant in pixels. `null` if not recorded. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -382,57 +384,58 @@ pub struct ApiChatChannelMessageAddedPayloadMessageAttachmentsItemVariantsItem { pub struct ApiChatChannelMessageAddedPayloadMessageAttachmentsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the attached file, e.g. `"image/png"` or `"application/pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the attached file, e.g. `"report.pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the media item. Present on `media` type only. `null` otherwise. - pub height: Option, + pub height: Option>, /// Unique identifier for this attachment within the message. pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_height: Option, + pub image_height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise. - pub image_source: Option, + pub image_source: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise. - pub image_url: Option, + pub image_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_width: Option, + pub image_width: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only. `null` otherwise. + /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only; omitted otherwise. pub media_type: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the media item. Present on `media` type only. `null` otherwise. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types. + /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types. pub object: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types. - pub title: Option, + pub title: Option>, #[serde(rename = "type")] /// The attachment type. One of `"file"`, `"scraped_link"`, `"artifact"`, `"task"`, `"media"`, `"action"`, or `"chart"`. Determines which additional fields are present. pub type_: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise. + /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise. pub variants: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise. - pub version: Option, + pub version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the media item. Present on `media` type only. `null` otherwise. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -460,6 +463,16 @@ pub enum ApiChatChannelMessageAddedPayloadMessageAgentMode { Embedded, } +/// Contract-defined alternatives for ApiChatChannelMessageAddedPayloadMessageUser. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ApiChatChannelMessageAddedPayloadMessageUser { + /// Variant1 union variant. + Variant1(String), + /// Variant2 union variant. + Variant2(Value), +} + /// Contract-defined values for ApiChatChannelMessageAddedPayloadMessageVisibility. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum ApiChatChannelMessageAddedPayloadMessageVisibility { @@ -476,28 +489,28 @@ pub enum ApiChatChannelMessageAddedPayloadMessageVisibility { pub struct ApiChatChannelMessageAddedPayloadMessage { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved actor descriptors for the message sender, combining identity and display metadata. Always contains exactly one entry. pub actors: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Local agent execution mode for this message. One of `cli`, `embedded`, or `null` when the message was not created by a local agent execution path. - pub agent_mode: Option, + pub agent_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Files, links, tasks, media, artifacts, and actions attached to this message. Empty array if there are no attachments. pub attachments: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread. - pub branched_thread: Option, + pub branched_thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Text content of the message. `null` for messages that contain only attachments. - pub content: Option, + pub content: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the message was posted (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message has at least one reply. Only present when explicitly requested or computed by the server. pub has_replies: Option, @@ -505,59 +518,59 @@ pub struct ApiChatChannelMessageAddedPayloadMessage { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one. - pub idempotency_key: Option, + pub idempotency_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message is a deletion tombstone. `true` only on the `message_updated` broadcast emitted when a message is deleted: the original content is replaced with a placeholder and the message no longer exists on the server. Always `false` for live messages. pub is_deleted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users. - pub legacy_agent: Option, + pub legacy_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the message. Always present; defaults to an empty object when no metadata has been set. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization that owns this message (`org_...`). - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Emoji and other reactions added to this message by users. Empty array if no reactions have been added or the association is not preloaded. pub reactions: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display hint for how the message should be rendered. One of `"reply"`, `"direct"`, or `"inline"`. `null` for user-authored messages, which are always rendered as standard replies. - pub rendering_mode: Option, + pub rendering_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Inline array of reply messages, each serialized as a full message object. Only present when the server has preloaded replies for this message. pub replies: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response. - pub replies_after_cursor: Option, + pub replies_after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response. - pub replies_before_cursor: Option, + pub replies_before_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of direct replies to this message. Only present when explicitly requested or computed by the server. pub reply_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The parent message this message is a reply to, expanded as a full message object when loaded. `null` if this is a top-level message or the association is not preloaded. - pub reply_to: Option>, + pub reply_to: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the root message in this reply chain (`msg_...`). `null` for a top-level message. The value is persisted when the reply is created, so callers can correlate a multi-turn session without walking parent messages. pub root_message_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread. + /// ID of the thread this message belongs to (`thr_...`). pub thread: Option, #[serde(rename = "type")] #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset. - pub type_: Option, + pub type_: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents. - pub user: Option, + pub user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees. pub visibility: Option, @@ -632,25 +645,25 @@ pub struct ApiChatChannelMessageUpdatedPayloadMessageAcl { pub struct ApiChatChannelMessageUpdatedPayloadMessageActorsItemProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -658,16 +671,17 @@ pub struct ApiChatChannelMessageUpdatedPayloadMessageActorsItemProfilePicture { pub struct ApiChatChannelMessageUpdatedPayloadMessageActorsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -675,25 +689,25 @@ pub struct ApiChatChannelMessageUpdatedPayloadMessageActorsItem { pub struct ApiChatChannelMessageUpdatedPayloadMessageAttachmentsItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -701,25 +715,25 @@ pub struct ApiChatChannelMessageUpdatedPayloadMessageAttachmentsItemImageSource pub struct ApiChatChannelMessageUpdatedPayloadMessageAttachmentsItemVariantsItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -727,7 +741,7 @@ pub struct ApiChatChannelMessageUpdatedPayloadMessageAttachmentsItemVariantsItem pub struct ApiChatChannelMessageUpdatedPayloadMessageAttachmentsItemVariantsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of this variant's file (e.g., `"image/jpeg"`, `"video/mp4"`). `null` if the file is not loaded. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was created (ISO 8601). pub created_at: Option>, @@ -736,28 +750,29 @@ pub struct ApiChatChannelMessageUpdatedPayloadMessageAttachmentsItemVariantsItem pub file: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the uploaded file for this variant. `null` if the file is not loaded. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of this variant in pixels. `null` if not recorded. - pub height: Option, + pub height: Option>, /// Media variant ID (`mvr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types. - pub image_source: + pub image_source: Option< Option, + >, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was last updated (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed download URL for this variant, resolved at request time. `null` if the file is unavailable. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier for this variant's processing tier. Common values include `"original"` (the unmodified upload) and `"thumbnail"` (a resized preview). pub variant_key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of this variant in pixels. `null` if not recorded. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -765,58 +780,59 @@ pub struct ApiChatChannelMessageUpdatedPayloadMessageAttachmentsItemVariantsItem pub struct ApiChatChannelMessageUpdatedPayloadMessageAttachmentsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the attached file, e.g. `"image/png"` or `"application/pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the attached file, e.g. `"report.pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the media item. Present on `media` type only. `null` otherwise. - pub height: Option, + pub height: Option>, /// Unique identifier for this attachment within the message. pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_height: Option, + pub image_height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise. - pub image_source: Option, + pub image_source: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise. - pub image_url: Option, + pub image_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_width: Option, + pub image_width: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only. `null` otherwise. + /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only; omitted otherwise. pub media_type: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the media item. Present on `media` type only. `null` otherwise. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types. + /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types. pub object: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types. - pub title: Option, + pub title: Option>, #[serde(rename = "type")] /// The attachment type. One of `"file"`, `"scraped_link"`, `"artifact"`, `"task"`, `"media"`, `"action"`, or `"chart"`. Determines which additional fields are present. pub type_: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise. + /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise. pub variants: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise. - pub version: Option, + pub version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the media item. Present on `media` type only. `null` otherwise. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -844,6 +860,16 @@ pub enum ApiChatChannelMessageUpdatedPayloadMessageAgentMode { Embedded, } +/// Contract-defined alternatives for ApiChatChannelMessageUpdatedPayloadMessageUser. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ApiChatChannelMessageUpdatedPayloadMessageUser { + /// Variant1 union variant. + Variant1(String), + /// Variant2 union variant. + Variant2(Value), +} + /// Contract-defined values for ApiChatChannelMessageUpdatedPayloadMessageVisibility. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum ApiChatChannelMessageUpdatedPayloadMessageVisibility { @@ -860,28 +886,28 @@ pub enum ApiChatChannelMessageUpdatedPayloadMessageVisibility { pub struct ApiChatChannelMessageUpdatedPayloadMessage { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved actor descriptors for the message sender, combining identity and display metadata. Always contains exactly one entry. pub actors: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Local agent execution mode for this message. One of `cli`, `embedded`, or `null` when the message was not created by a local agent execution path. - pub agent_mode: Option, + pub agent_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Files, links, tasks, media, artifacts, and actions attached to this message. Empty array if there are no attachments. pub attachments: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread. - pub branched_thread: Option, + pub branched_thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Text content of the message. `null` for messages that contain only attachments. - pub content: Option, + pub content: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the message was posted (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message has at least one reply. Only present when explicitly requested or computed by the server. pub has_replies: Option, @@ -889,59 +915,59 @@ pub struct ApiChatChannelMessageUpdatedPayloadMessage { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one. - pub idempotency_key: Option, + pub idempotency_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message is a deletion tombstone. `true` only on the `message_updated` broadcast emitted when a message is deleted: the original content is replaced with a placeholder and the message no longer exists on the server. Always `false` for live messages. pub is_deleted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users. - pub legacy_agent: Option, + pub legacy_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the message. Always present; defaults to an empty object when no metadata has been set. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization that owns this message (`org_...`). - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Emoji and other reactions added to this message by users. Empty array if no reactions have been added or the association is not preloaded. pub reactions: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display hint for how the message should be rendered. One of `"reply"`, `"direct"`, or `"inline"`. `null` for user-authored messages, which are always rendered as standard replies. - pub rendering_mode: Option, + pub rendering_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Inline array of reply messages, each serialized as a full message object. Only present when the server has preloaded replies for this message. pub replies: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response. - pub replies_after_cursor: Option, + pub replies_after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response. - pub replies_before_cursor: Option, + pub replies_before_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of direct replies to this message. Only present when explicitly requested or computed by the server. pub reply_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The parent message this message is a reply to, expanded as a full message object when loaded. `null` if this is a top-level message or the association is not preloaded. - pub reply_to: Option>, + pub reply_to: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the root message in this reply chain (`msg_...`). `null` for a top-level message. The value is persisted when the reply is created, so callers can correlate a multi-turn session without walking parent messages. pub root_message_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread. + /// ID of the thread this message belongs to (`thr_...`). pub thread: Option, #[serde(rename = "type")] #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset. - pub type_: Option, + pub type_: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents. - pub user: Option, + pub user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees. pub visibility: Option, @@ -983,25 +1009,25 @@ pub struct ApiChatChannelSystemEventPayload { pub struct ApiChatChannelTypingPayloadActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -1009,16 +1035,16 @@ pub struct ApiChatChannelTypingPayloadActorProfilePicture { pub struct ApiChatChannelTypingPayloadActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: Option>, } /// Broadcast when a participant (human or agent) starts or stops typing. Ephemeral; never persisted. @@ -1082,7 +1108,36 @@ pub struct ApiChatChannelJoinTeamTransientParams { /// API field. pub limit: Option, } -/// Join a user-scoped thread by ID +/// Generated from the ArchAstro OpenAPI contract. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct ApiChatChannelJoinUserThreadParamsLocalToolsItemFunction { + /// API field. + pub description: String, + /// API field. + pub name: String, + /// API field. + pub parameters: std::collections::BTreeMap, +} + +/// Contract-defined values for ApiChatChannelJoinUserThreadParamsLocalToolsItemType. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum ApiChatChannelJoinUserThreadParamsLocalToolsItemType { + /// The function wire value. + #[serde(rename = "function")] + Function, +} + +/// Generated from the ArchAstro OpenAPI contract. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct ApiChatChannelJoinUserThreadParamsLocalToolsItem { + /// A function implemented by the client connected to a personal thread. + pub function: ApiChatChannelJoinUserThreadParamsLocalToolsItemFunction, + #[serde(rename = "type")] + /// API field. + pub type_: ApiChatChannelJoinUserThreadParamsLocalToolsItemType, +} + +/// Join a user-scoped thread by ID, optionally supplying local tools for a personal thread #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct ApiChatChannelJoinUserThreadParams { #[serde(default, skip_serializing_if = "Option::is_none")] @@ -1097,6 +1152,12 @@ pub struct ApiChatChannelJoinUserThreadParams { #[serde(default, skip_serializing_if = "Option::is_none")] /// API field. pub limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub local_tool_provider_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub local_tools: Option>, } /// Join or create a user-scoped keyed thread #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] @@ -1197,7 +1258,7 @@ impl ApiChatChannel { join_response, }) } - /// Join a user-scoped thread by ID + /// Join a user-scoped thread by ID, optionally supplying local tools for a personal thread pub async fn join_user_thread( socket: &Socket, thread_id: &str, @@ -1619,25 +1680,25 @@ impl ApiObjectChannel { pub struct ApiTasksChannelTasksUpdatedPayloadTasksItemCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -1645,17 +1706,17 @@ pub struct ApiTasksChannelTasksUpdatedPayloadTasksItemCreatedByActorProfilePictu pub struct ApiTasksChannelTasksUpdatedPayloadTasksItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -1674,25 +1735,25 @@ pub struct ApiTasksChannelTasksUpdatedPayloadTasksItemCurrentLease { pub struct ApiTasksChannelTasksUpdatedPayloadTasksItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -1700,17 +1761,17 @@ pub struct ApiTasksChannelTasksUpdatedPayloadTasksItemOwnerActorProfilePicture { pub struct ApiTasksChannelTasksUpdatedPayloadTasksItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -1718,13 +1779,13 @@ pub struct ApiTasksChannelTasksUpdatedPayloadTasksItemOwnerActor { pub struct ApiTasksChannelTasksUpdatedPayloadTasksItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -1733,22 +1794,25 @@ pub struct ApiTasksChannelTasksUpdatedPayloadTasksItem { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -1764,25 +1828,34 @@ pub struct ApiTasksChannelTasksUpdatedPayloadTasksItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -1793,16 +1866,16 @@ pub struct ApiTasksChannelTasksUpdatedPayloadTasksItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Broadcast when the thread's task records change; carries a full snapshot diff --git a/src/generated/types.rs b/src/generated/types.rs index 5096004..e89b565 100644 --- a/src/generated/types.rs +++ b/src/generated/types.rs @@ -1,6 +1,6 @@ // Copyright (c) 2026 ArchAstro Inc. Licensed under the MIT License. // This file is auto-generated by @archastro/sdk-generator. Do not edit. -// Content hash: 291fb04517f7 +// Content hash: fbc59e1df02b #![allow(clippy::large_enum_variant)] use serde::{Deserialize, Serialize}; @@ -333,25 +333,25 @@ pub struct ActivityFeedEntryListResponse { pub struct ImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// The entity that authored a message, either a human user or an agent. @@ -359,16 +359,16 @@ pub struct ImageSource { pub struct Actor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: Option>, } /// A named participant slot declared by an automation's workflow. Embedded stages hand work to the agent the invoker names for the slot. @@ -376,7 +376,7 @@ pub struct Actor { pub struct AutomationParticipantSlot { #[serde(default, skip_serializing_if = "Option::is_none")] /// Workflow-authored explanation of the slot's role. `null` when the workflow declares none. - pub description: Option, + pub description: Option>, /// The slot's name, as referenced by the workflow. Supply the chosen agent under the top-level `participants[name]` field when invoking. pub name: String, /// Whether the workflow requires this slot to be filled for the run to complete its embedded stages. @@ -402,10 +402,10 @@ pub struct AutomationPrefills { pub struct SolutionAutomationInvokeContract { #[serde(default, skip_serializing_if = "Option::is_none")] /// JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured. - pub input_schema: Option>, + pub input_schema: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Named participant slots declared by the workflow, sorted by name. `null` when the workflow declares none. Values supplied under the top-level `participants` field are agent IDs. - pub participants: Option>, + pub participants: Option>>, /// Owner-controlled payload and participant values the platform applies to every invocation. Supplying a conflicting value is rejected. pub prefills: AutomationPrefills, } @@ -422,11 +422,11 @@ pub enum SolutionAutomationTemplateDetailsType { #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct SolutionAutomationTemplateDetails { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Automation execution type (`invoked`, `scheduled`, or `trigger`). - pub automation_type: Option, + /// Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one. + pub automation_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. - pub invoke_contract: Option, + /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types. + pub invoke_contract: Option>, #[serde(rename = "type")] /// Template-details discriminator. Always `automation` for this variant. pub type_: SolutionAutomationTemplateDetailsType, @@ -445,30 +445,30 @@ pub enum SolutionTemplateDetails { pub struct SolutionTemplateSummary { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details. - pub details: Option, + pub details: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`. - pub display_name: Option, + pub display_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template config ID (`cfg_...`). `null` for inline-only templates. - pub id: Option, + pub id: Option>, /// Template config kind, or `SolutionTemplateRef` / `SolutionTemplatePath` when unresolved. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Lookup key stamped on the template config at import time. `null` when no lookup key was assigned. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable virtual path assigned to the template config. `null` when no virtual path was set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// A catalog entry for an imported Solution, including its display metadata, bundled templates, owner scopes, and any available upgrade information. @@ -479,10 +479,10 @@ pub struct SolutionSummary { pub category_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was first imported (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Custom analytics events declared in the Solution body's `events:` manifest — a map of event key (snake_case) to its definition (`label`, optional `description`, optional typed `fields`). Dashboards use the `label` as the event's display name. Present as an empty object when the body declares none. pub events: Option>, @@ -490,66 +490,66 @@ pub struct SolutionSummary { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only. - pub image_url: Option, + pub image_url: Option>, /// Resource type. Always `"Solution"`. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise. - pub latest_solution: Option, + pub latest_solution: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise. - pub latest_version: Option, + pub latest_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata declared in the Solution body (e.g. category or display hints). Present as an empty object when the body declares none. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing display name declared in the Solution body. `null` when the Solution body does not set one. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo. - pub org_logo: Option, + pub org_logo: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve. - pub org_slug: Option, + pub org_slug: Option>, /// Owner scopes this Solution appears under. Members: `"system"` (app-level system scope) and/or `"org"` (viewer's org scope). pub owners: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URLs of the Solution's gallery screenshots — the bundled assets the body's `screenshots:` field names, in declared order. Each is a stable, non-expiring capability URL with the same cacheability contract as `image_url` (one shared token, a `v` cache key, and a `file` param selecting the screenshot); a URL 404s if the Solution stops declaring its screenshot. An empty array when the Solution declares none, and always empty for org-scoped rows — the permanent URLs are minted for system-scope (catalog) Solutions only. pub screenshot_urls: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it. - pub solution_id: Option, + pub solution_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string declared in the Solution body (e.g. `"1.2.0"`). `null` when the body does not declare a version. - pub solution_version: Option, + pub solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Freeform tag keys declared in the Solution body. An empty array when the body declares none. pub tag_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Wrapped template kind — `"AgentTemplate"`, `"AutomationTemplate"`, `"AgentRoutineTemplate"`, `"AgentToolTemplate"`, `"AgentComputerTemplate"`, or `"SolutionTemplateRef"` for ref-mode bundles. - pub template_kind: Option, + pub template_kind: Option>, /// Template configs bundled by this Solution, in declaration order — the first entry is the deployable template the Solution wraps; the rest are sibling templates the wrapped template references. pub templates: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, /// `true` when this Solution is installed at the viewer's org scope and the app-level system scope carries a higher `solution_version`. Always `false` for system-only rows. pub upgrade_available: bool, #[serde(default, skip_serializing_if = "Option::is_none")] /// The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Compact summary of an AgentTemplate config referenced by an agent upgrade or source-solution response. @@ -560,26 +560,26 @@ pub struct UpgradeTemplateSummary { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Description of the template from the config body. `null` if the current version has no `description` field. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable display name from the config body. `null` if the current version has no `display_name` field. - pub display_name: Option, + pub display_name: Option>, /// Template config ID (`cfg_...`). pub id: String, /// Config kind identifier for this template (e.g. `"agent_tool_template"`). pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable lookup key assigned to this template config. `null` if no lookup key is set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template name as stored in the config body. `null` if the current version has no `name` field. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this template config was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Virtual filesystem path for this template config. `null` if not set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Summary of the Solution and AgentTemplate that an agent was last provisioned from. @@ -601,33 +601,33 @@ pub struct AgentSourceSolution { pub struct Agent { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for the agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied and the agent is accessible to all members of its scope. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the application that owns this agent (`dap_...`). pub app: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `"claude-3-7-sonnet-latest"`). - pub default_model: Option, + pub default_model: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable description of what the agent does. `null` if not set. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address provisioned for this agent. `null` if email delivery is not configured. - pub email: Option, + pub email: Option>, /// Agent ID (`agi_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// System-level identity prompt that shapes the agent's persona and behavior. - pub identity: Option, + pub identity: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents. - pub last_applied_template_config: Option, + pub last_applied_template_config: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable, user-defined identifier for this agent within the application. Unique per app. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the agent. Not interpreted by the platform. pub metadata: Option>, @@ -636,34 +636,34 @@ pub struct Agent { pub name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name). - pub originator: Option, + pub originator: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Phone number provisioned for this agent. `null` if SMS is not configured. - pub phone_number: Option, + pub phone_number: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Source Solution and AgentTemplate summary for agents provisioned from a Solution. Includes `upgrade_available`, `latest_version`, and `latest_solution` so you can render an upgrade badge without a separate dry-run call. `null` for hand-built agents and agents whose tracked template or parent Solution has been deleted. Populated only on single-agent GET responses, never on list endpoints. - pub source_solution: Option, + pub source_solution: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`). - pub template_upgrade_available: Option, + pub template_upgrade_available: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped. - pub user: Option, + pub user: Option>, } /// A cloud computer resource provisioned for an agent to use for browser and desktop automation tasks. @@ -733,7 +733,7 @@ pub struct InstalledConfigEntry { pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stored `lookup_key` for this config after any suffix has been applied. `null` for `File` children inside a skill bundle, which are keyed by `(parent_id, relative_path)` rather than by `lookup_key`. - pub lookup_key: Option, + pub lookup_key: Option>, } /// The response returned by `POST /api/v1/agents`. Contains all agent fields plus an optional `installed_configs` array when a `template_bundle` was supplied in the request. @@ -741,30 +741,30 @@ pub struct InstalledConfigEntry { pub struct AgentCreateResponse { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list governing who can interact with this agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the app this agent belongs to (`dap_...`). pub app: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Default AI model the agent uses when no model is specified at runtime, e.g. `"claude-3-5-sonnet-20241022"`. `null` if not configured. - pub default_model: Option, + pub default_model: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address assigned to this agent for inbound email handling. `null` if not configured. - pub email: Option, + pub email: Option>, /// Agent ID (`agi_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// System prompt or persona description that shapes the agent's behavior. `null` if not set. - pub identity: Option, + pub identity: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// List of config records created as part of this request's `template_bundle` install. One entry per persisted config, sorted by `key`. Omitted entirely when the request did not include a `template_bundle`. pub installed_configs: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Unique, stable identifier for the agent within its app. `null` if not set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the agent. `null` if none was provided. pub metadata: Option>, @@ -773,25 +773,25 @@ pub struct AgentCreateResponse { pub name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this agent belongs to (`org_...`). `null` for agents outside an org. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Free-form label identifying the source or author of the agent, e.g. a username or service name. `null` if not set. - pub originator: Option, + pub originator: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Phone number assigned to this agent for inbound SMS or voice handling. `null` if not configured. - pub phone_number: Option, + pub phone_number: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this agent is scoped to (`sbx_...`). `null` for agents not scoped to a sandbox. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this agent (`tea_...`). `null` if owned by a user rather than a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent record was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this agent (`usr_...`). `null` if owned by a team. - pub user: Option, + pub user: Option>, } /// An agent environment variable with its secret value masked for safe display in list and show responses. @@ -1671,7 +1671,7 @@ pub struct Artifact { pub struct MediaVariant { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of this variant's file (e.g., `"image/jpeg"`, `"video/mp4"`). `null` if the file is not loaded. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was created (ISO 8601). pub created_at: Option>, @@ -1680,27 +1680,27 @@ pub struct MediaVariant { pub file: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the uploaded file for this variant. `null` if the file is not loaded. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of this variant in pixels. `null` if not recorded. - pub height: Option, + pub height: Option>, /// Media variant ID (`mvr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types. - pub image_source: Option, + pub image_source: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was last updated (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed download URL for this variant, resolved at request time. `null` if the file is unavailable. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier for this variant's processing tier. Common values include `"original"` (the unmodified upload) and `"thumbnail"` (a resized preview). pub variant_key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of this variant in pixels. `null` if not recorded. - pub width: Option, + pub width: Option>, } /// A rich attachment associated with a message, such as a file, scraped link, artifact, task, media item, or inline action. @@ -1708,57 +1708,57 @@ pub struct MediaVariant { pub struct Attachment { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the attached file, e.g. `"image/png"` or `"application/pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the attached file, e.g. `"report.pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the media item. Present on `media` type only. `null` otherwise. - pub height: Option, + pub height: Option>, /// Unique identifier for this attachment within the message. pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_height: Option, + pub image_height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise. - pub image_source: Option, + pub image_source: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise. - pub image_url: Option, + pub image_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_width: Option, + pub image_width: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only. `null` otherwise. + /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only; omitted otherwise. pub media_type: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the media item. Present on `media` type only. `null` otherwise. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types. + /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types. pub object: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types. - pub title: Option, + pub title: Option>, #[serde(rename = "type")] /// The attachment type. One of `"file"`, `"scraped_link"`, `"artifact"`, `"task"`, `"media"`, `"action"`, or `"chart"`. Determines which additional fields are present. pub type_: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise. + /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise. pub variants: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise. - pub version: Option, + pub version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the media item. Present on `media` type only. `null` otherwise. - pub width: Option, + pub width: Option>, } /// A platform user account. Represents a human or system actor that can own threads, belong to an organization, and interact with the API. @@ -1766,16 +1766,31 @@ pub struct Attachment { pub struct User { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the user. `null` if not set. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app. - pub app: Option, + pub app: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's app. `null` when the app association was not preloaded by the caller. - pub app_name: Option, + pub app_name: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Agent user that created this account (`usr_...`). `null` unless an agent created it. + pub created_by_agent_user: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Developer account that created this user (`dva_...`). `null` unless created via a developer token. + pub created_by_developer: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Org of the principal that created this user (`org_...`). `null` on legacy rows. + pub created_by_org: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Team that created this user (`tem_...`). `null` unless created as a team. + pub created_by_team: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// User who created this account (`usr_...`). `null` on self-signup or legacy rows. + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address of the user. - pub email: Option, + pub email: Option>, /// User ID (`usr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -1786,25 +1801,25 @@ pub struct User { pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Full display name of the user. `null` if the user has not set a name. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Role of the user within their organization. One of `"admin"`, `"member"`, or `"viewer"`. `null` when the user is not a member of any organization. - pub org_role: Option, + pub org_role: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller. - pub org_slug: Option, + pub org_slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller. - pub sandbox_name: Option, + pub sandbox_name: Option>, } /// Credential bundle returned after a successful authentication exchange. Contains the access token, refresh token, and the authenticated user. @@ -1986,6 +2001,16 @@ pub enum MessageAgentMode { Embedded, } +/// Contract-defined alternatives for MessageUser. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum MessageUser { + /// Variant1 union variant. + Variant1(String), + /// Variant2 union variant. + Variant2(Value), +} + /// Contract-defined values for MessageVisibility. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum MessageVisibility { @@ -2002,28 +2027,28 @@ pub enum MessageVisibility { pub struct Message { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved actor descriptors for the message sender, combining identity and display metadata. Always contains exactly one entry. pub actors: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Local agent execution mode for this message. One of `cli`, `embedded`, or `null` when the message was not created by a local agent execution path. - pub agent_mode: Option, + pub agent_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Files, links, tasks, media, artifacts, and actions attached to this message. Empty array if there are no attachments. pub attachments: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread. - pub branched_thread: Option, + pub branched_thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Text content of the message. `null` for messages that contain only attachments. - pub content: Option, + pub content: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the message was posted (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message has at least one reply. Only present when explicitly requested or computed by the server. pub has_replies: Option, @@ -2031,59 +2056,59 @@ pub struct Message { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one. - pub idempotency_key: Option, + pub idempotency_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message is a deletion tombstone. `true` only on the `message_updated` broadcast emitted when a message is deleted: the original content is replaced with a placeholder and the message no longer exists on the server. Always `false` for live messages. pub is_deleted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users. - pub legacy_agent: Option, + pub legacy_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the message. Always present; defaults to an empty object when no metadata has been set. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization that owns this message (`org_...`). - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Emoji and other reactions added to this message by users. Empty array if no reactions have been added or the association is not preloaded. pub reactions: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display hint for how the message should be rendered. One of `"reply"`, `"direct"`, or `"inline"`. `null` for user-authored messages, which are always rendered as standard replies. - pub rendering_mode: Option, + pub rendering_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Inline array of reply messages, each serialized as a full message object. Only present when the server has preloaded replies for this message. pub replies: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response. - pub replies_after_cursor: Option, + pub replies_after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response. - pub replies_before_cursor: Option, + pub replies_before_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of direct replies to this message. Only present when explicitly requested or computed by the server. pub reply_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The parent message this message is a reply to, expanded as a full message object when loaded. `null` if this is a top-level message or the association is not preloaded. - pub reply_to: Option>, + pub reply_to: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the root message in this reply chain (`msg_...`). `null` for a top-level message. The value is persisted when the reply is created, so callers can correlate a multi-turn session without walking parent messages. pub root_message_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread. + /// ID of the thread this message belongs to (`thr_...`). pub thread: Option, #[serde(rename = "type")] #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset. - pub type_: Option, + pub type_: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents. - pub user: Option, + pub user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees. pub visibility: Option, @@ -2094,24 +2119,24 @@ pub struct Message { pub struct Team { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list governing visibility and join permissions for this team. `null` when no ACL restrictions are applied and the team inherits default access rules. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer application this team belongs to (`dap_...`). `null` if the team is not scoped to an app. pub app: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Aggregated badge counts for the team, keyed by category. `null` when badge data is not loaded. - pub badges: Option>, + pub badges: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this team was created (ISO 8601). pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable description of the team's purpose. `null` if not set. - pub description: Option, + pub description: Option>, /// Team ID (`tem_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// The authenticated viewer's role on this team. One of `"owner"`, `"admin"`, or `"member"`. `null` if the viewer is not a member. - pub membership_status: Option, + pub membership_status: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to this team. Returns an empty object when no metadata has been set. pub metadata: Option>, @@ -2120,13 +2145,13 @@ pub struct Team { pub name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this team belongs to (`org_...`). `null` if the team is not org-scoped. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this team is scoped to (`dsb_...`). `null` outside sandbox contexts. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL-safe slug for the team, derived from the team name. `null` if not set. - pub slug: Option, + pub slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this team was last updated (ISO 8601). pub updated_at: Option>, @@ -2136,8 +2161,8 @@ pub struct Team { #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct ThreadSettings { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. - pub agent_enabled: Option, + /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting. + pub agent_enabled: Option>, } /// Contract-defined alternatives for ThreadCreator. @@ -2169,16 +2194,16 @@ pub enum ThreadVisibility { pub struct Thread { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads. - pub agent_user: Option, + pub agent_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the thread was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown. - pub creator: Option, + pub creator: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional description or purpose statement for the thread. `null` if not set. - pub description: Option, + pub description: Option>, /// Thread ID (`thr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -2195,31 +2220,31 @@ pub struct Thread { pub is_unlisted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set. - pub key: Option, + pub key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Thread subtype: `"standard"` for ordinary threads, `"slack_mirror"` for the membership-strict mirror of a Slack channel, `"slashwork_mirror"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params. - pub kind: Option, + /// Thread subtype: `"standard"` for ordinary threads, `"personal"` for a user-and-owned-agents roster, `"slack_mirror"` for the membership-strict mirror of a Slack channel, or `"slashwork_mirror"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived. + pub kind: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment. - pub last_activity: Option>, + pub last_activity: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment. - pub last_message_preview: Option, + pub last_message_preview: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment. - pub last_message_sender: Option, + pub last_message_sender: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the thread. Shape is application-defined; `null` if no metadata has been set. - pub metadata: Option>, + pub metadata: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether the authenticated user has muted notifications for this thread. `true` suppresses all notification delivery. pub muted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The message that spawned this thread as a sub-thread. `null` for top-level threads. - pub parent_message: Option, + pub parent_message: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Array of participant user IDs (`usr_...`) who are members of this thread. pub participant: Option>, @@ -2231,43 +2256,43 @@ pub struct Thread { pub participating_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Expanded agent objects for all agents participating in this thread. Present only when agent enrichment is requested. - pub participating_agents: Option>, + pub participating_agents: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The authenticated user's membership role in this thread, e.g. `"owner"`, `"member"`, or `"viewer"`. `null` if the user is not a member. - pub role: Option, + pub role: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Per-thread configuration settings controlling AI agent behavior for this thread. pub settings: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned. - pub slug: Option, + pub slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Threads that are nested under this thread as replies to a parent message. Present only when sub-thread enrichment is requested. - pub sub_threads: Option>>, + pub sub_threads: Option>>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Status tags on the thread (e.g. `"blocked"`, `"needs-review"`). Edited by any thread participant via the `/threads/:thread/tags` endpoints and filterable on the thread list endpoints. Empty array if none set. pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable name of the thread. `null` if no title has been set. - pub title: Option, + pub title: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire. - pub ttl: Option, + /// Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire. + pub ttl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested. - pub unread_count: Option, + pub unread_count: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the thread was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads. - pub user: Option, + pub user: Option>, /// Who can read the thread: `team` for every owning-team member, `restricted` for team-readable threads with an explicit roster, or `private` for roster-only access. pub visibility: ThreadVisibility, } @@ -2320,6 +2345,35 @@ pub struct ChatLoadMoreMessagesResponse { pub data: ChatRoomModel, } +/// A function implemented by the client connected to a personal thread. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct ChatLocalToolFunction { + /// API field. + pub description: String, + /// API field. + pub name: String, + /// API field. + pub parameters: std::collections::BTreeMap, +} + +/// Contract-defined values for ChatLocalToolDefinitionType. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum ChatLocalToolDefinitionType { + /// The function wire value. + #[serde(rename = "function")] + Function, +} + +/// An OpenAI-compatible local function definition supplied while joining a personal thread. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct ChatLocalToolDefinition { + /// API field. + pub function: ChatLocalToolFunction, + #[serde(rename = "type")] + /// API field. + pub type_: ChatLocalToolDefinitionType, +} + /// Response returned after marking a chat thread as read. Confirms that the read marker was successfully recorded for the authenticated user. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct ChatMarkThreadReadResponse { @@ -2677,6 +2731,204 @@ pub struct DeviceAuthorizationStatusResponse { pub status: String, } +/// A domain event with stable attribution fields and an event-specific payload. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct DomainEvent { + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub agent: Option, + /// API field. + pub created_at: chrono::DateTime, + /// API field. + pub event_name: String, + /// API field. + pub id: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub idempotency_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub org: Option, + /// Opaque event-specific JSON. Use event_name to select the expected payload schema. + pub payload: std::collections::BTreeMap, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub sandbox: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub team: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub user: Option, +} + +/// Contract-defined values for EventSubscriptionStatus. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum EventSubscriptionStatus { + /// The active wire value. + #[serde(rename = "active")] + Active, + /// The paused wire value. + #[serde(rename = "paused")] + Paused, +} + +/// An app-scoped subscription to exact domain-event names. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct EventSubscription { + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub agent: Option, + /// API field. + pub available_count: i64, + /// API field. + pub created_at: chrono::DateTime, + /// API field. + pub dropped_events_total: i64, + /// API field. + pub dropped_through_position: i64, + /// API field. + pub event_names: Vec, + /// API field. + pub id: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub last_overflow_at: Option>, + /// API field. + pub leased_count: i64, + /// API field. + pub max_pending_events: i64, + /// API field. + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub org: Option, + /// API field. + pub queue_epoch: i64, + /// API field. + pub retention_seconds: i64, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub sandbox: Option, + /// API field. + pub status: EventSubscriptionStatus, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub team: Option, + /// API field. + pub updated_at: chrono::DateTime, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub user: Option, + /// API field. + pub visibility_timeout_seconds: i64, +} + +/// A domain event leased from a subscription queue. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct EventSubscriptionDelivery { + /// API field. + pub delivery_id: String, + /// API field. + pub event: DomainEvent, + /// API field. + pub lease_expires_at: chrono::DateTime, + /// API field. + pub receipt_handle: String, + /// API field. + pub receive_count: i64, + /// API field. + pub sequence: i64, +} + +/// Result of atomically claiming the head delivery. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct EventSubscriptionClaim { + /// API field. + pub data: Vec, + /// API field. + pub dropped_events_total: i64, + /// API field. + pub dropped_through_position: i64, + /// API field. + pub has_more: bool, + /// API field. + pub queue_epoch: i64, +} + +/// Contract-defined values for EventSubscriptionQueueEntryState. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum EventSubscriptionQueueEntryState { + /// The available wire value. + #[serde(rename = "available")] + Available, + /// The leased wire value. + #[serde(rename = "leased")] + Leased, +} + +/// A non-reserving view of one queued delivery. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct EventSubscriptionQueueEntry { + /// API field. + pub delivery_id: String, + /// API field. + pub event: DomainEvent, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub lease_expires_at: Option>, + /// API field. + pub receive_count: i64, + /// API field. + pub sequence: i64, + /// API field. + pub state: EventSubscriptionQueueEntryState, +} + +/// A non-reserving view of the queue head. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct EventSubscriptionHead { + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub data: Option, +} + +/// A page of domain-event subscriptions. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct EventSubscriptionPage { + /// API field. + pub data: Vec, + /// API field. + pub page: i64, + /// API field. + pub per_page: i64, + /// API field. + pub total_count: i64, + /// API field. + pub total_pages: i64, +} + +/// A cursor-paginated non-reserving view of a subscription queue. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct EventSubscriptionQueue { + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub after_cursor: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub before_cursor: Option, + /// API field. + pub data: Vec, + /// API field. + pub dropped_events_total: i64, + /// API field. + pub dropped_through_position: i64, + /// API field. + pub has_more: bool, + /// API field. + pub queue_epoch: i64, +} + /// A file stored in the platform's object storage, with metadata and a signed URL for downloading its contents. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct StorageFile { @@ -3299,6 +3551,28 @@ pub struct PrivateServicePage { pub total_pages: i64, } +/// One stamped customer whose product-knowledge tool update did not converge. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct ProductKnowledgeReconcileFailure { + /// Stable vendor-defined key for the customer whose agent did not converge. + pub customer_key: String, + /// Stable failure reason for operator and vendor feedback. + pub error: String, + /// Whether rerunning the desired-state reconciliation is safe. + pub retryable: bool, +} + +/// Desired-state reconciliation result for a CM install's stamped agents. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct ProductKnowledgeReconcileResponse { + /// True when every stamped customer agent now has the desired source allowlist. + pub complete: bool, + /// Per-customer failures. Empty when reconciliation is complete. + pub failures: Vec, + /// Customer keys whose agent tool config is converged. + pub reconciled_customers: Vec, +} + /// A named preset that defines the execution model and constraints for a routine. Presets are shared definitions; individual routines reference a preset by name. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct RoutinePreset { @@ -3393,7 +3667,7 @@ pub struct SandboxKey { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this key expires and becomes invalid. `null` if the key does not expire. - pub expires_at: Option>, + pub expires_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The complete secret key value, returned only once when the key is first created. `null` on subsequent retrievals. pub full_key: Option, @@ -3401,13 +3675,13 @@ pub struct SandboxKey { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// A short hint showing the last four characters of the key, used for identification. `null` if no hint is available. - pub key_hint: Option, + pub key_hint: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The full key value for `"publishable"` keys. `null` for `"secret"` keys; use `full_key` instead, which is returned only at creation time. - pub key_value: Option, + pub key_value: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this key was last used to authenticate a request. `null` if the key has never been used. - pub last_used_at: Option>, + pub last_used_at: Option>>, /// Current lifecycle status of the key. One of `"active"` (usable) or `"revoked"` (permanently disabled). pub status: String, #[serde(rename = "type")] @@ -3423,7 +3697,7 @@ pub struct Sandbox { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When an eval sandbox expires and becomes eligible for platform cleanup. `null` for ordinary developer sandboxes. - pub expires_at: Option>, + pub expires_at: Option>>, /// Sandbox ID (`dsb_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -3433,16 +3707,16 @@ pub struct Sandbox { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Organization ID this sandbox is scoped to, or `null` for an app-level sandbox. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Logo of the owning organization, when present. - pub org_logo: Option, + pub org_logo: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the owning organization, when org-scoped. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Sandbox purpose marker. `"eval"` marks a remote-eval sandbox; `null` for ordinary developer sandboxes. - pub purpose: Option, + pub purpose: Option>, /// URL-safe identifier for the sandbox, unique within the application (e.g. `"my-sandbox"`). pub slug: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -3576,6 +3850,9 @@ pub enum SlackDeliveryOutcomeOperation { /// The post wire value. #[serde(rename = "post")] Post, + /// The post_ephemeral wire value. + #[serde(rename = "post_ephemeral")] + PostEphemeral, /// The update wire value. #[serde(rename = "update")] Update, @@ -3623,7 +3900,7 @@ pub struct SlackDeliveryOutcome { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the platform message this attempt was carrying. Reading that message still requires access to its thread — this field correlates, it does not grant. pub message: Option, - /// Whether the attempt posted a new Slack message or updated an existing one (replacing a thinking placeholder). + /// Which Slack call the attempt made. `post` — a new message in the channel, visible to everyone in it. `post_ephemeral` — a message only one named channel member could see; Slack returns no durable timestamp for one, so it has no `thread_ts` to correlate and cannot be found in the channel's history afterwards. `update` — replacing an existing message (typically a thinking placeholder). pub operation: SlackDeliveryOutcomeOperation, /// What happened to the send. `delivered` — Slack accepted the message. `floored` — a deterministic content guard withheld it, so it never left. `judge_refused` — the cross-org judge decided it was not appropriate for this channel's audience. `failed` — Slack rejected the call, or the content floor could not be evaluated and the send failed closed. pub outcome: SlackDeliveryOutcomeOutcome, @@ -3811,18 +4088,18 @@ pub struct SolutionImportWarning { pub struct SolutionImportResult { #[serde(default, skip_serializing_if = "Option::is_none")] /// Machine-readable conflict code present when `status` is `"conflict"`, identifying the specific conflict reason. `null` when `status` is `"ready"`. - pub code: Option, + pub code: Option>, /// Whether this result was produced by a dry-run check. `true` when the import was validated without persisting any changes. pub dry_run: bool, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string of the Solution version already present in the library. `null` when no prior version exists. - pub existing_solution_version: Option, + pub existing_solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string of the Solution version in the bundle being imported. `null` when the bundle does not declare a version. - pub incoming_solution_version: Option, + pub incoming_solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable description of the import status or conflict reason, suitable for display in a confirmation dialog. `null` when no detail is available. - pub message: Option, + pub message: Option>, /// Outcome of the import check. `"ready"` means the import can proceed as a normal create or update. `"conflict"` means a version conflict was detected and the upgrade flow must be used instead. pub status: String, /// Whether the caller must invoke the dedicated upgrade flow to complete the import. Mirrors `status == "conflict"` as a convenience boolean. @@ -3837,7 +4114,7 @@ pub struct SolutionImportResult { pub struct SolutionImportResponse { #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config record was first created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, /// Solution config ID (`cfg_...`). pub id: String, /// Structured outcome of the import, including status, conflict details, and version information. @@ -3849,15 +4126,15 @@ pub struct SolutionImportResponse { pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// The `lookup_key` stored on the Solution config after the import's suffix normalization. `null` when the Solution was not given a lookup key. - pub lookup_key: Option, + pub lookup_key: Option>, /// Full summary of the imported Solution, in the same shape as the individual Solution retrieval endpoint. pub solution: SolutionSummary, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config record was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The `virtual_path` stored on the Solution config, used as the stable dedupe key across owner scopes. `null` when no virtual path was assigned. - pub virtual_path: Option, + pub virtual_path: Option>, } /// One-time connection details for a webhook-auth Automation install. @@ -3878,7 +4155,7 @@ pub struct SolutionInstallResponse { pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// The `lookup_key` stamped on the provisioned resource. `null` for `AgentSkill`, which is a join record and does not carry a lookup key. - pub lookup_key: Option, + pub lookup_key: Option>, /// Solution config ID (`cfg_...`) that was used as the source for this install. pub solution: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -3902,31 +4179,31 @@ pub enum SolutionInstanceStatus { pub struct SolutionInstance { #[serde(default, skip_serializing_if = "Option::is_none")] /// Materialized agent for this customer (`agi_...`). `null` for a row without an agent. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable display name of the materialized agent. `null` when no agent is visible. - pub agent_name: Option, + pub agent_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque tagged reference to the deployment target. Consumers interpret its kind. - pub attachment_ref: Option>, + pub attachment_ref: Option>>, /// When this instance was stamped. pub created_at: chrono::DateTime, /// Stable vendor-defined key for the customer. pub customer_key: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable customer label. `null` when the vendor did not provide one. - pub customer_label: Option, + pub customer_label: Option>, /// Solution instance ID (`sli_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Count of local agent edits relative to the pinned template. `null` when unavailable. - pub local_edit_count: Option, + pub local_edit_count: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Pinned template version record (`cfv_...`). `null` when no version is pinned. - pub pinned_template_version: Option, + pub pinned_template_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable version number of the pinned template. `null` when unavailable. - pub pinned_version_number: Option, + pub pinned_version_number: Option>, /// Installed solution template config that stamped this instance (`cfg_...`). pub solution_template_config: String, /// Lifecycle status of this stamped instance. @@ -4098,7 +4375,7 @@ pub struct StatusPing { pub token: std::collections::BTreeMap, #[serde(default, skip_serializing_if = "Option::is_none")] /// The authenticated user associated with the token. `null` when the token is invalid or absent. - pub user: Option, + pub user: Option>, } /// A long-lived API credential associated with a system account, used to authenticate server-to-server requests. @@ -4108,22 +4385,37 @@ pub struct SystemAccessToken { /// When this token was created (ISO 8601). pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Agent user that minted this token (`usr_...`). `null` unless an agent minted it. + pub created_by_agent_user: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Developer account that minted this token (`dva_...`). `null` unless minted with a developer token. + pub created_by_developer: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Org of the principal that minted this token (`org_...`). `null` on legacy rows. + pub created_by_org: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Team that minted this token (`tem_...`). `null` unless minted as a team. + pub created_by_team: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// User who minted this token (`usr_...`). Distinct from the token subject. `null` on legacy rows. + pub created_by_user: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] /// When the token expires. `null` on legacy rows that predate stored expiry. - pub expires_at: Option>, + pub expires_at: Option>>, /// Token ID (`sat_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this token was last used to authenticate a request. `null` if the token has never been used. - pub last_used_at: Option>, + pub last_used_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Human-readable label assigned to this token at creation time. - pub name: Option, + /// Human-readable label assigned to this token at creation time. `null` when no label was supplied. + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this token was revoked. `null` if the token is still active. - pub revoked_at: Option>, + pub revoked_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Space-separated OAuth scopes stamped on the token. `null` on legacy rows; treat as `full_access`. - pub scopes: Option, + pub scopes: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Raw bearer token string. Present only in the response to the create request; never returned again after that. pub token: Option, @@ -4145,13 +4437,13 @@ pub struct TaskSessionLeaseSummary { pub struct Task { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -4160,22 +4452,25 @@ pub struct Task { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. - pub current_lease: Option, + pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -4191,25 +4486,34 @@ pub struct Task { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -4220,16 +4524,16 @@ pub struct Task { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// A comment posted on a task by a user or an agent, including resolved author information. @@ -4297,7 +4601,7 @@ pub struct TeamInvite { pub struct TeamMembership { #[serde(default, skip_serializing_if = "Option::is_none")] /// The agent associated with this membership, as an expanded agent object. `null` when the member is a user, the type is unknown, or the association is not preloaded. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this membership record was created (ISO 8601). pub created_at: Option>, @@ -4311,16 +4615,16 @@ pub struct TeamMembership { pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the member, derived from the associated user or agent. `null` if the principal is unknown. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture of the member, derived from the associated user or agent. `null` if not set or principal is unknown. - pub profile_picture: Option, + pub profile_picture: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The member's role within the team. One of `"owner"`, `"admin"`, or `"member"`. pub role: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The team this membership belongs to, as an expanded team object. `null` when the team association is not preloaded. - pub team: Option>, + pub team: Option>>, #[serde(rename = "type")] #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved principal type. One of `"user"`, `"agent"`, or `"unknown"` when the principal cannot be determined. @@ -4330,7 +4634,7 @@ pub struct TeamMembership { pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The user associated with this membership, as an expanded user object. `null` when the member is an agent, the type is unknown, or the association is not preloaded. - pub user: Option, + pub user: Option>, } /// A paginated list of team memberships returned by the list team memberships endpoint. @@ -4462,27 +4766,27 @@ pub struct ThreadReadStatus { pub struct Trajectory { #[serde(default, skip_serializing_if = "Option::is_none")] /// When the trajectory was recorded (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the storage file that persists the raw trajectory data (`fil_...`). `null` if the trajectory has not been written to a file. + /// ID of the storage file that persists the raw trajectory data (`fil_...`). pub file: Option, /// Trajectory ID (`trj_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Serialized message log for this trajectory. Contains the ordered sequence of AI and tool messages produced during the session. - pub messages: Option>, + pub messages: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this trajectory belongs to (`org_...`). `null` for trajectories outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this trajectory is scoped to (`sbx_...`). `null` for production trajectories. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team this trajectory is scoped to (`team_...`). `null` for trajectories not associated with a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the trajectory record was last updated (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, } /// A shareable invite created by a user, optionally scoped to a thread. Recipients can use the invite key to join or start a conversation. diff --git a/src/generated/v1.rs b/src/generated/v1.rs index 3135adc..916d84f 100644 --- a/src/generated/v1.rs +++ b/src/generated/v1.rs @@ -1,6 +1,6 @@ // Copyright (c) 2026 ArchAstro Inc. Licensed under the MIT License. // This file is auto-generated by @archastro/sdk-generator. Do not edit. -// Content hash: e3260c953376 +// Content hash: b77051be69bd use crate::generated::types::*; use crate::sse::{SseDecode, SseStream}; @@ -1538,8 +1538,16 @@ pub struct PostApiV1AgentsAgentThreadsInputThreadProfilePicture { #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct PostApiV1AgentsAgentThreadsInputThreadSettings { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. - pub agent_enabled: Option, + /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting. + pub agent_enabled: Option>, +} + +/// Contract-defined values for PostApiV1AgentsAgentThreadsInputThreadKind. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum PostApiV1AgentsAgentThreadsInputThreadKind { + /// The personal wire value. + #[serde(rename = "personal")] + Personal, } /// Contract-defined values for PostApiV1AgentsAgentThreadsInputThreadVisibility. @@ -1572,6 +1580,9 @@ pub struct PostApiV1AgentsAgentThreadsInputThread { /// Client-assigned unique key for idempotent creation or later lookup. Must be unique within the owning organization. pub key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Optional behavioral subtype. `personal` is accepted only for a user-owned thread and limits membership to that user and agents currently owned by them. Mirror kinds remain server-derived and cannot be selected by callers. + pub kind: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Users and agents to add atomically when the thread is created. Each target must pass the same authorization rules as a post-creation member add. Slack mirror threads reject non-empty caller-supplied rosters because their membership is sync-owned. pub members: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -3205,6 +3216,124 @@ pub struct PutApiV1CustomObjectsObjectResponse { pub meta: Option>, } +/// Acknowledges a delivery using its current receipt handle. Repeating the same acknowledgement is idempotent; a stale or incorrect receipt returns 409. Acknowledging a delivery that aged out under the subscription's retention returns `delivery_not_found` — the event was already counted in `dropped_events_total`, and the acknowledgement should not be retried. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct PostApiV1EventSubscriptionDeliveriesDeliveryAcknowledgeInput { + /// Opaque handle returned by claim. + pub receipt_handle: String, +} + +/// Query parameters for get_api_v1_event_subscriptions. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct GetApiV1EventSubscriptionsParams { + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Page number, starting at 1. + pub page: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Subscriptions per page, from 1 through 100. + pub per_page: Option, +} + +/// Contract-defined values for PostApiV1EventSubscriptionsInputStatus. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum PostApiV1EventSubscriptionsInputStatus { + /// The active wire value. + #[serde(rename = "active")] + Active, + /// The paused wire value. + #[serde(rename = "paused")] + Paused, +} + +/// Creates a durable subscription that receives exportable domain events matching its exact event names. Matching events fan out into a per-subscription queue bounded by max_pending_events and retention_seconds; consume with claim and acknowledge. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct PostApiV1EventSubscriptionsInput { + /// Exact event names to receive. + pub event_names: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Queue cap. Defaults to 100; maximum 1000. + pub max_pending_events: Option, + /// Customer-defined subscription name. + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Delivery retention in seconds. Defaults to 86400 (24 hours); between 7200 and 2592000. Applies to future deliveries only. + pub retention_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Initial status. Defaults to active. + pub status: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Default claim lease in seconds. Defaults to 300. + pub visibility_timeout_seconds: Option, +} + +/// Contract-defined values for PatchApiV1EventSubscriptionsSubscriptionInputStatus. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum PatchApiV1EventSubscriptionsSubscriptionInputStatus { + /// The active wire value. + #[serde(rename = "active")] + Active, + /// The paused wire value. + #[serde(rename = "paused")] + Paused, +} + +/// Updates matching, status, or queue limits for future fanout. Already queued deliveries remain unless a lower cap trims the oldest entries; retention changes apply to future deliveries only. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct PatchApiV1EventSubscriptionsSubscriptionInput { + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub event_names: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub max_pending_events: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Delivery retention in seconds. Defaults to 86400 (24 hours); between 7200 and 2592000. Applies to future deliveries only. + pub retention_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub status: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// API field. + pub visibility_timeout_seconds: Option, +} + +/// Atomically leases the oldest unacknowledged delivery. Returns an empty data array when the queue is empty or its head already has an active lease. Passing max_events opts into batch mode, where leased entries are skipped instead of blocking; wait_seconds bounds a long poll on an empty queue. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct PostApiV1EventSubscriptionsSubscriptionClaimInput { + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Consumer identity between 1 and 128 bytes, recorded on the lease for attribution. + pub consumer_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Opts into batch mode: leases up to this many lease-available deliveries (between 1 and 20) in sequence order, skipping leased entries instead of blocking on the head. Omit to keep strict head-of-line semantics. + pub max_events: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Idempotency key between 1 and 128 bytes. Use a value unique per claim attempt (e.g. a UUID) — the key is scoped to the subscription, so a reused value takes over whatever leases it last stamped. Retrying a claim with the same request_id while its leases are unexpired returns the same deliveries (regardless of max_events) with fresh receipt handles and refreshed leases. + pub request_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Lease duration override between 15 and 3600 seconds. + pub visibility_timeout_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Long-poll bound between 0 and 20 seconds. When the queue is empty, the request waits up to this long for a delivery before returning an empty data array. 0 (or omitting) returns immediately. + pub wait_seconds: Option, +} + +/// Query parameters for get_api_v1_event_subscriptions__subscription_queue. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct GetApiV1EventSubscriptionsSubscriptionQueueParams { + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Maximum entries to return, from 1 through 100. + pub limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Opaque cursor for the preceding page. + pub before_cursor: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Opaque cursor for the following page. + pub after_cursor: Option, +} + /// Contract-defined values for PostApiV1ExtractionsInputDestinationKind. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum PostApiV1ExtractionsInputDestinationKind { @@ -5020,6 +5149,9 @@ pub struct PutApiV1TasksTaskInput { /// Updated due date in ISO 8601 format, or null to clear it. pub due_date: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Replacement grouping label. Pass null to clear it. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Current caller-held lease UUID. Must be paired with `lease_session_id`. pub lease_id: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -5050,6 +5182,15 @@ pub struct PutApiV1TasksTaskInput { /// Updated priority from 0 (highest) to 4 (lowest). pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Replacement source object identity. Must be supplied with the other source fields. + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Replacement source container. Pass together with `source_type` and `source_id`, or pass all three as null to clear the source. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Replacement source object kind. Must be supplied with the other source fields. + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Updated status: `open`, `in_progress`, or `done`. pub status: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -5143,25 +5284,25 @@ pub struct GetApiV1TasksTaskBlockingParams { pub struct GetApiV1TasksTaskBlockingResponseDataItemCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5169,17 +5310,17 @@ pub struct GetApiV1TasksTaskBlockingResponseDataItemCreatedByActorProfilePicture pub struct GetApiV1TasksTaskBlockingResponseDataItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5198,25 +5339,25 @@ pub struct GetApiV1TasksTaskBlockingResponseDataItemCurrentLease { pub struct GetApiV1TasksTaskBlockingResponseDataItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5224,16 +5365,17 @@ pub struct GetApiV1TasksTaskBlockingResponseDataItemOwnerActorProfilePicture { pub struct GetApiV1TasksTaskBlockingResponseDataItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5241,13 +5383,13 @@ pub struct GetApiV1TasksTaskBlockingResponseDataItemOwnerActor { pub struct GetApiV1TasksTaskBlockingResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -5256,22 +5398,25 @@ pub struct GetApiV1TasksTaskBlockingResponseDataItem { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -5287,25 +5432,34 @@ pub struct GetApiV1TasksTaskBlockingResponseDataItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -5316,16 +5470,16 @@ pub struct GetApiV1TasksTaskBlockingResponseDataItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Successful response @@ -5371,25 +5525,25 @@ pub struct GetApiV1TasksTaskSubtasksParams { pub struct GetApiV1TasksTaskSubtasksResponseDataItemCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5397,17 +5551,17 @@ pub struct GetApiV1TasksTaskSubtasksResponseDataItemCreatedByActorProfilePicture pub struct GetApiV1TasksTaskSubtasksResponseDataItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5426,25 +5580,25 @@ pub struct GetApiV1TasksTaskSubtasksResponseDataItemCurrentLease { pub struct GetApiV1TasksTaskSubtasksResponseDataItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5452,16 +5606,17 @@ pub struct GetApiV1TasksTaskSubtasksResponseDataItemOwnerActorProfilePicture { pub struct GetApiV1TasksTaskSubtasksResponseDataItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5469,13 +5624,13 @@ pub struct GetApiV1TasksTaskSubtasksResponseDataItemOwnerActor { pub struct GetApiV1TasksTaskSubtasksResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -5484,22 +5639,25 @@ pub struct GetApiV1TasksTaskSubtasksResponseDataItem { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -5515,25 +5673,34 @@ pub struct GetApiV1TasksTaskSubtasksResponseDataItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -5544,16 +5711,16 @@ pub struct GetApiV1TasksTaskSubtasksResponseDataItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Successful response @@ -5599,25 +5766,25 @@ pub struct GetApiV1TasksTaskBlockersParams { pub struct GetApiV1TasksTaskBlockersResponseDataItemCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5625,17 +5792,17 @@ pub struct GetApiV1TasksTaskBlockersResponseDataItemCreatedByActorProfilePicture pub struct GetApiV1TasksTaskBlockersResponseDataItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5654,25 +5821,25 @@ pub struct GetApiV1TasksTaskBlockersResponseDataItemCurrentLease { pub struct GetApiV1TasksTaskBlockersResponseDataItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5680,16 +5847,17 @@ pub struct GetApiV1TasksTaskBlockersResponseDataItemOwnerActorProfilePicture { pub struct GetApiV1TasksTaskBlockersResponseDataItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5697,13 +5865,13 @@ pub struct GetApiV1TasksTaskBlockersResponseDataItemOwnerActor { pub struct GetApiV1TasksTaskBlockersResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -5712,22 +5880,25 @@ pub struct GetApiV1TasksTaskBlockersResponseDataItem { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -5743,25 +5914,34 @@ pub struct GetApiV1TasksTaskBlockersResponseDataItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -5772,16 +5952,16 @@ pub struct GetApiV1TasksTaskBlockersResponseDataItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Successful response @@ -5852,25 +6032,25 @@ pub struct GetApiV1TasksTaskCommentsParams { pub struct GetApiV1TasksTaskCommentsResponseDataItemAuthorActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -5878,16 +6058,17 @@ pub struct GetApiV1TasksTaskCommentsResponseDataItemAuthorActorProfilePicture { pub struct GetApiV1TasksTaskCommentsResponseDataItemAuthorActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -6112,24 +6293,24 @@ pub struct GetApiV1TeamsResponseDataItemAcl { pub struct GetApiV1TeamsResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list governing visibility and join permissions for this team. `null` when no ACL restrictions are applied and the team inherits default access rules. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer application this team belongs to (`dap_...`). `null` if the team is not scoped to an app. pub app: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Aggregated badge counts for the team, keyed by category. `null` when badge data is not loaded. - pub badges: Option>, + pub badges: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this team was created (ISO 8601). pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable description of the team's purpose. `null` if not set. - pub description: Option, + pub description: Option>, /// Team ID (`tem_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// The authenticated viewer's role on this team. One of `"owner"`, `"admin"`, or `"member"`. `null` if the viewer is not a member. - pub membership_status: Option, + pub membership_status: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to this team. Returns an empty object when no metadata has been set. pub metadata: Option>, @@ -6138,13 +6319,13 @@ pub struct GetApiV1TeamsResponseDataItem { pub name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this team belongs to (`org_...`). `null` if the team is not org-scoped. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this team is scoped to (`dsb_...`). `null` outside sandbox contexts. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL-safe slug for the team, derived from the team name. `null` if not set. - pub slug: Option, + pub slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this team was last updated (ISO 8601). pub updated_at: Option>, @@ -6369,25 +6550,25 @@ pub struct PatchApiV1TeamsTeamInput { pub struct GetApiV1TeamsTeamArtifactsResponseDataItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -6500,25 +6681,25 @@ pub struct GetApiV1TeamsTeamTaskAssigneesParams { pub struct GetApiV1TeamsTeamTaskAssigneesResponseDataItemActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -6526,16 +6707,17 @@ pub struct GetApiV1TeamsTeamTaskAssigneesResponseDataItemActorProfilePicture { pub struct GetApiV1TeamsTeamTaskAssigneesResponseDataItemActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Contract-defined values for GetApiV1TeamsTeamTaskAssigneesResponseDataItemType. @@ -6761,25 +6943,25 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentAcl { pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSolutionOrgLogo { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -6788,7 +6970,7 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSol { #[serde(default, skip_serializing_if = "Option::is_none")] /// Workflow-authored explanation of the slot's role. `null` when the workflow declares none. - pub description: Option, + pub description: Option>, /// The slot's name, as referenced by the workflow. Supply the chosen agent under the top-level `participants[name]` field when invoking. pub name: String, /// Whether the workflow requires this slot to be filled for the run to complete its embedded stages. @@ -6815,10 +6997,10 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSol pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSolutionTemplatesItemDetailsInvokeContract { #[serde(default, skip_serializing_if = "Option::is_none")] /// JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured. - pub input_schema: Option>, + pub input_schema: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Named participant slots declared by the workflow, sorted by name. `null` when the workflow declares none. Values supplied under the top-level `participants` field are agent IDs. - pub participants: Option>, + pub participants: Option>>, /// Owner-controlled payload and participant values the platform applies to every invocation. Supplying a conflicting value is rejected. pub prefills: GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSolutionTemplatesItemDetailsInvokeContractPrefills, } @@ -6836,11 +7018,11 @@ pub enum GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSolut #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSolutionTemplatesItemDetails { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Automation execution type (`invoked`, `scheduled`, or `trigger`). - pub automation_type: Option, + /// Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one. + pub automation_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. - pub invoke_contract: Option, + /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types. + pub invoke_contract: Option>, #[serde(rename = "type")] /// Template-details discriminator. Always `automation` for this variant. pub type_: GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSolutionTemplatesItemDetailsType, @@ -6851,30 +7033,30 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSol pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSolutionTemplatesItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details. - pub details: Option, + pub details: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`. - pub display_name: Option, + pub display_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template config ID (`cfg_...`). `null` for inline-only templates. - pub id: Option, + pub id: Option>, /// Template config kind, or `SolutionTemplateRef` / `SolutionTemplatePath` when unresolved. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Lookup key stamped on the template config at import time. `null` when no lookup key was assigned. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable virtual path assigned to the template config. `null` when no virtual path was set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -6885,10 +7067,10 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSol pub category_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was first imported (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Custom analytics events declared in the Solution body's `events:` manifest — a map of event key (snake_case) to its definition (`label`, optional `description`, optional typed `fields`). Dashboards use the `label` as the event's display name. Present as an empty object when the body declares none. pub events: Option>, @@ -6896,69 +7078,70 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSol pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only. - pub image_url: Option, + pub image_url: Option>, /// Resource type. Always `"Solution"`. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise. - pub latest_solution: Option, + pub latest_solution: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise. - pub latest_version: Option, + pub latest_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata declared in the Solution body (e.g. category or display hints). Present as an empty object when the body declares none. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing display name declared in the Solution body. `null` when the Solution body does not set one. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo. - pub org_logo: + pub org_logo: Option< Option, + >, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve. - pub org_slug: Option, + pub org_slug: Option>, /// Owner scopes this Solution appears under. Members: `"system"` (app-level system scope) and/or `"org"` (viewer's org scope). pub owners: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URLs of the Solution's gallery screenshots — the bundled assets the body's `screenshots:` field names, in declared order. Each is a stable, non-expiring capability URL with the same cacheability contract as `image_url` (one shared token, a `v` cache key, and a `file` param selecting the screenshot); a URL 404s if the Solution stops declaring its screenshot. An empty array when the Solution declares none, and always empty for org-scoped rows — the permanent URLs are minted for system-scope (catalog) Solutions only. pub screenshot_urls: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it. - pub solution_id: Option, + pub solution_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string declared in the Solution body (e.g. `"1.2.0"`). `null` when the body does not declare a version. - pub solution_version: Option, + pub solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Freeform tag keys declared in the Solution body. An empty array when the body declares none. pub tag_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Wrapped template kind — `"AgentTemplate"`, `"AutomationTemplate"`, `"AgentRoutineTemplate"`, `"AgentToolTemplate"`, `"AgentComputerTemplate"`, or `"SolutionTemplateRef"` for ref-mode bundles. - pub template_kind: Option, + pub template_kind: Option>, /// Template configs bundled by this Solution, in declaration order — the first entry is the deployable template the Solution wraps; the rest are sibling templates the wrapped template references. pub templates: Vec< GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSolutionTemplatesItem, >, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, /// `true` when this Solution is installed at the viewer's org scope and the app-level system scope carries a higher `solution_version`. Always `false` for system-only rows. pub upgrade_available: bool, #[serde(default, skip_serializing_if = "Option::is_none")] /// The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -6966,25 +7149,25 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionCurrentSol pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionOrgLogo { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -6993,7 +7176,7 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTe { #[serde(default, skip_serializing_if = "Option::is_none")] /// Workflow-authored explanation of the slot's role. `null` when the workflow declares none. - pub description: Option, + pub description: Option>, /// The slot's name, as referenced by the workflow. Supply the chosen agent under the top-level `participants[name]` field when invoking. pub name: String, /// Whether the workflow requires this slot to be filled for the run to complete its embedded stages. @@ -7020,10 +7203,10 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTe pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTemplatesItemDetailsInvokeContract { #[serde(default, skip_serializing_if = "Option::is_none")] /// JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured. - pub input_schema: Option>, + pub input_schema: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Named participant slots declared by the workflow, sorted by name. `null` when the workflow declares none. Values supplied under the top-level `participants` field are agent IDs. - pub participants: Option>, + pub participants: Option>>, /// Owner-controlled payload and participant values the platform applies to every invocation. Supplying a conflicting value is rejected. pub prefills: GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTemplatesItemDetailsInvokeContractPrefills, } @@ -7041,11 +7224,11 @@ pub enum GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTemp #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTemplatesItemDetails { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Automation execution type (`invoked`, `scheduled`, or `trigger`). - pub automation_type: Option, + /// Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one. + pub automation_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. - pub invoke_contract: Option, + /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types. + pub invoke_contract: Option>, #[serde(rename = "type")] /// Template-details discriminator. Always `automation` for this variant. pub type_: GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTemplatesItemDetailsType, @@ -7056,32 +7239,34 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTe pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTemplatesItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details. pub details: Option< - GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTemplatesItemDetails, + Option< + GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolutionTemplatesItemDetails, + >, >, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`. - pub display_name: Option, + pub display_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template config ID (`cfg_...`). `null` for inline-only templates. - pub id: Option, + pub id: Option>, /// Template config kind, or `SolutionTemplateRef` / `SolutionTemplatePath` when unresolved. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Lookup key stamped on the template config at import time. `null` when no lookup key was assigned. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable virtual path assigned to the template config. `null` when no virtual path was set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7092,10 +7277,10 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolution { pub category_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was first imported (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Custom analytics events declared in the Solution body's `events:` manifest — a map of event key (snake_case) to its definition (`label`, optional `description`, optional typed `fields`). Dashboards use the `label` as the event's display name. Present as an empty object when the body declares none. pub events: Option>, @@ -7103,68 +7288,68 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionSolution { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only. - pub image_url: Option, + pub image_url: Option>, /// Resource type. Always `"Solution"`. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise. - pub latest_solution: Option, + pub latest_solution: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise. - pub latest_version: Option, + pub latest_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata declared in the Solution body (e.g. category or display hints). Present as an empty object when the body declares none. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing display name declared in the Solution body. `null` when the Solution body does not set one. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo. pub org_logo: - Option, + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve. - pub org_slug: Option, + pub org_slug: Option>, /// Owner scopes this Solution appears under. Members: `"system"` (app-level system scope) and/or `"org"` (viewer's org scope). pub owners: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URLs of the Solution's gallery screenshots — the bundled assets the body's `screenshots:` field names, in declared order. Each is a stable, non-expiring capability URL with the same cacheability contract as `image_url` (one shared token, a `v` cache key, and a `file` param selecting the screenshot); a URL 404s if the Solution stops declaring its screenshot. An empty array when the Solution declares none, and always empty for org-scoped rows — the permanent URLs are minted for system-scope (catalog) Solutions only. pub screenshot_urls: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it. - pub solution_id: Option, + pub solution_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string declared in the Solution body (e.g. `"1.2.0"`). `null` when the body does not declare a version. - pub solution_version: Option, + pub solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Freeform tag keys declared in the Solution body. An empty array when the body declares none. pub tag_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Wrapped template kind — `"AgentTemplate"`, `"AutomationTemplate"`, `"AgentRoutineTemplate"`, `"AgentToolTemplate"`, `"AgentComputerTemplate"`, or `"SolutionTemplateRef"` for ref-mode bundles. - pub template_kind: Option, + pub template_kind: Option>, /// Template configs bundled by this Solution, in declaration order — the first entry is the deployable template the Solution wraps; the rest are sibling templates the wrapped template references. pub templates: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, /// `true` when this Solution is installed at the viewer's org scope and the app-level system scope carries a higher `solution_version`. Always `false` for system-only rows. pub upgrade_available: bool, #[serde(default, skip_serializing_if = "Option::is_none")] /// The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7175,26 +7360,26 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolutionTemplate { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Description of the template from the config body. `null` if the current version has no `description` field. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable display name from the config body. `null` if the current version has no `display_name` field. - pub display_name: Option, + pub display_name: Option>, /// Template config ID (`cfg_...`). pub id: String, /// Config kind identifier for this template (e.g. `"agent_tool_template"`). pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable lookup key assigned to this template config. `null` if no lookup key is set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template name as stored in the config body. `null` if the current version has no `name` field. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this template config was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Virtual filesystem path for this template config. `null` if not set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7215,33 +7400,33 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgentSourceSolution { pub struct GetApiV1TeamsTeamMembersResponseDataItemAgent { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for the agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied and the agent is accessible to all members of its scope. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the application that owns this agent (`dap_...`). pub app: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `"claude-3-7-sonnet-latest"`). - pub default_model: Option, + pub default_model: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable description of what the agent does. `null` if not set. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address provisioned for this agent. `null` if email delivery is not configured. - pub email: Option, + pub email: Option>, /// Agent ID (`agi_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// System-level identity prompt that shapes the agent's persona and behavior. - pub identity: Option, + pub identity: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents. - pub last_applied_template_config: Option, + pub last_applied_template_config: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable, user-defined identifier for this agent within the application. Unique per app. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the agent. Not interpreted by the platform. pub metadata: Option>, @@ -7250,34 +7435,35 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgent { pub name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name). - pub originator: Option, + pub originator: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Phone number provisioned for this agent. `null` if SMS is not configured. - pub phone_number: Option, + pub phone_number: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Source Solution and AgentTemplate summary for agents provisioned from a Solution. Includes `upgrade_available`, `latest_version`, and `latest_solution` so you can render an upgrade badge without a separate dry-run call. `null` for hand-built agents and agents whose tracked template or parent Solution has been deleted. Populated only on single-agent GET responses, never on list endpoints. - pub source_solution: Option, + pub source_solution: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`). - pub template_upgrade_available: Option, + pub template_upgrade_available: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped. - pub user: Option, + pub user: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7285,25 +7471,25 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemAgent { pub struct GetApiV1TeamsTeamMembersResponseDataItemProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7311,16 +7497,31 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemProfilePicture { pub struct GetApiV1TeamsTeamMembersResponseDataItemUser { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the user. `null` if not set. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app. - pub app: Option, + pub app: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's app. `null` when the app association was not preloaded by the caller. - pub app_name: Option, + pub app_name: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Agent user that created this account (`usr_...`). `null` unless an agent created it. + pub created_by_agent_user: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Developer account that created this user (`dva_...`). `null` unless created via a developer token. + pub created_by_developer: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Org of the principal that created this user (`org_...`). `null` on legacy rows. + pub created_by_org: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Team that created this user (`tem_...`). `null` unless created as a team. + pub created_by_team: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// User who created this account (`usr_...`). `null` on self-signup or legacy rows. + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address of the user. - pub email: Option, + pub email: Option>, /// User ID (`usr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -7331,25 +7532,25 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemUser { pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Full display name of the user. `null` if the user has not set a name. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Role of the user within their organization. One of `"admin"`, `"member"`, or `"viewer"`. `null` when the user is not a member of any organization. - pub org_role: Option, + pub org_role: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller. - pub org_slug: Option, + pub org_slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller. - pub sandbox_name: Option, + pub sandbox_name: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7357,7 +7558,7 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItemUser { pub struct GetApiV1TeamsTeamMembersResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// The agent associated with this membership, as an expanded agent object. `null` when the member is a user, the type is unknown, or the association is not preloaded. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this membership record was created (ISO 8601). pub created_at: Option>, @@ -7371,16 +7572,16 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItem { pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the member, derived from the associated user or agent. `null` if the principal is unknown. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture of the member, derived from the associated user or agent. `null` if not set or principal is unknown. - pub profile_picture: Option, + pub profile_picture: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The member's role within the team. One of `"owner"`, `"admin"`, or `"member"`. pub role: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The team this membership belongs to, as an expanded team object. `null` when the team association is not preloaded. - pub team: Option>, + pub team: Option>>, #[serde(rename = "type")] #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved principal type. One of `"user"`, `"agent"`, or `"unknown"` when the principal cannot be determined. @@ -7390,7 +7591,7 @@ pub struct GetApiV1TeamsTeamMembersResponseDataItem { pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The user associated with this membership, as an expanded user object. `null` when the member is an agent, the type is unknown, or the association is not preloaded. - pub user: Option, + pub user: Option>, } /// Successful response @@ -7404,7 +7605,10 @@ pub struct GetApiV1TeamsTeamMembersResponse { /// membership with HTTP 201. Provide exactly one of `user` or `agent` — supplying /// both or neither returns a 400 error. /// -/// The caller must have permission to manage the team. When an `app` is provided, +/// Adding a user requires permission to manage the team (team owner, team +/// admin, or org admin). Adding an agent with the default `"member"` role is +/// also open to any existing member of the team; assigning an elevated role to +/// an agent still requires team-manage permission. When an `app` is provided, /// the request is scoped to that app and the caller must hold a valid app-scoped /// token. The default role is `"member"` when `role` is omitted. /// @@ -7467,6 +7671,18 @@ pub struct GetApiV1TeamsTeamTasksParams { /// Return only subtasks of the given task (`tsk_...`), or pass `none` to return only top-level tasks. pub parent: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this container. Must be supplied with `source_type` and `source_id`. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this object kind. Must be supplied with the other source filters. + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this object identity. Must be supplied with the other source filters. + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks with this exact epic label. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Restrict results to tasks whose name or description contains this string. pub search: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -7500,25 +7716,25 @@ pub struct GetApiV1TeamsTeamTasksParams { pub struct GetApiV1TeamsTeamTasksResponseDataItemCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7526,16 +7742,17 @@ pub struct GetApiV1TeamsTeamTasksResponseDataItemCreatedByActorProfilePicture { pub struct GetApiV1TeamsTeamTasksResponseDataItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7554,25 +7771,25 @@ pub struct GetApiV1TeamsTeamTasksResponseDataItemCurrentLease { pub struct GetApiV1TeamsTeamTasksResponseDataItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7580,16 +7797,17 @@ pub struct GetApiV1TeamsTeamTasksResponseDataItemOwnerActorProfilePicture { pub struct GetApiV1TeamsTeamTasksResponseDataItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7597,13 +7815,13 @@ pub struct GetApiV1TeamsTeamTasksResponseDataItemOwnerActor { pub struct GetApiV1TeamsTeamTasksResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -7612,22 +7830,25 @@ pub struct GetApiV1TeamsTeamTasksResponseDataItem { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -7643,25 +7864,34 @@ pub struct GetApiV1TeamsTeamTasksResponseDataItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -7672,16 +7902,16 @@ pub struct GetApiV1TeamsTeamTasksResponseDataItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Successful response @@ -7689,10 +7919,10 @@ pub struct GetApiV1TeamsTeamTasksResponseDataItem { pub struct GetApiV1TeamsTeamTasksResponse { #[serde(default, skip_serializing_if = "Option::is_none")] /// API field. - pub after_cursor: Option, + pub after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// API field. - pub before_cursor: Option, + pub before_cursor: Option>, /// Array of task objects matching the requested filters. pub data: Vec, /// API field. @@ -7709,6 +7939,9 @@ pub struct PostApiV1TeamsTeamTasksInputTask { /// Date and time by which the task should be completed (ISO 8601). Omit to create the task without a due date. pub due_date: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Optional free-form grouping label. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value map of named URLs or references associated with the task (e.g. external ticket links). pub links: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -7729,6 +7962,15 @@ pub struct PostApiV1TeamsTeamTasksInputTask { /// Priority level from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when omitted. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Container of the work this task is about (for example `github.com`). Must be supplied with `source_type` and `source_id`. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Initial status for the task. One of `"open"`, `"in_progress"`, or `"done"`. Defaults to `"open"` when omitted. pub status: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -7785,25 +8027,25 @@ pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemCreatedBy { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7811,18 +8053,16 @@ pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemCreatedBy pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option< - GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemCreatedByActorProfilePicture, - >, + pub profile_picture: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7841,25 +8081,25 @@ pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemCurrentLe pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -7867,17 +8107,19 @@ pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemOwnerActo pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: Option< - GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemOwnerActorProfilePicture, + Option< + GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemOwnerActorProfilePicture, + >, >, } @@ -7886,13 +8128,13 @@ pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItemOwnerActo pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -7902,23 +8144,26 @@ pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). pub created_by_actor: - Option, + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -7934,25 +8179,35 @@ pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -7963,16 +8218,16 @@ pub struct GetApiV1TeamsTeamTasksBlockerCyclesResponseDataItemTasksItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8040,6 +8295,18 @@ pub struct GetApiV1TeamsTeamTasksReadyParams { /// Only include tasks assigned to the authenticated user. pub assigned_to_me: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Only include tasks whose source matches this container. Must be supplied with `source_type` and `source_id`. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Only include tasks whose source matches this object kind. + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Only include tasks whose source matches this object identity. + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Only include tasks with this exact epic label. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Maximum number of readiness entries to return. Capped at 100. pub limit: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -8052,25 +8319,25 @@ pub struct GetApiV1TeamsTeamTasksReadyParams { pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTaskCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8078,17 +8345,17 @@ pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTaskCreatedByActorProfileP pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTaskCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8107,25 +8374,25 @@ pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTaskCurrentLease { pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTaskOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8133,17 +8400,17 @@ pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTaskOwnerActorProfilePictu pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTaskOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8151,13 +8418,13 @@ pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTaskOwnerActor { pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTask { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -8166,22 +8433,26 @@ pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTask { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -8197,25 +8468,34 @@ pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTask { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -8226,16 +8506,16 @@ pub struct GetApiV1TeamsTeamTasksReadyResponseDataItemTask { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Contract-defined values for GetApiV1TeamsTeamTasksReadyResponseDataItemReadiness. @@ -8270,7 +8550,7 @@ pub struct GetApiV1TeamsTeamTasksReadyResponseDataItem { pub readiness: GetApiV1TeamsTeamTasksReadyResponseDataItemReadiness, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable exclusion reason: `open_blockers` or `active_lease`; omitted when ready. - pub reason: Option, + pub reason: Option>, /// The task evaluated for readiness. pub task: GetApiV1TeamsTeamTasksReadyResponseDataItemTask, } @@ -8326,6 +8606,18 @@ pub struct GetApiV1TeamsTeamTasksSearchParams { /// Return only subtasks of the given task (`tsk_...`), or pass `none` to return only top-level tasks. pub parent: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this container. Must be supplied with `source_type` and `source_id`. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this object kind. + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this object identity. + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks with this exact epic label. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Maximum number of tasks to return. Capped at 100. pub limit: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -8338,25 +8630,25 @@ pub struct GetApiV1TeamsTeamTasksSearchParams { pub struct GetApiV1TeamsTeamTasksSearchResponseDataItemCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8364,17 +8656,17 @@ pub struct GetApiV1TeamsTeamTasksSearchResponseDataItemCreatedByActorProfilePict pub struct GetApiV1TeamsTeamTasksSearchResponseDataItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8393,25 +8685,25 @@ pub struct GetApiV1TeamsTeamTasksSearchResponseDataItemCurrentLease { pub struct GetApiV1TeamsTeamTasksSearchResponseDataItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8419,17 +8711,17 @@ pub struct GetApiV1TeamsTeamTasksSearchResponseDataItemOwnerActorProfilePicture pub struct GetApiV1TeamsTeamTasksSearchResponseDataItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8437,13 +8729,13 @@ pub struct GetApiV1TeamsTeamTasksSearchResponseDataItemOwnerActor { pub struct GetApiV1TeamsTeamTasksSearchResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -8452,22 +8744,26 @@ pub struct GetApiV1TeamsTeamTasksSearchResponseDataItem { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -8483,25 +8779,34 @@ pub struct GetApiV1TeamsTeamTasksSearchResponseDataItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -8512,16 +8817,16 @@ pub struct GetApiV1TeamsTeamTasksSearchResponseDataItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Successful response @@ -8602,25 +8907,25 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAcl { pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageActorsItemProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8628,17 +8933,18 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageActorsItemProfil pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageActorsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: + pub profile_picture: Option< Option, + >, } /// Generated from the ArchAstro OpenAPI contract. @@ -8646,25 +8952,25 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageActorsItem { pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAttachmentsItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8673,25 +8979,25 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAttachmentsItemV { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8699,7 +9005,7 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAttachmentsItemV pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAttachmentsItemVariantsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of this variant's file (e.g., `"image/jpeg"`, `"video/mp4"`). `null` if the file is not loaded. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was created (ISO 8601). pub created_at: Option>, @@ -8708,29 +9014,27 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAttachmentsItemV pub file: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the uploaded file for this variant. `null` if the file is not loaded. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of this variant in pixels. `null` if not recorded. - pub height: Option, + pub height: Option>, /// Media variant ID (`mvr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types. - pub image_source: Option< - GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAttachmentsItemVariantsItemImageSource, - >, + pub image_source: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was last updated (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed download URL for this variant, resolved at request time. `null` if the file is unavailable. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier for this variant's processing tier. Common values include `"original"` (the unmodified upload) and `"thumbnail"` (a resized preview). pub variant_key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of this variant in pixels. `null` if not recorded. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8738,60 +9042,61 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAttachmentsItemV pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAttachmentsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the attached file, e.g. `"image/png"` or `"application/pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the attached file, e.g. `"report.pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the media item. Present on `media` type only. `null` otherwise. - pub height: Option, + pub height: Option>, /// Unique identifier for this attachment within the message. pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_height: Option, + pub image_height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise. - pub image_source: + pub image_source: Option< Option, + >, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise. - pub image_url: Option, + pub image_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_width: Option, + pub image_width: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only. `null` otherwise. + /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only; omitted otherwise. pub media_type: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the media item. Present on `media` type only. `null` otherwise. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types. + /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types. pub object: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types. - pub title: Option, + pub title: Option>, #[serde(rename = "type")] /// The attachment type. One of `"file"`, `"scraped_link"`, `"artifact"`, `"task"`, `"media"`, `"action"`, or `"chart"`. Determines which additional fields are present. pub type_: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise. + /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise. pub variants: Option< Vec, >, #[serde(default, skip_serializing_if = "Option::is_none")] /// Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise. - pub version: Option, + pub version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the media item. Present on `media` type only. `null` otherwise. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -8819,6 +9124,16 @@ pub enum GetApiV1TeamsTeamThreadsResponseDataItemParentMessageAgentMode { Embedded, } +/// Contract-defined alternatives for GetApiV1TeamsTeamThreadsResponseDataItemParentMessageUser. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum GetApiV1TeamsTeamThreadsResponseDataItemParentMessageUser { + /// Variant1 union variant. + Variant1(String), + /// Variant2 union variant. + Variant2(Value), +} + /// Contract-defined values for GetApiV1TeamsTeamThreadsResponseDataItemParentMessageVisibility. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum GetApiV1TeamsTeamThreadsResponseDataItemParentMessageVisibility { @@ -8835,29 +9150,29 @@ pub enum GetApiV1TeamsTeamThreadsResponseDataItemParentMessageVisibility { pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessage { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved actor descriptors for the message sender, combining identity and display metadata. Always contains exactly one entry. pub actors: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Local agent execution mode for this message. One of `cli`, `embedded`, or `null` when the message was not created by a local agent execution path. - pub agent_mode: Option, + pub agent_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Files, links, tasks, media, artifacts, and actions attached to this message. Empty array if there are no attachments. pub attachments: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread. - pub branched_thread: Option, + pub branched_thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Text content of the message. `null` for messages that contain only attachments. - pub content: Option, + pub content: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the message was posted (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message has at least one reply. Only present when explicitly requested or computed by the server. pub has_replies: Option, @@ -8865,59 +9180,59 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessage { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one. - pub idempotency_key: Option, + pub idempotency_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message is a deletion tombstone. `true` only on the `message_updated` broadcast emitted when a message is deleted: the original content is replaced with a placeholder and the message no longer exists on the server. Always `false` for live messages. pub is_deleted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users. - pub legacy_agent: Option, + pub legacy_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the message. Always present; defaults to an empty object when no metadata has been set. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization that owns this message (`org_...`). - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Emoji and other reactions added to this message by users. Empty array if no reactions have been added or the association is not preloaded. pub reactions: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display hint for how the message should be rendered. One of `"reply"`, `"direct"`, or `"inline"`. `null` for user-authored messages, which are always rendered as standard replies. - pub rendering_mode: Option, + pub rendering_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Inline array of reply messages, each serialized as a full message object. Only present when the server has preloaded replies for this message. pub replies: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response. - pub replies_after_cursor: Option, + pub replies_after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response. - pub replies_before_cursor: Option, + pub replies_before_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of direct replies to this message. Only present when explicitly requested or computed by the server. pub reply_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The parent message this message is a reply to, expanded as a full message object when loaded. `null` if this is a top-level message or the association is not preloaded. - pub reply_to: Option>, + pub reply_to: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the root message in this reply chain (`msg_...`). `null` for a top-level message. The value is persisted when the reply is created, so callers can correlate a multi-turn session without walking parent messages. pub root_message_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread. + /// ID of the thread this message belongs to (`thr_...`). pub thread: Option, #[serde(rename = "type")] #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset. - pub type_: Option, + pub type_: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents. - pub user: Option, + pub user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees. pub visibility: Option, @@ -8928,16 +9243,31 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParentMessage { pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipantsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the user. `null` if not set. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app. - pub app: Option, + pub app: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's app. `null` when the app association was not preloaded by the caller. - pub app_name: Option, + pub app_name: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Agent user that created this account (`usr_...`). `null` unless an agent created it. + pub created_by_agent_user: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Developer account that created this user (`dva_...`). `null` unless created via a developer token. + pub created_by_developer: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Org of the principal that created this user (`org_...`). `null` on legacy rows. + pub created_by_org: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Team that created this user (`tem_...`). `null` unless created as a team. + pub created_by_team: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// User who created this account (`usr_...`). `null` on self-signup or legacy rows. + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address of the user. - pub email: Option, + pub email: Option>, /// User ID (`usr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -8948,25 +9278,25 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipantsItem { pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Full display name of the user. `null` if the user has not set a name. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Role of the user within their organization. One of `"admin"`, `"member"`, or `"viewer"`. `null` when the user is not a member of any organization. - pub org_role: Option, + pub org_role: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller. - pub org_slug: Option, + pub org_slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller. - pub sandbox_name: Option, + pub sandbox_name: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -9025,25 +9355,25 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -9052,7 +9382,7 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// Workflow-authored explanation of the slot's role. `null` when the workflow declares none. - pub description: Option, + pub description: Option>, /// The slot's name, as referenced by the workflow. Supply the chosen agent under the top-level `participants[name]` field when invoking. pub name: String, /// Whether the workflow requires this slot to be filled for the run to complete its embedded stages. @@ -9079,10 +9409,10 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItemDetailsInvokeContract { #[serde(default, skip_serializing_if = "Option::is_none")] /// JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured. - pub input_schema: Option>, + pub input_schema: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Named participant slots declared by the workflow, sorted by name. `null` when the workflow declares none. Values supplied under the top-level `participants` field are agent IDs. - pub participants: Option>, + pub participants: Option>>, /// Owner-controlled payload and participant values the platform applies to every invocation. Supplying a conflicting value is rejected. pub prefills: GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItemDetailsInvokeContractPrefills, } @@ -9100,11 +9430,11 @@ pub enum GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSo #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItemDetails { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Automation execution type (`invoked`, `scheduled`, or `trigger`). - pub automation_type: Option, + /// Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one. + pub automation_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. - pub invoke_contract: Option, + /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types. + pub invoke_contract: Option>, #[serde(rename = "type")] /// Template-details discriminator. Always `automation` for this variant. pub type_: GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItemDetailsType, @@ -9115,30 +9445,30 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details. - pub details: Option, + pub details: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`. - pub display_name: Option, + pub display_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template config ID (`cfg_...`). `null` for inline-only templates. - pub id: Option, + pub id: Option>, /// Template config kind, or `SolutionTemplateRef` / `SolutionTemplatePath` when unresolved. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Lookup key stamped on the template config at import time. `null` when no lookup key was assigned. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable virtual path assigned to the template config. `null` when no virtual path was set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -9149,10 +9479,10 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub category_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was first imported (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Custom analytics events declared in the Solution body's `events:` manifest — a map of event key (snake_case) to its definition (`label`, optional `description`, optional typed `fields`). Dashboards use the `label` as the event's display name. Present as an empty object when the body declares none. pub events: Option>, @@ -9160,66 +9490,66 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only. - pub image_url: Option, + pub image_url: Option>, /// Resource type. Always `"Solution"`. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise. - pub latest_solution: Option, + pub latest_solution: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise. - pub latest_version: Option, + pub latest_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata declared in the Solution body (e.g. category or display hints). Present as an empty object when the body declares none. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing display name declared in the Solution body. `null` when the Solution body does not set one. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo. - pub org_logo: Option, + pub org_logo: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve. - pub org_slug: Option, + pub org_slug: Option>, /// Owner scopes this Solution appears under. Members: `"system"` (app-level system scope) and/or `"org"` (viewer's org scope). pub owners: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URLs of the Solution's gallery screenshots — the bundled assets the body's `screenshots:` field names, in declared order. Each is a stable, non-expiring capability URL with the same cacheability contract as `image_url` (one shared token, a `v` cache key, and a `file` param selecting the screenshot); a URL 404s if the Solution stops declaring its screenshot. An empty array when the Solution declares none, and always empty for org-scoped rows — the permanent URLs are minted for system-scope (catalog) Solutions only. pub screenshot_urls: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it. - pub solution_id: Option, + pub solution_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string declared in the Solution body (e.g. `"1.2.0"`). `null` when the body does not declare a version. - pub solution_version: Option, + pub solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Freeform tag keys declared in the Solution body. An empty array when the body declares none. pub tag_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Wrapped template kind — `"AgentTemplate"`, `"AutomationTemplate"`, `"AgentRoutineTemplate"`, `"AgentToolTemplate"`, `"AgentComputerTemplate"`, or `"SolutionTemplateRef"` for ref-mode bundles. - pub template_kind: Option, + pub template_kind: Option>, /// Template configs bundled by this Solution, in declaration order — the first entry is the deployable template the Solution wraps; the rest are sibling templates the wrapped template references. pub templates: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, /// `true` when this Solution is installed at the viewer's org scope and the app-level system scope carries a higher `solution_version`. Always `false` for system-only rows. pub upgrade_available: bool, #[serde(default, skip_serializing_if = "Option::is_none")] /// The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -9228,25 +9558,25 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -9255,7 +9585,7 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// Workflow-authored explanation of the slot's role. `null` when the workflow declares none. - pub description: Option, + pub description: Option>, /// The slot's name, as referenced by the workflow. Supply the chosen agent under the top-level `participants[name]` field when invoking. pub name: String, /// Whether the workflow requires this slot to be filled for the run to complete its embedded stages. @@ -9282,10 +9612,10 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItemDetailsInvokeContract { #[serde(default, skip_serializing_if = "Option::is_none")] /// JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured. - pub input_schema: Option>, + pub input_schema: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Named participant slots declared by the workflow, sorted by name. `null` when the workflow declares none. Values supplied under the top-level `participants` field are agent IDs. - pub participants: Option>, + pub participants: Option>>, /// Owner-controlled payload and participant values the platform applies to every invocation. Supplying a conflicting value is rejected. pub prefills: GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItemDetailsInvokeContractPrefills, } @@ -9303,11 +9633,11 @@ pub enum GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSo #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItemDetails { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Automation execution type (`invoked`, `scheduled`, or `trigger`). - pub automation_type: Option, + /// Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one. + pub automation_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. - pub invoke_contract: Option, + /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types. + pub invoke_contract: Option>, #[serde(rename = "type")] /// Template-details discriminator. Always `automation` for this variant. pub type_: GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItemDetailsType, @@ -9318,30 +9648,30 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details. - pub details: Option, + pub details: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`. - pub display_name: Option, + pub display_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template config ID (`cfg_...`). `null` for inline-only templates. - pub id: Option, + pub id: Option>, /// Template config kind, or `SolutionTemplateRef` / `SolutionTemplatePath` when unresolved. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Lookup key stamped on the template config at import time. `null` when no lookup key was assigned. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable virtual path assigned to the template config. `null` when no virtual path was set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -9352,10 +9682,10 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub category_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was first imported (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Custom analytics events declared in the Solution body's `events:` manifest — a map of event key (snake_case) to its definition (`label`, optional `description`, optional typed `fields`). Dashboards use the `label` as the event's display name. Present as an empty object when the body declares none. pub events: Option>, @@ -9363,66 +9693,66 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only. - pub image_url: Option, + pub image_url: Option>, /// Resource type. Always `"Solution"`. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise. - pub latest_solution: Option, + pub latest_solution: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise. - pub latest_version: Option, + pub latest_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata declared in the Solution body (e.g. category or display hints). Present as an empty object when the body declares none. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing display name declared in the Solution body. `null` when the Solution body does not set one. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo. - pub org_logo: Option, + pub org_logo: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve. - pub org_slug: Option, + pub org_slug: Option>, /// Owner scopes this Solution appears under. Members: `"system"` (app-level system scope) and/or `"org"` (viewer's org scope). pub owners: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URLs of the Solution's gallery screenshots — the bundled assets the body's `screenshots:` field names, in declared order. Each is a stable, non-expiring capability URL with the same cacheability contract as `image_url` (one shared token, a `v` cache key, and a `file` param selecting the screenshot); a URL 404s if the Solution stops declaring its screenshot. An empty array when the Solution declares none, and always empty for org-scoped rows — the permanent URLs are minted for system-scope (catalog) Solutions only. pub screenshot_urls: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it. - pub solution_id: Option, + pub solution_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string declared in the Solution body (e.g. `"1.2.0"`). `null` when the body does not declare a version. - pub solution_version: Option, + pub solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Freeform tag keys declared in the Solution body. An empty array when the body declares none. pub tag_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Wrapped template kind — `"AgentTemplate"`, `"AutomationTemplate"`, `"AgentRoutineTemplate"`, `"AgentToolTemplate"`, `"AgentComputerTemplate"`, or `"SolutionTemplateRef"` for ref-mode bundles. - pub template_kind: Option, + pub template_kind: Option>, /// Template configs bundled by this Solution, in declaration order — the first entry is the deployable template the Solution wraps; the rest are sibling templates the wrapped template references. pub templates: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, /// `true` when this Solution is installed at the viewer's org scope and the app-level system scope carries a higher `solution_version`. Always `false` for system-only rows. pub upgrade_available: bool, #[serde(default, skip_serializing_if = "Option::is_none")] /// The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -9433,26 +9763,26 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Description of the template from the config body. `null` if the current version has no `description` field. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable display name from the config body. `null` if the current version has no `display_name` field. - pub display_name: Option, + pub display_name: Option>, /// Template config ID (`cfg_...`). pub id: String, /// Config kind identifier for this template (e.g. `"agent_tool_template"`). pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable lookup key assigned to this template config. `null` if no lookup key is set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template name as stored in the config body. `null` if the current version has no `name` field. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this template config was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Virtual filesystem path for this template config. `null` if not set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -9472,33 +9802,33 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for the agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied and the agent is accessible to all members of its scope. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the application that owns this agent (`dap_...`). pub app: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `"claude-3-7-sonnet-latest"`). - pub default_model: Option, + pub default_model: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable description of what the agent does. `null` if not set. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address provisioned for this agent. `null` if email delivery is not configured. - pub email: Option, + pub email: Option>, /// Agent ID (`agi_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// System-level identity prompt that shapes the agent's persona and behavior. - pub identity: Option, + pub identity: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents. - pub last_applied_template_config: Option, + pub last_applied_template_config: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable, user-defined identifier for this agent within the application. Unique per app. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the agent. Not interpreted by the platform. pub metadata: Option>, @@ -9507,43 +9837,44 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItemParticipatingAgentsItem { pub name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name). - pub originator: Option, + pub originator: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Phone number provisioned for this agent. `null` if SMS is not configured. - pub phone_number: Option, + pub phone_number: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Source Solution and AgentTemplate summary for agents provisioned from a Solution. Includes `upgrade_available`, `latest_version`, and `latest_solution` so you can render an upgrade badge without a separate dry-run call. `null` for hand-built agents and agents whose tracked template or parent Solution has been deleted. Populated only on single-agent GET responses, never on list endpoints. - pub source_solution: + pub source_solution: Option< Option, + >, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`). - pub template_upgrade_available: Option, + pub template_upgrade_available: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped. - pub user: Option, + pub user: Option>, } /// Generated from the ArchAstro OpenAPI contract. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1TeamsTeamThreadsResponseDataItemSettings { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. - pub agent_enabled: Option, + /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting. + pub agent_enabled: Option>, } /// Contract-defined alternatives for GetApiV1TeamsTeamThreadsResponseDataItemCreator. @@ -9575,16 +9906,16 @@ pub enum GetApiV1TeamsTeamThreadsResponseDataItemVisibility { pub struct GetApiV1TeamsTeamThreadsResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads. - pub agent_user: Option, + pub agent_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the thread was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown. - pub creator: Option, + pub creator: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional description or purpose statement for the thread. `null` if not set. - pub description: Option, + pub description: Option>, /// Thread ID (`thr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -9601,31 +9932,31 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItem { pub is_unlisted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set. - pub key: Option, + pub key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Thread subtype: `"standard"` for ordinary threads, `"slack_mirror"` for the membership-strict mirror of a Slack channel, `"slashwork_mirror"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params. - pub kind: Option, + /// Thread subtype: `"standard"` for ordinary threads, `"personal"` for a user-and-owned-agents roster, `"slack_mirror"` for the membership-strict mirror of a Slack channel, or `"slashwork_mirror"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived. + pub kind: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment. - pub last_activity: Option>, + pub last_activity: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment. - pub last_message_preview: Option, + pub last_message_preview: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment. - pub last_message_sender: Option, + pub last_message_sender: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the thread. Shape is application-defined; `null` if no metadata has been set. - pub metadata: Option>, + pub metadata: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether the authenticated user has muted notifications for this thread. `true` suppresses all notification delivery. pub muted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The message that spawned this thread as a sub-thread. `null` for top-level threads. - pub parent_message: Option, + pub parent_message: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Array of participant user IDs (`usr_...`) who are members of this thread. pub participant: Option>, @@ -9638,43 +9969,43 @@ pub struct GetApiV1TeamsTeamThreadsResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Expanded agent objects for all agents participating in this thread. Present only when agent enrichment is requested. pub participating_agents: - Option>, + Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The authenticated user's membership role in this thread, e.g. `"owner"`, `"member"`, or `"viewer"`. `null` if the user is not a member. - pub role: Option, + pub role: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Per-thread configuration settings controlling AI agent behavior for this thread. pub settings: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned. - pub slug: Option, + pub slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Threads that are nested under this thread as replies to a parent message. Present only when sub-thread enrichment is requested. - pub sub_threads: Option>>, + pub sub_threads: Option>>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Status tags on the thread (e.g. `"blocked"`, `"needs-review"`). Edited by any thread participant via the `/threads/:thread/tags` endpoints and filterable on the thread list endpoints. Empty array if none set. pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable name of the thread. `null` if no title has been set. - pub title: Option, + pub title: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire. - pub ttl: Option, + /// Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire. + pub ttl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested. - pub unread_count: Option, + pub unread_count: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the thread was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads. - pub user: Option, + pub user: Option>, /// Who can read the thread: `team` for every owning-team member, `restricted` for team-readable threads with an explicit roster, or `private` for roster-only access. pub visibility: GetApiV1TeamsTeamThreadsResponseDataItemVisibility, } @@ -9725,8 +10056,16 @@ pub struct PostApiV1TeamsTeamThreadsInputThreadProfilePicture { #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct PostApiV1TeamsTeamThreadsInputThreadSettings { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. - pub agent_enabled: Option, + /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting. + pub agent_enabled: Option>, +} + +/// Contract-defined values for PostApiV1TeamsTeamThreadsInputThreadKind. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum PostApiV1TeamsTeamThreadsInputThreadKind { + /// The personal wire value. + #[serde(rename = "personal")] + Personal, } /// Contract-defined values for PostApiV1TeamsTeamThreadsInputThreadVisibility. @@ -9759,6 +10098,9 @@ pub struct PostApiV1TeamsTeamThreadsInputThread { /// Client-assigned unique key for idempotent creation or later lookup. Must be unique within the owning organization. pub key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Optional behavioral subtype. `personal` is accepted only for a user-owned thread and limits membership to that user and agents currently owned by them. Mirror kinds remain server-derived and cannot be selected by callers. + pub kind: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Users and agents to add atomically when the thread is created. Each target must pass the same authorization rules as a post-creation member add. Slack mirror threads reject non-empty caller-supplied rosters because their membership is sync-owned. pub members: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -10058,25 +10400,25 @@ pub struct GetApiV1ThreadsThreadAgentsResponse { pub struct GetApiV1ThreadsThreadArtifactsResponseDataItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -10286,25 +10628,25 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAcl { pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemActorsItemProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -10312,17 +10654,18 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemActorsItemProfil pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemActorsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: + pub profile_picture: Option< Option, + >, } /// Generated from the ArchAstro OpenAPI contract. @@ -10330,25 +10673,25 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemActorsItem { pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAttachmentsItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -10357,25 +10700,25 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAttachmentsItemV { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -10383,7 +10726,7 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAttachmentsItemV pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAttachmentsItemVariantsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of this variant's file (e.g., `"image/jpeg"`, `"video/mp4"`). `null` if the file is not loaded. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was created (ISO 8601). pub created_at: Option>, @@ -10392,29 +10735,27 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAttachmentsItemV pub file: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the uploaded file for this variant. `null` if the file is not loaded. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of this variant in pixels. `null` if not recorded. - pub height: Option, + pub height: Option>, /// Media variant ID (`mvr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types. - pub image_source: Option< - GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAttachmentsItemVariantsItemImageSource, - >, + pub image_source: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was last updated (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed download URL for this variant, resolved at request time. `null` if the file is unavailable. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier for this variant's processing tier. Common values include `"original"` (the unmodified upload) and `"thumbnail"` (a resized preview). pub variant_key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of this variant in pixels. `null` if not recorded. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -10422,60 +10763,61 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAttachmentsItemV pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAttachmentsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the attached file, e.g. `"image/png"` or `"application/pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the attached file, e.g. `"report.pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the media item. Present on `media` type only. `null` otherwise. - pub height: Option, + pub height: Option>, /// Unique identifier for this attachment within the message. pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_height: Option, + pub image_height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise. - pub image_source: + pub image_source: Option< Option, + >, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise. - pub image_url: Option, + pub image_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_width: Option, + pub image_width: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only. `null` otherwise. + /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only; omitted otherwise. pub media_type: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the media item. Present on `media` type only. `null` otherwise. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types. + /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types. pub object: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types. - pub title: Option, + pub title: Option>, #[serde(rename = "type")] /// The attachment type. One of `"file"`, `"scraped_link"`, `"artifact"`, `"task"`, `"media"`, `"action"`, or `"chart"`. Determines which additional fields are present. pub type_: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise. + /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise. pub variants: Option< Vec, >, #[serde(default, skip_serializing_if = "Option::is_none")] /// Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise. - pub version: Option, + pub version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the media item. Present on `media` type only. `null` otherwise. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -10503,6 +10845,16 @@ pub enum GetApiV1ThreadsThreadMessagesResponseDataMessagesItemAgentMode { Embedded, } +/// Contract-defined alternatives for GetApiV1ThreadsThreadMessagesResponseDataMessagesItemUser. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum GetApiV1ThreadsThreadMessagesResponseDataMessagesItemUser { + /// Variant1 union variant. + Variant1(String), + /// Variant2 union variant. + Variant2(Value), +} + /// Contract-defined values for GetApiV1ThreadsThreadMessagesResponseDataMessagesItemVisibility. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum GetApiV1ThreadsThreadMessagesResponseDataMessagesItemVisibility { @@ -10519,29 +10871,29 @@ pub enum GetApiV1ThreadsThreadMessagesResponseDataMessagesItemVisibility { pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved actor descriptors for the message sender, combining identity and display metadata. Always contains exactly one entry. pub actors: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Local agent execution mode for this message. One of `cli`, `embedded`, or `null` when the message was not created by a local agent execution path. - pub agent_mode: Option, + pub agent_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Files, links, tasks, media, artifacts, and actions attached to this message. Empty array if there are no attachments. pub attachments: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread. - pub branched_thread: Option, + pub branched_thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Text content of the message. `null` for messages that contain only attachments. - pub content: Option, + pub content: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the message was posted (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message has at least one reply. Only present when explicitly requested or computed by the server. pub has_replies: Option, @@ -10549,59 +10901,59 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItem { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one. - pub idempotency_key: Option, + pub idempotency_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message is a deletion tombstone. `true` only on the `message_updated` broadcast emitted when a message is deleted: the original content is replaced with a placeholder and the message no longer exists on the server. Always `false` for live messages. pub is_deleted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users. - pub legacy_agent: Option, + pub legacy_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the message. Always present; defaults to an empty object when no metadata has been set. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization that owns this message (`org_...`). - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Emoji and other reactions added to this message by users. Empty array if no reactions have been added or the association is not preloaded. pub reactions: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display hint for how the message should be rendered. One of `"reply"`, `"direct"`, or `"inline"`. `null` for user-authored messages, which are always rendered as standard replies. - pub rendering_mode: Option, + pub rendering_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Inline array of reply messages, each serialized as a full message object. Only present when the server has preloaded replies for this message. pub replies: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response. - pub replies_after_cursor: Option, + pub replies_after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response. - pub replies_before_cursor: Option, + pub replies_before_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of direct replies to this message. Only present when explicitly requested or computed by the server. pub reply_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The parent message this message is a reply to, expanded as a full message object when loaded. `null` if this is a top-level message or the association is not preloaded. - pub reply_to: Option>, + pub reply_to: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the root message in this reply chain (`msg_...`). `null` for a top-level message. The value is persisted when the reply is created, so callers can correlate a multi-turn session without walking parent messages. pub root_message_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread. + /// ID of the thread this message belongs to (`thr_...`). pub thread: Option, #[serde(rename = "type")] #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset. - pub type_: Option, + pub type_: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents. - pub user: Option, + pub user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees. pub visibility: Option, @@ -10612,13 +10964,13 @@ pub struct GetApiV1ThreadsThreadMessagesResponseDataMessagesItem { pub struct GetApiV1ThreadsThreadMessagesResponseData { #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque cursor to pass as `after` to retrieve the page of messages newer than this result set. `null` when there are no later messages. - pub after_cursor: Option, + pub after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Message ID used as the anchor for a windowed query. `null` for ordinary cursor pagination. - pub anchor: Option, + pub anchor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque cursor to pass as `before` to retrieve the page of messages older than this result set. `null` when there are no earlier messages. - pub before_cursor: Option, + pub before_cursor: Option>, /// Ordered array of message objects for this page of results. pub messages: Vec, } @@ -10755,18 +11107,18 @@ pub struct GetApiV1ThreadsThreadTrajectoriesParams { pub struct GetApiV1ThreadsThreadTrajectoriesResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent-authored reply message (`msg_...`). `null` if the trajectory has not yet produced a response message. - pub agent_message: Option, + pub agent_message: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this trajectory link was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, /// Thread message trajectory ID (`tmt_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this trajectory belongs to (`org_...`). - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment in which this trajectory was produced (`dsb_...`). `null` in production contexts. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the thread containing the linked messages (`thr_...`). pub thread: Option, @@ -10775,10 +11127,10 @@ pub struct GetApiV1ThreadsThreadTrajectoriesResponseDataItem { pub trajectory: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this trajectory link was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user-authored message that triggered the agent response (`msg_...`). `null` if the agent turn was not preceded by a user message. - pub user_message: Option, + pub user_message: Option>, } /// Successful response @@ -10786,10 +11138,10 @@ pub struct GetApiV1ThreadsThreadTrajectoriesResponseDataItem { pub struct GetApiV1ThreadsThreadTrajectoriesResponse { #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque cursor to pass as `after_cursor` to retrieve the next page. `null` when no further pages exist. - pub after_cursor: Option, + pub after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque cursor to pass as `before_cursor` to retrieve the previous page. `null` when this is the first page. - pub before_cursor: Option, + pub before_cursor: Option>, /// Array of thread message trajectory objects for the current page. Empty when no trajectories match the query. pub data: Vec, } @@ -10947,25 +11299,25 @@ pub struct PutApiV1ThreadsThreadTagsInput { pub struct GetApiV1UsersUserArtifactsResponseDataItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11067,45 +11419,6 @@ pub struct PostApiV1UsersUserInvitesInput { pub invite: PostApiV1UsersUserInvitesInputInvite, } -/// Generated from the ArchAstro OpenAPI contract. -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct GetApiV1UsersUserOrgsResponseDataItemVendorLogo { - #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - /// Height of the image in pixels. `null` if not known. - pub height: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - /// 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. - pub refresh_url: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - /// Width of the image in pixels. `null` if not known. - pub width: Option, -} - -/// Generated from the ArchAstro OpenAPI contract. -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct GetApiV1UsersUserOrgsResponseDataItemVendor { - /// Organization ID of the vendor (`org_...`). - pub id: String, - #[serde(default, skip_serializing_if = "Option::is_none")] - /// Logo of the vendor organization. The `url` is a stable, non-expiring capability URL served by the platform (the same mechanism as catalog `org_logo` fields), safe to hold in caches; `refresh_url` is `null`. `null` when the vendor has no logo. - pub logo: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - /// Display name of the vendor organization. `null` if the vendor has not set a name. - pub name: Option, -} - /// Generated from the ArchAstro OpenAPI contract. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1UsersUserOrgsResponseDataItem { @@ -11127,7 +11440,7 @@ pub struct GetApiV1UsersUserOrgsResponseDataItem { /// Display name of the organization. `null` if the org has not set a name. pub name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Lookup key (`sol-...`) of the Solution that drove this org's customer onboarding, stamped when the org was first linked into a vendor's network via an explore-install. `null` for vendor-track orgs and invite-driven customers. The onboarding UI reads the referenced Solution's `metadata.onboarding` block to tailor the customer checklist. + /// Lookup key (`sol-...`) of the Solution currently driving this org's customer onboarding — the active onboarding solution pointer. Stamped when the org is linked into a vendor's network via an explore-install and re-stamped by every later solution-driven link, so the latest install wins. `null` for vendor-track orgs and invite-driven customers. The onboarding UI reads the referenced Solution's `metadata.onboarding` block to tailor the customer checklist. pub onboarding_solution_lookup_key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The new-user experience track this org first completed. `"vendor"` for orgs that onboarded as service providers; `"customer"` for orgs that onboarded as buyers. `null` if onboarding was not tracked. @@ -11148,9 +11461,6 @@ pub struct GetApiV1UsersUserOrgsResponseDataItem { /// When this organization was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Branding of the solution vendor whose network this organization belongs to — the vendor of the oldest active vendor relationship. Only present for organizations on the `"customer"` onboarding track; `null` for vendor-track organizations (including vendors that later joined another vendor's network) and for customers with no active vendor link. Clients use it to co-brand the workspace ("ArchAgents by Acme"). - pub vendor: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] /// Public website URL for the organization. `null` if not set. pub website: Option, } @@ -11228,6 +11538,18 @@ pub struct GetApiV1UsersUserTasksParams { /// Return only subtasks of the given task (`tsk_...`), or pass `none` to return only top-level tasks. pub parent: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this container. Must be supplied with `source_type` and `source_id`. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this object kind. Must be supplied with the other source filters. + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this object identity. Must be supplied with the other source filters. + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks with this exact epic label. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Restrict results to tasks whose name or description contains this string. pub search: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11261,25 +11583,25 @@ pub struct GetApiV1UsersUserTasksParams { pub struct GetApiV1UsersUserTasksResponseDataItemCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11287,16 +11609,17 @@ pub struct GetApiV1UsersUserTasksResponseDataItemCreatedByActorProfilePicture { pub struct GetApiV1UsersUserTasksResponseDataItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11315,25 +11638,25 @@ pub struct GetApiV1UsersUserTasksResponseDataItemCurrentLease { pub struct GetApiV1UsersUserTasksResponseDataItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11341,16 +11664,17 @@ pub struct GetApiV1UsersUserTasksResponseDataItemOwnerActorProfilePicture { pub struct GetApiV1UsersUserTasksResponseDataItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option, + pub profile_picture: + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11358,13 +11682,13 @@ pub struct GetApiV1UsersUserTasksResponseDataItemOwnerActor { pub struct GetApiV1UsersUserTasksResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -11373,22 +11697,25 @@ pub struct GetApiV1UsersUserTasksResponseDataItem { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11404,25 +11731,34 @@ pub struct GetApiV1UsersUserTasksResponseDataItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11433,16 +11769,16 @@ pub struct GetApiV1UsersUserTasksResponseDataItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Successful response @@ -11450,10 +11786,10 @@ pub struct GetApiV1UsersUserTasksResponseDataItem { pub struct GetApiV1UsersUserTasksResponse { #[serde(default, skip_serializing_if = "Option::is_none")] /// API field. - pub after_cursor: Option, + pub after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// API field. - pub before_cursor: Option, + pub before_cursor: Option>, /// Array of task objects matching the requested filters. pub data: Vec, /// API field. @@ -11470,6 +11806,9 @@ pub struct PostApiV1UsersUserTasksInputTask { /// Date and time by which the task should be completed (ISO 8601). Omit to create the task without a due date. pub due_date: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Optional free-form grouping label. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value map of named URLs or references associated with the task (e.g. external ticket links). pub links: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11490,6 +11829,15 @@ pub struct PostApiV1UsersUserTasksInputTask { /// Priority level from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when omitted. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Container of the work this task is about (for example `github.com`). Must be supplied with `source_type` and `source_id`. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Initial status for the task. One of `"open"`, `"in_progress"`, or `"done"`. Defaults to `"open"` when omitted. pub status: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11546,25 +11894,25 @@ pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemCreatedBy { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11572,18 +11920,16 @@ pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemCreatedBy pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: Option< - GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemCreatedByActorProfilePicture, - >, + pub profile_picture: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11602,25 +11948,25 @@ pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemCurrentLe pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11628,17 +11974,19 @@ pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemOwnerActo pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: Option< - GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemOwnerActorProfilePicture, + Option< + GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemOwnerActorProfilePicture, + >, >, } @@ -11647,13 +11995,13 @@ pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItemOwnerActo pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -11663,23 +12011,26 @@ pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). pub created_by_actor: - Option, + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11695,25 +12046,35 @@ pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11724,16 +12085,16 @@ pub struct GetApiV1UsersUserTasksBlockerCyclesResponseDataItemTasksItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11774,6 +12135,18 @@ pub struct GetApiV1UsersUserTasksReadyParams { /// Only include tasks assigned to the authenticated user. pub assigned_to_me: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Only include tasks whose source matches this container. Must be supplied with `source_type` and `source_id`. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Only include tasks whose source matches this object kind. + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Only include tasks whose source matches this object identity. + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Only include tasks with this exact epic label. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Maximum number of readiness entries to return. Capped at 100. pub limit: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11786,25 +12159,25 @@ pub struct GetApiV1UsersUserTasksReadyParams { pub struct GetApiV1UsersUserTasksReadyResponseDataItemTaskCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11812,17 +12185,17 @@ pub struct GetApiV1UsersUserTasksReadyResponseDataItemTaskCreatedByActorProfileP pub struct GetApiV1UsersUserTasksReadyResponseDataItemTaskCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11841,25 +12214,25 @@ pub struct GetApiV1UsersUserTasksReadyResponseDataItemTaskCurrentLease { pub struct GetApiV1UsersUserTasksReadyResponseDataItemTaskOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11867,17 +12240,17 @@ pub struct GetApiV1UsersUserTasksReadyResponseDataItemTaskOwnerActorProfilePictu pub struct GetApiV1UsersUserTasksReadyResponseDataItemTaskOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -11885,13 +12258,13 @@ pub struct GetApiV1UsersUserTasksReadyResponseDataItemTaskOwnerActor { pub struct GetApiV1UsersUserTasksReadyResponseDataItemTask { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -11900,22 +12273,26 @@ pub struct GetApiV1UsersUserTasksReadyResponseDataItemTask { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11931,25 +12308,34 @@ pub struct GetApiV1UsersUserTasksReadyResponseDataItemTask { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -11960,16 +12346,16 @@ pub struct GetApiV1UsersUserTasksReadyResponseDataItemTask { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Contract-defined values for GetApiV1UsersUserTasksReadyResponseDataItemReadiness. @@ -12004,7 +12390,7 @@ pub struct GetApiV1UsersUserTasksReadyResponseDataItem { pub readiness: GetApiV1UsersUserTasksReadyResponseDataItemReadiness, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable exclusion reason: `open_blockers` or `active_lease`; omitted when ready. - pub reason: Option, + pub reason: Option>, /// The task evaluated for readiness. pub task: GetApiV1UsersUserTasksReadyResponseDataItemTask, } @@ -12060,6 +12446,18 @@ pub struct GetApiV1UsersUserTasksSearchParams { /// Return only subtasks of the given task (`tsk_...`), or pass `none` to return only top-level tasks. pub parent: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this container. Must be supplied with `source_type` and `source_id`. + pub source_scope: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this object kind. + pub source_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks whose source matches this object identity. + pub source_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Return only tasks with this exact epic label. + pub epic: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Maximum number of tasks to return. Capped at 100. pub limit: Option, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -12072,25 +12470,25 @@ pub struct GetApiV1UsersUserTasksSearchParams { pub struct GetApiV1UsersUserTasksSearchResponseDataItemCreatedByActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12098,17 +12496,17 @@ pub struct GetApiV1UsersUserTasksSearchResponseDataItemCreatedByActorProfilePict pub struct GetApiV1UsersUserTasksSearchResponseDataItemCreatedByActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12127,25 +12525,25 @@ pub struct GetApiV1UsersUserTasksSearchResponseDataItemCurrentLease { pub struct GetApiV1UsersUserTasksSearchResponseDataItemOwnerActorProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12153,17 +12551,17 @@ pub struct GetApiV1UsersUserTasksSearchResponseDataItemOwnerActorProfilePicture pub struct GetApiV1UsersUserTasksSearchResponseDataItemOwnerActor { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. pub profile_picture: - Option, + Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12171,13 +12569,13 @@ pub struct GetApiV1UsersUserTasksSearchResponseDataItemOwnerActor { pub struct GetApiV1UsersUserTasksSearchResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this task (`agi_...`). `null` if the task is scoped to a team or user. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. pub blocked_by_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was marked as done or otherwise closed (ISO 8601). `null` if the task is still open. - pub closed_at: Option>, + pub closed_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of comments posted on this task. pub comments_count: Option, @@ -12186,22 +12584,26 @@ pub struct GetApiV1UsersUserTasksSearchResponseDataItem { pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub created_by_actor: Option, + pub created_by_actor: + Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_agent: Option, + pub created_by_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub created_by_user: Option, + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Viewer-safe live coding-session lease summary. `null` when the task is unleased or the projected lease has expired. Fencing identifiers are never included. pub current_lease: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Long-form description or notes for the task. `null` if no description has been provided. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Date and time by which the task should be completed (ISO 8601). `null` if no due date is set. - pub due_date: Option>, + pub due_date: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Free-form grouping label. `null` when the task is not in an epic. + pub epic: Option>, /// Task ID (`tsk_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -12217,25 +12619,34 @@ pub struct GetApiV1UsersUserTasksSearchResponseDataItem { pub name: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this task belongs to (`org_...`). `null` for tasks outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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). - pub owner_actor: Option, + pub owner_actor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_agent: Option, + pub owner_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub owner_user: Option, + pub owner_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the parent task when this task is a subtask (`tsk_...`). `null` for top-level tasks. Subtasks nest exactly one level. - pub parent: Option, + pub parent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Priority level of the task from `0` (highest) to `4` (lowest). Defaults to `2` (medium) when not explicitly set. pub priority: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this task is scoped to (`dsb_...`). `null` for tasks outside a sandbox environment. - pub sandbox: Option, + pub sandbox: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Source object identity (for example `ArchAstro/firstlanding`). `null` when the task has no source. + pub source_id: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// 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`. + pub source_scope: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Kind of source object (for example `repository`). `null` when the task has no source. + pub source_type: Option>, /// Current status of the task. One of `"open"`, `"in_progress"`, or `"done"`. pub status: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -12246,16 +12657,16 @@ pub struct GetApiV1UsersUserTasksSearchResponseDataItem { pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this task (`tem_...`). `null` if the task is not scoped to a team. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub thread: Option, + pub thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the task was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this task (`usr_...`). `null` if the task is scoped to a team. - pub user: Option, + pub user: Option>, } /// Successful response @@ -12339,25 +12750,25 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageAcl { pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageActorsItemProfilePicture { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12365,17 +12776,18 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageActorsItemProfil pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageActorsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Composite actor identifier. Format is `"user-"` for human users or `"agent-"` for agents. - pub id: Option, + pub id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the actor shown in the UI. `null` if no name is set. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Profile picture for the actor. `null` if the actor has no profile picture. - pub profile_picture: + pub profile_picture: Option< Option, + >, } /// Generated from the ArchAstro OpenAPI contract. @@ -12383,25 +12795,25 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageActorsItem { pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageAttachmentsItemImageSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12410,25 +12822,25 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageAttachmentsItemV { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12436,7 +12848,7 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageAttachmentsItemV pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageAttachmentsItemVariantsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of this variant's file (e.g., `"image/jpeg"`, `"video/mp4"`). `null` if the file is not loaded. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was created (ISO 8601). pub created_at: Option>, @@ -12445,29 +12857,27 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageAttachmentsItemV pub file: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the uploaded file for this variant. `null` if the file is not loaded. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of this variant in pixels. `null` if not recorded. - pub height: Option, + pub height: Option>, /// Media variant ID (`mvr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types. - pub image_source: Option< - GetApiV1UsersUserThreadsResponseDataItemParentMessageAttachmentsItemVariantsItemImageSource, - >, + pub image_source: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this variant was last updated (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed download URL for this variant, resolved at request time. `null` if the file is unavailable. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier for this variant's processing tier. Common values include `"original"` (the unmodified upload) and `"thumbnail"` (a resized preview). pub variant_key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of this variant in pixels. `null` if not recorded. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12475,60 +12885,61 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageAttachmentsItemV pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessageAttachmentsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the attached file, e.g. `"image/png"` or `"application/pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub content_type: Option, + pub content_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Original filename of the attached file, e.g. `"report.pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise. - pub filename: Option, + pub filename: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the media item. Present on `media` type only. `null` otherwise. - pub height: Option, + pub height: Option>, /// Unique identifier for this attachment within the message. pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_height: Option, + pub image_height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise. - pub image_source: + pub image_source: Option< Option, + >, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise. - pub image_url: Option, + pub image_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise. - pub image_width: Option, + pub image_width: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only. `null` otherwise. + /// The media category, e.g. `"video"` or `"audio"`. Present on `media` type only; omitted otherwise. pub media_type: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the media item. Present on `media` type only. `null` otherwise. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. `null` on other types. + /// The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. For `chart` type, contains the chart with its inline `spec`. Omitted on other types. pub object: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types. - pub title: Option, + pub title: Option>, #[serde(rename = "type")] /// The attachment type. One of `"file"`, `"scraped_link"`, `"artifact"`, `"task"`, `"media"`, `"action"`, or `"chart"`. Determines which additional fields are present. pub type_: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise. + /// Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only; omitted otherwise. pub variants: Option< Vec, >, #[serde(default, skip_serializing_if = "Option::is_none")] /// Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise. - pub version: Option, + pub version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width in pixels of the media item. Present on `media` type only. `null` otherwise. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12556,6 +12967,16 @@ pub enum GetApiV1UsersUserThreadsResponseDataItemParentMessageAgentMode { Embedded, } +/// Contract-defined alternatives for GetApiV1UsersUserThreadsResponseDataItemParentMessageUser. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum GetApiV1UsersUserThreadsResponseDataItemParentMessageUser { + /// Variant1 union variant. + Variant1(String), + /// Variant2 union variant. + Variant2(Value), +} + /// Contract-defined values for GetApiV1UsersUserThreadsResponseDataItemParentMessageVisibility. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum GetApiV1UsersUserThreadsResponseDataItemParentMessageVisibility { @@ -12572,29 +12993,29 @@ pub enum GetApiV1UsersUserThreadsResponseDataItemParentMessageVisibility { pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessage { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for private messages (grants with `read` action). Only returned to resource owners (and privileged/org-admin viewers) via server-side `field_redactions: [acl: :owner]`; `null` for everyone else. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved actor descriptors for the message sender, combining identity and display metadata. Always contains exactly one entry. pub actors: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users. - pub agent: Option, + pub agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Local agent execution mode for this message. One of `cli`, `embedded`, or `null` when the message was not created by a local agent execution path. - pub agent_mode: Option, + pub agent_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Files, links, tasks, media, artifacts, and actions attached to this message. Empty array if there are no attachments. pub attachments: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread. - pub branched_thread: Option, + pub branched_thread: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Text content of the message. `null` for messages that contain only attachments. - pub content: Option, + pub content: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the message was posted (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message has at least one reply. Only present when explicitly requested or computed by the server. pub has_replies: Option, @@ -12602,59 +13023,59 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessage { pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one. - pub idempotency_key: Option, + pub idempotency_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether this message is a deletion tombstone. `true` only on the `message_updated` broadcast emitted when a message is deleted: the original content is replaced with a placeholder and the message no longer exists on the server. Always `false` for live messages. pub is_deleted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users. - pub legacy_agent: Option, + pub legacy_agent: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the message. Always present; defaults to an empty object when no metadata has been set. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization that owns this message (`org_...`). - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Emoji and other reactions added to this message by users. Empty array if no reactions have been added or the association is not preloaded. pub reactions: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display hint for how the message should be rendered. One of `"reply"`, `"direct"`, or `"inline"`. `null` for user-authored messages, which are always rendered as standard replies. - pub rendering_mode: Option, + pub rendering_mode: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Inline array of reply messages, each serialized as a full message object. Only present when the server has preloaded replies for this message. pub replies: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response. - pub replies_after_cursor: Option, + pub replies_after_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response. - pub replies_before_cursor: Option, + pub replies_before_cursor: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Total number of direct replies to this message. Only present when explicitly requested or computed by the server. pub reply_count: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// The parent message this message is a reply to, expanded as a full message object when loaded. `null` if this is a top-level message or the association is not preloaded. - pub reply_to: Option>, + pub reply_to: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the root message in this reply chain (`msg_...`). `null` for a top-level message. The value is persisted when the reply is created, so callers can correlate a multi-turn session without walking parent messages. pub root_message_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread. + /// ID of the thread this message belongs to (`thr_...`). pub thread: Option, #[serde(rename = "type")] #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional client-defined classification for the message (for example `note` or `status`). Free-form string up to 64 characters. The value `system` is reserved for platform-authored messages and cannot be set by clients. `null` when unset. - pub type_: Option, + pub type_: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents. - pub user: Option, + pub user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Message-level visibility. `default` is visible to anyone who can see the parent thread. `private` is restricted to the sender and explicit ACL `read` grantees. pub visibility: Option, @@ -12665,16 +13086,31 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParentMessage { pub struct GetApiV1UsersUserThreadsResponseDataItemParticipantsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short handle or alias for the user. `null` if not set. - pub alias: Option, + pub alias: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app. - pub app: Option, + pub app: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's app. `null` when the app association was not preloaded by the caller. - pub app_name: Option, + pub app_name: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Agent user that created this account (`usr_...`). `null` unless an agent created it. + pub created_by_agent_user: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Developer account that created this user (`dva_...`). `null` unless created via a developer token. + pub created_by_developer: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Org of the principal that created this user (`org_...`). `null` on legacy rows. + pub created_by_org: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Team that created this user (`tem_...`). `null` unless created as a team. + pub created_by_team: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// User who created this account (`usr_...`). `null` on self-signup or legacy rows. + pub created_by_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address of the user. - pub email: Option, + pub email: Option>, /// User ID (`usr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -12685,25 +13121,25 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipantsItem { pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Full display name of the user. `null` if the user has not set a name. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Role of the user within their organization. One of `"admin"`, `"member"`, or `"viewer"`. `null` when the user is not a member of any organization. - pub org_role: Option, + pub org_role: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable workspace slug for the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller. - pub org_slug: Option, + pub org_slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller. - pub sandbox_name: Option, + pub sandbox_name: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12762,25 +13198,25 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12789,7 +13225,7 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// Workflow-authored explanation of the slot's role. `null` when the workflow declares none. - pub description: Option, + pub description: Option>, /// The slot's name, as referenced by the workflow. Supply the chosen agent under the top-level `participants[name]` field when invoking. pub name: String, /// Whether the workflow requires this slot to be filled for the run to complete its embedded stages. @@ -12816,10 +13252,10 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItemDetailsInvokeContract { #[serde(default, skip_serializing_if = "Option::is_none")] /// JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured. - pub input_schema: Option>, + pub input_schema: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Named participant slots declared by the workflow, sorted by name. `null` when the workflow declares none. Values supplied under the top-level `participants` field are agent IDs. - pub participants: Option>, + pub participants: Option>>, /// Owner-controlled payload and participant values the platform applies to every invocation. Supplying a conflicting value is rejected. pub prefills: GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItemDetailsInvokeContractPrefills, } @@ -12837,11 +13273,11 @@ pub enum GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSo #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItemDetails { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Automation execution type (`invoked`, `scheduled`, or `trigger`). - pub automation_type: Option, + /// Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one. + pub automation_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. - pub invoke_contract: Option, + /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types. + pub invoke_contract: Option>, #[serde(rename = "type")] /// Template-details discriminator. Always `automation` for this variant. pub type_: GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItemDetailsType, @@ -12852,30 +13288,30 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionCurrentSolutionTemplatesItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details. - pub details: Option, + pub details: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`. - pub display_name: Option, + pub display_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template config ID (`cfg_...`). `null` for inline-only templates. - pub id: Option, + pub id: Option>, /// Template config kind, or `SolutionTemplateRef` / `SolutionTemplatePath` when unresolved. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Lookup key stamped on the template config at import time. `null` when no lookup key was assigned. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable virtual path assigned to the template config. `null` when no virtual path was set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12886,10 +13322,10 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub category_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was first imported (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Custom analytics events declared in the Solution body's `events:` manifest — a map of event key (snake_case) to its definition (`label`, optional `description`, optional typed `fields`). Dashboards use the `label` as the event's display name. Present as an empty object when the body declares none. pub events: Option>, @@ -12897,66 +13333,66 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only. - pub image_url: Option, + pub image_url: Option>, /// Resource type. Always `"Solution"`. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise. - pub latest_solution: Option, + pub latest_solution: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise. - pub latest_version: Option, + pub latest_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata declared in the Solution body (e.g. category or display hints). Present as an empty object when the body declares none. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing display name declared in the Solution body. `null` when the Solution body does not set one. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo. - pub org_logo: Option, + pub org_logo: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve. - pub org_slug: Option, + pub org_slug: Option>, /// Owner scopes this Solution appears under. Members: `"system"` (app-level system scope) and/or `"org"` (viewer's org scope). pub owners: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URLs of the Solution's gallery screenshots — the bundled assets the body's `screenshots:` field names, in declared order. Each is a stable, non-expiring capability URL with the same cacheability contract as `image_url` (one shared token, a `v` cache key, and a `file` param selecting the screenshot); a URL 404s if the Solution stops declaring its screenshot. An empty array when the Solution declares none, and always empty for org-scoped rows — the permanent URLs are minted for system-scope (catalog) Solutions only. pub screenshot_urls: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it. - pub solution_id: Option, + pub solution_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string declared in the Solution body (e.g. `"1.2.0"`). `null` when the body does not declare a version. - pub solution_version: Option, + pub solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Freeform tag keys declared in the Solution body. An empty array when the body declares none. pub tag_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Wrapped template kind — `"AgentTemplate"`, `"AutomationTemplate"`, `"AgentRoutineTemplate"`, `"AgentToolTemplate"`, `"AgentComputerTemplate"`, or `"SolutionTemplateRef"` for ref-mode bundles. - pub template_kind: Option, + pub template_kind: Option>, /// Template configs bundled by this Solution, in declaration order — the first entry is the deployable template the Solution wraps; the rest are sibling templates the wrapped template references. pub templates: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, /// `true` when this Solution is installed at the viewer's org scope and the app-level system scope carries a higher `solution_version`. Always `false` for system-only rows. pub upgrade_available: bool, #[serde(default, skip_serializing_if = "Option::is_none")] /// The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12965,25 +13401,25 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file. - pub file: Option, + pub file: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Height of the image in pixels. `null` if not known. - pub height: Option, + pub height: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity. - pub media: Option, + pub media: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known. - pub mime_type: Option, + pub mime_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// 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. - pub refresh_url: Option, + pub refresh_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires. - pub url: Option, + pub url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Width of the image in pixels. `null` if not known. - pub width: Option, + pub width: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -12992,7 +13428,7 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource { #[serde(default, skip_serializing_if = "Option::is_none")] /// Workflow-authored explanation of the slot's role. `null` when the workflow declares none. - pub description: Option, + pub description: Option>, /// The slot's name, as referenced by the workflow. Supply the chosen agent under the top-level `participants[name]` field when invoking. pub name: String, /// Whether the workflow requires this slot to be filled for the run to complete its embedded stages. @@ -13019,10 +13455,10 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItemDetailsInvokeContract { #[serde(default, skip_serializing_if = "Option::is_none")] /// JSON Schema validated against the whole invoke payload, from the automation's `input_schema_config`. `null` when none is configured. - pub input_schema: Option>, + pub input_schema: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Named participant slots declared by the workflow, sorted by name. `null` when the workflow declares none. Values supplied under the top-level `participants` field are agent IDs. - pub participants: Option>, + pub participants: Option>>, /// Owner-controlled payload and participant values the platform applies to every invocation. Supplying a conflicting value is rejected. pub prefills: GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItemDetailsInvokeContractPrefills, } @@ -13040,11 +13476,11 @@ pub enum GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSo #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItemDetails { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Automation execution type (`invoked`, `scheduled`, or `trigger`). - pub automation_type: Option, + /// Automation execution type (`invoked`, `scheduled`, or `trigger`). `null` when the template body does not declare one. + pub automation_type: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. - pub invoke_contract: Option, + /// Schema-driven payload and participant inputs for an invoked automation. Used by installation clients to collect locked prefills before provisioning. `null` for non-invoked automation types. + pub invoke_contract: Option>, #[serde(rename = "type")] /// Template-details discriminator. Always `automation` for this variant. pub type_: GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItemDetailsType, @@ -13055,30 +13491,30 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSourceSolutionSolutionTemplatesItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template-kind-specific details selected by the `type` discriminator. `null` when this template kind has no additional details. - pub details: Option, + pub details: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`. - pub display_name: Option, + pub display_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template config ID (`cfg_...`). `null` for inline-only templates. - pub id: Option, + pub id: Option>, /// Template config kind, or `SolutionTemplateRef` / `SolutionTemplatePath` when unresolved. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Lookup key stamped on the template config at import time. `null` when no lookup key was assigned. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable virtual path assigned to the template config. `null` when no virtual path was set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -13089,10 +13525,10 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub category_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was first imported (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Custom analytics events declared in the Solution body's `events:` manifest — a map of event key (snake_case) to its definition (`label`, optional `description`, optional typed `fields`). Dashboards use the `label` as the event's display name. Present as an empty object when the body declares none. pub events: Option>, @@ -13100,66 +13536,66 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URL of the Solution's cover image — the bundled asset the body's `image:` field names. A stable, non-expiring capability URL (like `org_logo.url`), safe to hold in caches and OpenGraph tags; it 404s if the Solution stops declaring a cover. `null` when the Solution has no cover image, and always `null` for org-scoped rows — the permanent URL is minted for system-scope (catalog) Solutions only. - pub image_url: Option, + pub image_url: Option>, /// Resource type. Always `"Solution"`. pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise. - pub latest_solution: Option, + pub latest_solution: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise. - pub latest_version: Option, + pub latest_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata declared in the Solution body (e.g. category or display hints). Present as an empty object when the body declares none. pub metadata: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-facing display name declared in the Solution body. `null` when the Solution body does not set one. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. The `url` is a stable, non-expiring capability URL (`refresh_url` is `null` — there is nothing to refresh). `null` when `org_slug` is `null` or the org has no logo. - pub org_logo: Option, + pub org_logo: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve. - pub org_slug: Option, + pub org_slug: Option>, /// Owner scopes this Solution appears under. Members: `"system"` (app-level system scope) and/or `"org"` (viewer's org scope). pub owners: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`. - pub readme_url: Option, + pub readme_url: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Absolute URLs of the Solution's gallery screenshots — the bundled assets the body's `screenshots:` field names, in declared order. Each is a stable, non-expiring capability URL with the same cacheability contract as `image_url` (one shared token, a `v` cache key, and a `file` param selecting the screenshot); a URL 404s if the Solution stops declaring its screenshot. An empty array when the Solution declares none, and always empty for org-scoped rows — the permanent URLs are minted for system-scope (catalog) Solutions only. pub screenshot_urls: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it. - pub solution_id: Option, + pub solution_id: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Semver string declared in the Solution body (e.g. `"1.2.0"`). `null` when the body does not declare a version. - pub solution_version: Option, + pub solution_version: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Freeform tag keys declared in the Solution body. An empty array when the body declares none. pub tag_keys: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Wrapped template kind — `"AgentTemplate"`, `"AutomationTemplate"`, `"AgentRoutineTemplate"`, `"AgentToolTemplate"`, `"AgentComputerTemplate"`, or `"SolutionTemplateRef"` for ref-mode bundles. - pub template_kind: Option, + pub template_kind: Option>, /// Template configs bundled by this Solution, in declaration order — the first entry is the deployable template the Solution wraps; the rest are sibling templates the wrapped template references. pub templates: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the Solution config was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, /// `true` when this Solution is installed at the viewer's org scope and the app-level system scope carries a higher `solution_version`. Always `false` for system-only rows. pub upgrade_available: bool, #[serde(default, skip_serializing_if = "Option::is_none")] /// The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -13170,26 +13606,26 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Description of the template from the config body. `null` if the current version has no `description` field. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable display name from the config body. `null` if the current version has no `display_name` field. - pub display_name: Option, + pub display_name: Option>, /// Template config ID (`cfg_...`). pub id: String, /// Config kind identifier for this template (e.g. `"agent_tool_template"`). pub kind: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable lookup key assigned to this template config. `null` if no lookup key is set. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Template name as stored in the config body. `null` if the current version has no `name` field. - pub name: Option, + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this template config was last modified (ISO 8601). pub updated_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Virtual filesystem path for this template config. `null` if not set. - pub virtual_path: Option, + pub virtual_path: Option>, } /// Generated from the ArchAstro OpenAPI contract. @@ -13209,33 +13645,33 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItemSource pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Access control list for the agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied and the agent is accessible to all members of its scope. - pub acl: Option, + pub acl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the application that owns this agent (`dap_...`). pub app: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `"claude-3-7-sonnet-latest"`). - pub default_model: Option, + pub default_model: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable description of what the agent does. `null` if not set. - pub description: Option, + pub description: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Email address provisioned for this agent. `null` if email delivery is not configured. - pub email: Option, + pub email: Option>, /// Agent ID (`agi_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// System-level identity prompt that shapes the agent's persona and behavior. - pub identity: Option, + pub identity: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents. - pub last_applied_template_config: Option, + pub last_applied_template_config: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Stable, user-defined identifier for this agent within the application. Unique per app. - pub lookup_key: Option, + pub lookup_key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the agent. Not interpreted by the platform. pub metadata: Option>, @@ -13244,43 +13680,44 @@ pub struct GetApiV1UsersUserThreadsResponseDataItemParticipatingAgentsItem { pub name: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded. - pub org_name: Option, + pub org_name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name). - pub originator: Option, + pub originator: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Phone number provisioned for this agent. `null` if SMS is not configured. - pub phone_number: Option, + pub phone_number: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Source Solution and AgentTemplate summary for agents provisioned from a Solution. Includes `upgrade_available`, `latest_version`, and `latest_solution` so you can render an upgrade badge without a separate dry-run call. `null` for hand-built agents and agents whose tracked template or parent Solution has been deleted. Populated only on single-agent GET responses, never on list endpoints. - pub source_solution: + pub source_solution: Option< Option, + >, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// True when the agent's last-applied template version is behind the current version of its AgentTemplate config — i.e. reapplying the template (a per-agent upgrade) would bring it newer Solution content. Self-clears once the agent is reapplied. Computed on both the list endpoints and single-agent GET. Distinct from `source_solution.upgrade_available`, which compares Solution *versions*: an agent can lag its template (`template_upgrade_available: true`) while the org already holds the latest Solution version (`upgrade_available: false`). - pub template_upgrade_available: Option, + pub template_upgrade_available: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the agent was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped. - pub user: Option, + pub user: Option>, } /// Generated from the ArchAstro OpenAPI contract. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetApiV1UsersUserThreadsResponseDataItemSettings { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. - pub agent_enabled: Option, + /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting. + pub agent_enabled: Option>, } /// Contract-defined alternatives for GetApiV1UsersUserThreadsResponseDataItemCreator. @@ -13312,16 +13749,16 @@ pub enum GetApiV1UsersUserThreadsResponseDataItemVisibility { pub struct GetApiV1UsersUserThreadsResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads. - pub agent_user: Option, + pub agent_user: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the thread was created (ISO 8601). - pub created_at: Option>, + pub created_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// User who created this thread. Returns a user ID (`usr_...`) by default, or an expanded user object when the association is loaded. `null` if the creator is unknown. - pub creator: Option, + pub creator: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Optional description or purpose statement for the thread. `null` if not set. - pub description: Option, + pub description: Option>, /// Thread ID (`thr_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -13338,31 +13775,31 @@ pub struct GetApiV1UsersUserThreadsResponseDataItem { pub is_unlisted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set. - pub key: Option, + pub key: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Thread subtype: `"standard"` for ordinary threads, `"slack_mirror"` for the membership-strict mirror of a Slack channel, `"slashwork_mirror"` for the membership-strict mirror of a Slashwork group. Read-only — derived server-side at creation, never accepted from params. - pub kind: Option, + /// Thread subtype: `"standard"` for ordinary threads, `"personal"` for a user-and-owned-agents roster, `"slack_mirror"` for the membership-strict mirror of a Slack channel, or `"slashwork_mirror"` for the membership-strict mirror of a Slashwork group. `personal` is an explicit user-thread creation option; mirror kinds are server-derived. + pub kind: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the most recent message was posted in this thread, falling back to the thread's creation time if it has no messages. Always populated on thread list endpoints (which order by it, after default threads); `null` on endpoints that don't compute activity enrichment. - pub last_activity: Option>, + pub last_activity: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Single-line snippet of the most recent message's text content (first non-empty line, truncated to 140 characters). Populated on thread list endpoints alongside `last_activity`; `null` when the thread has no messages, the latest message has no text content (e.g. attachment-only), or the endpoint doesn't compute activity enrichment. - pub last_message_preview: Option, + pub last_message_preview: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Display name of the sender of the most recent message — the same message `last_message_preview` snippets. Populated on thread list endpoints; `null` when the thread has no messages or the endpoint doesn't compute activity enrichment. - pub last_message_sender: Option, + pub last_message_sender: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Arbitrary key-value metadata attached to the thread. Shape is application-defined; `null` if no metadata has been set. - pub metadata: Option>, + pub metadata: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Whether the authenticated user has muted notifications for this thread. `true` suppresses all notification delivery. pub muted: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context. - pub org: Option, + pub org: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The message that spawned this thread as a sub-thread. `null` for top-level threads. - pub parent_message: Option, + pub parent_message: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Array of participant user IDs (`usr_...`) who are members of this thread. pub participant: Option>, @@ -13375,43 +13812,43 @@ pub struct GetApiV1UsersUserThreadsResponseDataItem { #[serde(default, skip_serializing_if = "Option::is_none")] /// Expanded agent objects for all agents participating in this thread. Present only when agent enrichment is requested. pub participating_agents: - Option>, + Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// The authenticated user's membership role in this thread, e.g. `"owner"`, `"member"`, or `"viewer"`. `null` if the user is not a member. - pub role: Option, + pub role: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the developer sandbox this thread is scoped to (`dsb_...`). `null` for production threads. - pub sandbox: Option, + pub sandbox: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Per-thread configuration settings controlling AI agent behavior for this thread. pub settings: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned. - pub slug: Option, + pub slug: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Threads that are nested under this thread as replies to a parent message. Present only when sub-thread enrichment is requested. - pub sub_threads: Option>>, + pub sub_threads: Option>>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Status tags on the thread (e.g. `"blocked"`, `"needs-review"`). Edited by any thread participant via the `/threads/:thread/tags` endpoints and filterable on the thread list endpoints. Empty array if none set. pub tags: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads. - pub team: Option, + pub team: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Human-readable name of the thread. `null` if no title has been set. - pub title: Option, + pub title: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire. - pub ttl: Option, + /// Offset-free expiry timestamp after which the thread may be automatically cleaned up. `null` if the thread does not expire. + pub ttl: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested. - pub unread_count: Option, + pub unread_count: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When the thread was last modified (ISO 8601). - pub updated_at: Option>, + pub updated_at: Option, #[serde(default, skip_serializing_if = "Option::is_none")] /// ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads. - pub user: Option, + pub user: Option>, /// Who can read the thread: `team` for every owning-team member, `restricted` for team-readable threads with an explicit roster, or `private` for roster-only access. pub visibility: GetApiV1UsersUserThreadsResponseDataItemVisibility, } @@ -13462,8 +13899,16 @@ pub struct PostApiV1UsersUserThreadsInputThreadProfilePicture { #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct PostApiV1UsersUserThreadsInputThreadSettings { #[serde(default, skip_serializing_if = "Option::is_none")] - /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. - pub agent_enabled: Option, + /// Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured. `null` when a client explicitly cleared the setting. + pub agent_enabled: Option>, +} + +/// Contract-defined values for PostApiV1UsersUserThreadsInputThreadKind. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum PostApiV1UsersUserThreadsInputThreadKind { + /// The personal wire value. + #[serde(rename = "personal")] + Personal, } /// Contract-defined values for PostApiV1UsersUserThreadsInputThreadVisibility. @@ -13496,6 +13941,9 @@ pub struct PostApiV1UsersUserThreadsInputThread { /// Client-assigned unique key for idempotent creation or later lookup. Must be unique within the owning organization. pub key: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Optional behavioral subtype. `personal` is accepted only for a user-owned thread and limits membership to that user and agents currently owned by them. Mirror kinds remain server-derived and cannot be selected by callers. + pub kind: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] /// Users and agents to add atomically when the thread is created. Each target must pass the same authorization rules as a post-creation member add. Slack mirror threads reject non-empty caller-supplied rosters because their membership is sync-owned. pub members: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] @@ -13547,22 +13995,37 @@ pub struct GetApiV1UsersUserTokensResponseDataItem { /// When this token was created (ISO 8601). pub created_at: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] + /// Agent user that minted this token (`usr_...`). `null` unless an agent minted it. + pub created_by_agent_user: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Developer account that minted this token (`dva_...`). `null` unless minted with a developer token. + pub created_by_developer: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Org of the principal that minted this token (`org_...`). `null` on legacy rows. + pub created_by_org: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// Team that minted this token (`tem_...`). `null` unless minted as a team. + pub created_by_team: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + /// User who minted this token (`usr_...`). Distinct from the token subject. `null` on legacy rows. + pub created_by_user: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] /// When the token expires. `null` on legacy rows that predate stored expiry. - pub expires_at: Option>, + pub expires_at: Option>>, /// Token ID (`sat_...`). pub id: String, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this token was last used to authenticate a request. `null` if the token has never been used. - pub last_used_at: Option>, + pub last_used_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] - /// Human-readable label assigned to this token at creation time. - pub name: Option, + /// Human-readable label assigned to this token at creation time. `null` when no label was supplied. + pub name: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// When this token was revoked. `null` if the token is still active. - pub revoked_at: Option>, + pub revoked_at: Option>>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Space-separated OAuth scopes stamped on the token. `null` on legacy rows; treat as `full_access`. - pub scopes: Option, + pub scopes: Option>, #[serde(default, skip_serializing_if = "Option::is_none")] /// Raw bearer token string. Present only in the response to the create request; never returned again after that. pub token: Option, @@ -14377,6 +14840,18 @@ impl V1 { client: self.client.clone(), } } + /// Access the event_subscription_deliveries resource. + pub fn event_subscription_deliveries(&self) -> EventSubscriptionDeliveriesResource { + EventSubscriptionDeliveriesResource { + client: self.client.clone(), + } + } + /// Access the event_subscriptions resource. + pub fn event_subscriptions(&self) -> EventSubscriptionsResource { + EventSubscriptionsResource { + client: self.client.clone(), + } + } /// Access the extractions resource. pub fn extractions(&self) -> ExtractionsResource { ExtractionsResource { @@ -16804,6 +17279,186 @@ impl CustomObjectsResource { } } +/// event_subscription_deliveries API resource. +#[derive(Clone)] +pub struct EventSubscriptionDeliveriesResource { + client: Client, +} + +impl EventSubscriptionDeliveriesResource { + /// Acknowledge a claimed event + pub async fn acknowledge( + &self, + delivery: &str, + body: &PostApiV1EventSubscriptionDeliveriesDeliveryAcknowledgeInput, + ) -> Result<()> { + let mut path = "/api/v1/event_subscription_deliveries/{delivery}/acknowledge".to_owned(); + path = path.replace("{delivery}", &crate::encode_path(delivery)); + let request = self.client.request(Method::POST, &path); + let request = request.json(body)?; + request.send_empty().await + } + /// Blocking variant of [Self::acknowledge]. + #[cfg(feature = "blocking")] + pub fn acknowledge_blocking( + &self, + delivery: &str, + body: &PostApiV1EventSubscriptionDeliveriesDeliveryAcknowledgeInput, + ) -> Result<()> { + crate::blocking::block_on(self.acknowledge(delivery, body)) + } +} + +/// event_subscriptions API resource. +#[derive(Clone)] +pub struct EventSubscriptionsResource { + client: Client, +} + +impl EventSubscriptionsResource { + /// List domain-event subscriptions + pub async fn list( + &self, + params: Option<&GetApiV1EventSubscriptionsParams>, + ) -> Result { + let path = "/api/v1/event_subscriptions".to_owned(); + let request = self.client.request(Method::GET, &path); + let request = match params { + Some(value) => request.query(value)?, + None => request, + }; + request.send().await + } + /// Blocking variant of [Self::list]. + #[cfg(feature = "blocking")] + pub fn list_blocking( + &self, + params: Option<&GetApiV1EventSubscriptionsParams>, + ) -> Result { + crate::blocking::block_on(self.list(params)) + } + /// Create a domain-event subscription + pub async fn create( + &self, + body: &PostApiV1EventSubscriptionsInput, + ) -> Result { + let path = "/api/v1/event_subscriptions".to_owned(); + let request = self.client.request(Method::POST, &path); + let request = request.json(body)?; + request.send().await + } + /// Blocking variant of [Self::create]. + #[cfg(feature = "blocking")] + pub fn create_blocking( + &self, + body: &PostApiV1EventSubscriptionsInput, + ) -> Result { + crate::blocking::block_on(self.create(body)) + } + /// Delete a domain-event subscription + pub async fn delete(&self, subscription: &str) -> Result<()> { + let mut path = "/api/v1/event_subscriptions/{subscription}".to_owned(); + path = path.replace("{subscription}", &crate::encode_path(subscription)); + let request = self.client.request(Method::DELETE, &path); + request.send_empty().await + } + /// Blocking variant of [Self::delete]. + #[cfg(feature = "blocking")] + pub fn delete_blocking(&self, subscription: &str) -> Result<()> { + crate::blocking::block_on(self.delete(subscription)) + } + /// Get a domain-event subscription + pub async fn get(&self, subscription: &str) -> Result { + let mut path = "/api/v1/event_subscriptions/{subscription}".to_owned(); + path = path.replace("{subscription}", &crate::encode_path(subscription)); + let request = self.client.request(Method::GET, &path); + request.send().await + } + /// Blocking variant of [Self::get]. + #[cfg(feature = "blocking")] + pub fn get_blocking(&self, subscription: &str) -> Result { + crate::blocking::block_on(self.get(subscription)) + } + /// Update a domain-event subscription + pub async fn update( + &self, + subscription: &str, + body: &PatchApiV1EventSubscriptionsSubscriptionInput, + ) -> Result { + let mut path = "/api/v1/event_subscriptions/{subscription}".to_owned(); + path = path.replace("{subscription}", &crate::encode_path(subscription)); + let request = self.client.request(Method::PATCH, &path); + let request = request.json(body)?; + request.send().await + } + /// Blocking variant of [Self::update]. + #[cfg(feature = "blocking")] + pub fn update_blocking( + &self, + subscription: &str, + body: &PatchApiV1EventSubscriptionsSubscriptionInput, + ) -> Result { + crate::blocking::block_on(self.update(subscription, body)) + } + /// Claim events from a subscription + pub async fn claim( + &self, + subscription: &str, + body: &PostApiV1EventSubscriptionsSubscriptionClaimInput, + ) -> Result { + let mut path = "/api/v1/event_subscriptions/{subscription}/claim".to_owned(); + path = path.replace("{subscription}", &crate::encode_path(subscription)); + let request = self.client.request(Method::POST, &path); + let request = request.json(body)?; + request.send().await + } + /// Blocking variant of [Self::claim]. + #[cfg(feature = "blocking")] + pub fn claim_blocking( + &self, + subscription: &str, + body: &PostApiV1EventSubscriptionsSubscriptionClaimInput, + ) -> Result { + crate::blocking::block_on(self.claim(subscription, body)) + } + /// Peek at the head of a subscription queue + pub async fn head(&self, subscription: &str) -> Result { + let mut path = "/api/v1/event_subscriptions/{subscription}/head".to_owned(); + path = path.replace("{subscription}", &crate::encode_path(subscription)); + let request = self.client.request(Method::GET, &path); + request.send().await + } + /// Blocking variant of [Self::head]. + #[cfg(feature = "blocking")] + pub fn head_blocking(&self, subscription: &str) -> Result { + crate::blocking::block_on(self.head(subscription)) + } + /// Read a subscription queue + pub async fn queue( + &self, + subscription: &str, + params: Option<&GetApiV1EventSubscriptionsSubscriptionQueueParams>, + ) -> Result { + let mut path = "/api/v1/event_subscriptions/{subscription}/queue".to_owned(); + path = path.replace("{subscription}", &crate::encode_path(subscription)); + let request = self.client.request(Method::GET, &path); + let request = match params { + Some(value) => request.query(value)?, + None => request, + }; + request.send().await + } + /// Blocking variant of [Self::queue]. + #[cfg(feature = "blocking")] + pub fn queue_blocking( + &self, + subscription: &str, + params: Option<&GetApiV1EventSubscriptionsSubscriptionQueueParams>, + ) -> Result { + crate::blocking::block_on(self.queue(subscription, params)) + } +} + /// extractions API resource. #[derive(Clone)] pub struct ExtractionsResource { @@ -17520,7 +18175,7 @@ pub struct PrivateServiceDefinitionsResource { impl PrivateServiceDefinitionsResource { /// Download an enrolled private service definition - pub async fn get(&self, app_id: &str, private_service_id: &str) -> Result { + pub async fn get(&self, app_id: &str, private_service_id: &str) -> Result { let mut path = "/api/v1/private_service_definitions/{app_id}/{private_service_id}".to_owned(); path = path.replace("{app_id}", &crate::encode_path(app_id)); @@ -17529,11 +18184,15 @@ impl PrivateServiceDefinitionsResource { &crate::encode_path(private_service_id), ); let request = self.client.request(Method::GET, &path); - request.send().await + request.send_raw().await } /// Blocking variant of [Self::get]. #[cfg(feature = "blocking")] - pub fn get_blocking(&self, app_id: &str, private_service_id: &str) -> Result { + pub fn get_blocking( + &self, + app_id: &str, + private_service_id: &str, + ) -> Result { crate::blocking::block_on(self.get(app_id, private_service_id)) } } @@ -18128,6 +18787,24 @@ impl SolutionsResource { ) -> Result { crate::blocking::block_on(self.readme(solution, params)) } + /// Reconcile Customer Management product knowledge + pub async fn reconcile_product_knowledge( + &self, + solution: &str, + ) -> Result { + let mut path = "/api/v1/solutions/{solution}/reconcile_product_knowledge".to_owned(); + path = path.replace("{solution}", &crate::encode_path(solution)); + let request = self.client.request(Method::POST, &path); + request.send().await + } + /// Blocking variant of [Self::reconcile_product_knowledge]. + #[cfg(feature = "blocking")] + pub fn reconcile_product_knowledge_blocking( + &self, + solution: &str, + ) -> Result { + crate::blocking::block_on(self.reconcile_product_knowledge(solution)) + } /// Upgrade an installed Solution pub async fn upgrade( &self, @@ -18508,7 +19185,7 @@ impl TasksLeaseResource { crate::blocking::block_on(self.remove()) } /// Retrieve a task's current session lease - pub async fn list(&self) -> Result { + pub async fn list(&self) -> Result> { let mut path = "/api/v1/tasks/{task}/lease".to_owned(); path = path.replace("{task}", &crate::encode_path(self.task.as_str())); let request = self.client.request(Method::GET, &path); @@ -18516,7 +19193,7 @@ impl TasksLeaseResource { } /// Blocking variant of [Self::list]. #[cfg(feature = "blocking")] - pub fn list_blocking(&self) -> Result { + pub fn list_blocking(&self) -> Result> { crate::blocking::block_on(self.list()) } /// Claim a task for a coding session @@ -19681,15 +20358,15 @@ impl TrajectoriesResource { crate::blocking::block_on(self.get(trajectory)) } /// Retrieve raw trajectory contents - pub async fn contents(&self, trajectory: &str) -> Result { + pub async fn contents(&self, trajectory: &str) -> Result { let mut path = "/api/v1/trajectories/{trajectory}/contents".to_owned(); path = path.replace("{trajectory}", &crate::encode_path(trajectory)); let request = self.client.request(Method::GET, &path); - request.send().await + request.send_raw().await } /// Blocking variant of [Self::contents]. #[cfg(feature = "blocking")] - pub fn contents_blocking(&self, trajectory: &str) -> Result { + pub fn contents_blocking(&self, trajectory: &str) -> Result { crate::blocking::block_on(self.contents(trajectory)) } } diff --git a/tests/generated_rest_contract.rs b/tests/generated_rest_contract.rs index 5917a5f..9fd577b 100644 --- a/tests/generated_rest_contract.rs +++ b/tests/generated_rest_contract.rs @@ -1,6 +1,6 @@ // Copyright (c) 2026 ArchAstro Inc. Licensed under the MIT License. // This file is auto-generated by @archastro/sdk-generator. Do not edit. -// Content hash: 130a6f14b29f +// Content hash: 879a9f183ba8 //! Generated REST contract tests. mod support; @@ -3836,7 +3836,7 @@ async fn post_api_v1_agents_agent_search_error_422() { #[ignore = "requires Prism contract server"] async fn post_api_v1_agents_agent_threads_success() { let client = support::rest_client(None).await; - let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let result = client.v1().agents().threads("test-id", &body).await; assert!( result.is_ok(), @@ -3850,7 +3850,7 @@ async fn post_api_v1_agents_agent_threads_success() { #[ignore = "requires Prism contract server"] async fn post_api_v1_agents_agent_threads_error_401() { let client = support::rest_client(Some(401)).await; - let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .agents() @@ -3864,7 +3864,7 @@ async fn post_api_v1_agents_agent_threads_error_401() { #[ignore = "requires Prism contract server"] async fn post_api_v1_agents_agent_threads_error_403() { let client = support::rest_client(Some(403)).await; - let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .agents() @@ -3878,7 +3878,7 @@ async fn post_api_v1_agents_agent_threads_error_403() { #[ignore = "requires Prism contract server"] async fn post_api_v1_agents_agent_threads_error_404() { let client = support::rest_client(Some(404)).await; - let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .agents() @@ -3892,7 +3892,7 @@ async fn post_api_v1_agents_agent_threads_error_404() { #[ignore = "requires Prism contract server"] async fn post_api_v1_agents_agent_threads_error_422() { let client = support::rest_client(Some(422)).await; - let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1AgentsAgentThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .agents() @@ -7416,6 +7416,472 @@ async fn put_api_v1_custom_objects_object_error_422() { support::assert_api_error(error, 422); } +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscription_deliveries_delivery_acknowledge_success() { + let client = support::rest_client(None).await; + let body: PostApiV1EventSubscriptionDeliveriesDeliveryAcknowledgeInput = + serde_json::from_str(r#"{"receipt_handle":"string"}"#).expect("valid generated body"); + let result = client + .v1() + .event_subscription_deliveries() + .acknowledge("test-value", &body) + .await; + assert!( + result.is_ok(), + "{}: {:?}", + "POST /api/v1/event_subscription_deliveries/{delivery}/acknowledge", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscription_deliveries_delivery_acknowledge_error_401() { + let client = support::rest_client(Some(401)).await; + let body: PostApiV1EventSubscriptionDeliveriesDeliveryAcknowledgeInput = + serde_json::from_str(r#"{"receipt_handle":"string"}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscription_deliveries() + .acknowledge("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscription_deliveries_delivery_acknowledge_error_404() { + let client = support::rest_client(Some(404)).await; + let body: PostApiV1EventSubscriptionDeliveriesDeliveryAcknowledgeInput = + serde_json::from_str(r#"{"receipt_handle":"string"}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscription_deliveries() + .acknowledge("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 404); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscription_deliveries_delivery_acknowledge_error_409() { + let client = support::rest_client(Some(409)).await; + let body: PostApiV1EventSubscriptionDeliveriesDeliveryAcknowledgeInput = + serde_json::from_str(r#"{"receipt_handle":"string"}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscription_deliveries() + .acknowledge("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 409); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_success() { + let client = support::rest_client(None).await; + let params: GetApiV1EventSubscriptionsParams = + serde_json::from_str(r#"{}"#).expect("valid generated params"); + let result = client.v1().event_subscriptions().list(Some(¶ms)).await; + assert!( + result.is_ok(), + "{}: {:?}", + "GET /api/v1/event_subscriptions", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_error_401() { + let client = support::rest_client(Some(401)).await; + let params: GetApiV1EventSubscriptionsParams = + serde_json::from_str(r#"{}"#).expect("valid generated params"); + let error = client + .v1() + .event_subscriptions() + .list(Some(¶ms)) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_error_422() { + let client = support::rest_client(Some(422)).await; + let params: GetApiV1EventSubscriptionsParams = + serde_json::from_str(r#"{}"#).expect("valid generated params"); + let error = client + .v1() + .event_subscriptions() + .list(Some(¶ms)) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 422); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscriptions_success() { + let client = support::rest_client(None).await; + let body: PostApiV1EventSubscriptionsInput = + serde_json::from_str(r#"{"event_names":["Example Name"],"name":"Example Name"}"#) + .expect("valid generated body"); + let result = client.v1().event_subscriptions().create(&body).await; + assert!( + result.is_ok(), + "{}: {:?}", + "POST /api/v1/event_subscriptions", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscriptions_error_401() { + let client = support::rest_client(Some(401)).await; + let body: PostApiV1EventSubscriptionsInput = + serde_json::from_str(r#"{"event_names":["Example Name"],"name":"Example Name"}"#) + .expect("valid generated body"); + let error = client + .v1() + .event_subscriptions() + .create(&body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscriptions_error_422() { + let client = support::rest_client(Some(422)).await; + let body: PostApiV1EventSubscriptionsInput = + serde_json::from_str(r#"{"event_names":["Example Name"],"name":"Example Name"}"#) + .expect("valid generated body"); + let error = client + .v1() + .event_subscriptions() + .create(&body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 422); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn delete_api_v1_event_subscriptions_subscription_success() { + let client = support::rest_client(None).await; + let result = client.v1().event_subscriptions().delete("test-value").await; + assert!( + result.is_ok(), + "{}: {:?}", + "DELETE /api/v1/event_subscriptions/{subscription}", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn delete_api_v1_event_subscriptions_subscription_error_401() { + let client = support::rest_client(Some(401)).await; + let error = client + .v1() + .event_subscriptions() + .delete("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn delete_api_v1_event_subscriptions_subscription_error_404() { + let client = support::rest_client(Some(404)).await; + let error = client + .v1() + .event_subscriptions() + .delete("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 404); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_success() { + let client = support::rest_client(None).await; + let result = client.v1().event_subscriptions().get("test-value").await; + assert!( + result.is_ok(), + "{}: {:?}", + "GET /api/v1/event_subscriptions/{subscription}", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_error_401() { + let client = support::rest_client(Some(401)).await; + let error = client + .v1() + .event_subscriptions() + .get("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_error_404() { + let client = support::rest_client(Some(404)).await; + let error = client + .v1() + .event_subscriptions() + .get("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 404); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn patch_api_v1_event_subscriptions_subscription_success() { + let client = support::rest_client(None).await; + let body: PatchApiV1EventSubscriptionsSubscriptionInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let result = client + .v1() + .event_subscriptions() + .update("test-value", &body) + .await; + assert!( + result.is_ok(), + "{}: {:?}", + "PATCH /api/v1/event_subscriptions/{subscription}", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn patch_api_v1_event_subscriptions_subscription_error_401() { + let client = support::rest_client(Some(401)).await; + let body: PatchApiV1EventSubscriptionsSubscriptionInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscriptions() + .update("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn patch_api_v1_event_subscriptions_subscription_error_404() { + let client = support::rest_client(Some(404)).await; + let body: PatchApiV1EventSubscriptionsSubscriptionInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscriptions() + .update("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 404); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn patch_api_v1_event_subscriptions_subscription_error_422() { + let client = support::rest_client(Some(422)).await; + let body: PatchApiV1EventSubscriptionsSubscriptionInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscriptions() + .update("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 422); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscriptions_subscription_claim_success() { + let client = support::rest_client(None).await; + let body: PostApiV1EventSubscriptionsSubscriptionClaimInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let result = client + .v1() + .event_subscriptions() + .claim("test-value", &body) + .await; + assert!( + result.is_ok(), + "{}: {:?}", + "POST /api/v1/event_subscriptions/{subscription}/claim", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscriptions_subscription_claim_error_401() { + let client = support::rest_client(Some(401)).await; + let body: PostApiV1EventSubscriptionsSubscriptionClaimInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscriptions() + .claim("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscriptions_subscription_claim_error_404() { + let client = support::rest_client(Some(404)).await; + let body: PostApiV1EventSubscriptionsSubscriptionClaimInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscriptions() + .claim("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 404); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_event_subscriptions_subscription_claim_error_422() { + let client = support::rest_client(Some(422)).await; + let body: PostApiV1EventSubscriptionsSubscriptionClaimInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let error = client + .v1() + .event_subscriptions() + .claim("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 422); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_head_success() { + let client = support::rest_client(None).await; + let result = client.v1().event_subscriptions().head("test-value").await; + assert!( + result.is_ok(), + "{}: {:?}", + "GET /api/v1/event_subscriptions/{subscription}/head", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_head_error_401() { + let client = support::rest_client(Some(401)).await; + let error = client + .v1() + .event_subscriptions() + .head("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_head_error_404() { + let client = support::rest_client(Some(404)).await; + let error = client + .v1() + .event_subscriptions() + .head("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 404); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_queue_success() { + let client = support::rest_client(None).await; + let params: GetApiV1EventSubscriptionsSubscriptionQueueParams = + serde_json::from_str(r#"{}"#).expect("valid generated params"); + let result = client + .v1() + .event_subscriptions() + .queue("test-value", Some(¶ms)) + .await; + assert!( + result.is_ok(), + "{}: {:?}", + "GET /api/v1/event_subscriptions/{subscription}/queue", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_queue_error_400() { + let client = support::rest_client(Some(400)).await; + let params: GetApiV1EventSubscriptionsSubscriptionQueueParams = + serde_json::from_str(r#"{}"#).expect("valid generated params"); + let error = client + .v1() + .event_subscriptions() + .queue("test-value", Some(¶ms)) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 400); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_queue_error_401() { + let client = support::rest_client(Some(401)).await; + let params: GetApiV1EventSubscriptionsSubscriptionQueueParams = + serde_json::from_str(r#"{}"#).expect("valid generated params"); + let error = client + .v1() + .event_subscriptions() + .queue("test-value", Some(¶ms)) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_event_subscriptions_subscription_queue_error_404() { + let client = support::rest_client(Some(404)).await; + let params: GetApiV1EventSubscriptionsSubscriptionQueueParams = + serde_json::from_str(r#"{}"#).expect("valid generated params"); + let error = client + .v1() + .event_subscriptions() + .queue("test-value", Some(¶ms)) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 404); +} + #[tokio::test] #[ignore = "requires Prism contract server"] async fn post_api_v1_extractions_success() { @@ -8375,6 +8841,21 @@ async fn post_api_v1_knowledge_sources_error_422() { support::assert_api_error(error, 422); } +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_knowledge_sources_error_502() { + let client = support::rest_client(Some(502)).await; + let body: PostApiV1KnowledgeSourcesInput = + serde_json::from_str(r#"{"type":"string"}"#).expect("valid generated body"); + let error = client + .v1() + .knowledge_sources() + .create(&body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 502); +} + #[tokio::test] #[ignore = "requires Prism contract server"] async fn delete_api_v1_knowledge_sources_source_success() { @@ -8558,6 +9039,21 @@ async fn patch_api_v1_knowledge_sources_source_error_422() { support::assert_api_error(error, 422); } +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn patch_api_v1_knowledge_sources_source_error_502() { + let client = support::rest_client(Some(502)).await; + let body: PatchApiV1KnowledgeSourcesSourceInput = + serde_json::from_str(r#"{}"#).expect("valid generated body"); + let error = client + .v1() + .knowledge_sources() + .update("test-value", &body) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 502); +} + #[tokio::test] #[ignore = "requires Prism contract server"] async fn post_api_v1_knowledge_sources_source_ingest_success() { @@ -11704,6 +12200,88 @@ async fn get_api_v1_solutions_solution_readme_error_404() { support::assert_api_error(error, 404); } +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_solutions_solution_reconcile_product_knowledge_success() { + let client = support::rest_client(None).await; + let result = client + .v1() + .solutions() + .reconcile_product_knowledge("test-value") + .await; + assert!( + result.is_ok(), + "{}: {:?}", + "POST /api/v1/solutions/{solution}/reconcile_product_knowledge", + result.err() + ); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_solutions_solution_reconcile_product_knowledge_error_400() { + let client = support::rest_client(Some(400)).await; + let error = client + .v1() + .solutions() + .reconcile_product_knowledge("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 400); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_solutions_solution_reconcile_product_knowledge_error_401() { + let client = support::rest_client(Some(401)).await; + let error = client + .v1() + .solutions() + .reconcile_product_knowledge("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 401); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_solutions_solution_reconcile_product_knowledge_error_403() { + let client = support::rest_client(Some(403)).await; + let error = client + .v1() + .solutions() + .reconcile_product_knowledge("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 403); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_solutions_solution_reconcile_product_knowledge_error_404() { + let client = support::rest_client(Some(404)).await; + let error = client + .v1() + .solutions() + .reconcile_product_knowledge("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 404); +} + +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn post_api_v1_solutions_solution_reconcile_product_knowledge_error_502() { + let client = support::rest_client(Some(502)).await; + let error = client + .v1() + .solutions() + .reconcile_product_knowledge("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 502); +} + #[tokio::test] #[ignore = "requires Prism contract server"] async fn post_api_v1_solutions_solution_upgrade_success() { @@ -13306,6 +13884,19 @@ async fn delete_api_v1_team_memberships_team_membership_error_401() { support::assert_api_error(error, 401); } +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn delete_api_v1_team_memberships_team_membership_error_403() { + let client = support::rest_client(Some(403)).await; + let error = client + .v1() + .team_memberships() + .delete("test-value") + .await + .expect_err("expected API error"); + support::assert_api_error(error, 403); +} + #[tokio::test] #[ignore = "requires Prism contract server"] async fn delete_api_v1_team_memberships_team_membership_error_404() { @@ -14492,7 +15083,7 @@ async fn get_api_v1_teams_team_tasks_error_422() { #[ignore = "requires Prism contract server"] async fn post_api_v1_teams_team_tasks_success() { let client = support::rest_client(None).await; - let body: PostApiV1TeamsTeamTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); + let body: PostApiV1TeamsTeamTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","epic":"billing-cadence","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"source_id":"ArchAstro/firstlanding","source_scope":"github.com","source_type":"repository","status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); let result = client.v1().teams().tasks("test-id").create(&body).await; assert!( result.is_ok(), @@ -14506,7 +15097,7 @@ async fn post_api_v1_teams_team_tasks_success() { #[ignore = "requires Prism contract server"] async fn post_api_v1_teams_team_tasks_error_401() { let client = support::rest_client(Some(401)).await; - let body: PostApiV1TeamsTeamTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); + let body: PostApiV1TeamsTeamTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","epic":"billing-cadence","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"source_id":"ArchAstro/firstlanding","source_scope":"github.com","source_type":"repository","status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); let error = client .v1() .teams() @@ -14521,7 +15112,7 @@ async fn post_api_v1_teams_team_tasks_error_401() { #[ignore = "requires Prism contract server"] async fn post_api_v1_teams_team_tasks_error_404() { let client = support::rest_client(Some(404)).await; - let body: PostApiV1TeamsTeamTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); + let body: PostApiV1TeamsTeamTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","epic":"billing-cadence","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"source_id":"ArchAstro/firstlanding","source_scope":"github.com","source_type":"repository","status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); let error = client .v1() .teams() @@ -14536,7 +15127,7 @@ async fn post_api_v1_teams_team_tasks_error_404() { #[ignore = "requires Prism contract server"] async fn post_api_v1_teams_team_tasks_error_422() { let client = support::rest_client(Some(422)).await; - let body: PostApiV1TeamsTeamTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); + let body: PostApiV1TeamsTeamTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","epic":"billing-cadence","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"source_id":"ArchAstro/firstlanding","source_scope":"github.com","source_type":"repository","status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); let error = client .v1() .teams() @@ -14875,7 +15466,7 @@ async fn get_api_v1_teams_team_threads_error_404() { #[ignore = "requires Prism contract server"] async fn post_api_v1_teams_team_threads_success() { let client = support::rest_client(None).await; - let body: PostApiV1TeamsTeamThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1TeamsTeamThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let result = client.v1().teams().threads("test-id").create(&body).await; assert!( result.is_ok(), @@ -14889,7 +15480,7 @@ async fn post_api_v1_teams_team_threads_success() { #[ignore = "requires Prism contract server"] async fn post_api_v1_teams_team_threads_error_401() { let client = support::rest_client(Some(401)).await; - let body: PostApiV1TeamsTeamThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1TeamsTeamThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .teams() @@ -14904,7 +15495,7 @@ async fn post_api_v1_teams_team_threads_error_401() { #[ignore = "requires Prism contract server"] async fn post_api_v1_teams_team_threads_error_404() { let client = support::rest_client(Some(404)).await; - let body: PostApiV1TeamsTeamThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1TeamsTeamThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .teams() @@ -14919,7 +15510,7 @@ async fn post_api_v1_teams_team_threads_error_404() { #[ignore = "requires Prism contract server"] async fn post_api_v1_teams_team_threads_error_422() { let client = support::rest_client(Some(422)).await; - let body: PostApiV1TeamsTeamThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1TeamsTeamThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .teams() @@ -16154,6 +16745,21 @@ async fn get_api_v1_threads_thread_trajectories_success() { ); } +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_threads_thread_trajectories_error_400() { + let client = support::rest_client(Some(400)).await; + let params: GetApiV1ThreadsThreadTrajectoriesParams = + serde_json::from_str(r#"{}"#).expect("valid generated params"); + let error = client + .v1() + .threads() + .trajectories("test-value", Some(¶ms)) + .await + .expect_err("expected API error"); + support::assert_api_error(error, 400); +} + #[tokio::test] #[ignore = "requires Prism contract server"] async fn get_api_v1_threads_thread_trajectories_error_401() { @@ -17231,7 +17837,7 @@ async fn get_api_v1_users_user_tasks_error_422() { #[ignore = "requires Prism contract server"] async fn post_api_v1_users_user_tasks_success() { let client = support::rest_client(None).await; - let body: PostApiV1UsersUserTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); + let body: PostApiV1UsersUserTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","epic":"billing-cadence","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"source_id":"ArchAstro/firstlanding","source_scope":"github.com","source_type":"repository","status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); let result = client.v1().users().tasks("test-id").create(&body).await; assert!( result.is_ok(), @@ -17245,7 +17851,7 @@ async fn post_api_v1_users_user_tasks_success() { #[ignore = "requires Prism contract server"] async fn post_api_v1_users_user_tasks_error_401() { let client = support::rest_client(Some(401)).await; - let body: PostApiV1UsersUserTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); + let body: PostApiV1UsersUserTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","epic":"billing-cadence","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"source_id":"ArchAstro/firstlanding","source_scope":"github.com","source_type":"repository","status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); let error = client .v1() .users() @@ -17260,7 +17866,7 @@ async fn post_api_v1_users_user_tasks_error_401() { #[ignore = "requires Prism contract server"] async fn post_api_v1_users_user_tasks_error_404() { let client = support::rest_client(Some(404)).await; - let body: PostApiV1UsersUserTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); + let body: PostApiV1UsersUserTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","epic":"billing-cadence","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"source_id":"ArchAstro/firstlanding","source_scope":"github.com","source_type":"repository","status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); let error = client .v1() .users() @@ -17275,7 +17881,7 @@ async fn post_api_v1_users_user_tasks_error_404() { #[ignore = "requires Prism contract server"] async fn post_api_v1_users_user_tasks_error_422() { let client = support::rest_client(Some(422)).await; - let body: PostApiV1UsersUserTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); + let body: PostApiV1UsersUserTasksInput = serde_json::from_str(r#"{"task":{"description":"An example description.","due_date":"2024-01-01T00:00:00Z","epic":"billing-cadence","links":{"key":"value"},"metadata":{"key":"value"},"name":"Example Name","owner_agent":"string","owner_user":"string","parent":"tsk_01j3k5m7n9p2r4s6t8v0w1x2","priority":2,"source_id":"ArchAstro/firstlanding","source_scope":"github.com","source_type":"repository","status":"open","tags":["backend","q3-launch"],"thread":"thr_01j3k5m7n9p2r4s6t8v0w1x2"}}"#).expect("valid generated body"); let error = client .v1() .users() @@ -17546,7 +18152,7 @@ async fn get_api_v1_users_user_threads_error_403() { #[ignore = "requires Prism contract server"] async fn post_api_v1_users_user_threads_success() { let client = support::rest_client(None).await; - let body: PostApiV1UsersUserThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1UsersUserThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let result = client.v1().users().threads("test-id").create(&body).await; assert!( result.is_ok(), @@ -17560,7 +18166,7 @@ async fn post_api_v1_users_user_threads_success() { #[ignore = "requires Prism contract server"] async fn post_api_v1_users_user_threads_error_401() { let client = support::rest_client(Some(401)).await; - let body: PostApiV1UsersUserThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1UsersUserThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .users() @@ -17575,7 +18181,7 @@ async fn post_api_v1_users_user_threads_error_401() { #[ignore = "requires Prism contract server"] async fn post_api_v1_users_user_threads_error_403() { let client = support::rest_client(Some(403)).await; - let body: PostApiV1UsersUserThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1UsersUserThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .users() @@ -17590,7 +18196,7 @@ async fn post_api_v1_users_user_threads_error_403() { #[ignore = "requires Prism contract server"] async fn post_api_v1_users_user_threads_error_422() { let client = support::rest_client(Some(422)).await; - let body: PostApiV1UsersUserThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); + let body: PostApiV1UsersUserThreadsInput = serde_json::from_str(r#"{"thread":{"create_legacy_agent":true,"description":"An example description.","is_unlisted":true,"key":"string","kind":"personal","members":[{"id":"string","type":"user"}],"metadata":{"key":"value"},"muted":true,"org_id":"string","profile_picture":{"data":"string","filename":"string","mime_type":"application/json"},"settings":{"agent_enabled":true},"slug":"example-slug","title":"Example Title","visibility":"team"}}"#).expect("valid generated body"); let error = client .v1() .users() @@ -18274,6 +18880,20 @@ async fn get_api_v1_ai_chat_models_error_401() { support::assert_api_error(error, 401); } +#[tokio::test] +#[ignore = "requires Prism contract server"] +async fn get_api_v1_ai_chat_models_error_403() { + let client = support::rest_client(Some(403)).await; + let error = client + .v1() + .ai() + .chat() + .models() + .await + .expect_err("expected API error"); + support::assert_api_error(error, 403); +} + #[tokio::test] #[ignore = "requires Prism contract server"] async fn post_api_v1_ai_chat_completions_success() {