{"openapi":"3.0.3","info":{"title":"Uniform Platform API","version":"2.0","description":"Management API for Uniform projects. Authenticate with an API key in the `x-api-key` header or a bearer token. Docs: https://docs.uniform.app/docs/api"},"paths":{"/api/v1/assets":{"options":{"tags":["Assets"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsAssets","summary":"Handles preflight requests."},"get":{"tags":["Assets"],"description":"In addition to the named parameters below, this endpoint accepts the\nfollowing query parameter convention which is pattern-validated and\ntherefore not declared as named parameters:\n\n* `filters.<field>[<op>]` — content filtering (documented below).\n\n#### Content filtering (`filters.*`)\n\nFiltering narrows list results to assets matching field values. The\nallowed field names are project-specific — they come from the project's\nasset definitions — which is why `filters.*` parameters are\npattern-validated rather than declared as named parameters.\n\nSyntax: `filters.<field>[<operator>]=<value>`. `<field>` is one of:\n\n* A system field such as `name`, `type`, `created`, `modified`,\n  `entityId`, `creator`, `creatorSubject`, `author`, `authorSubject`,\n  `categoryId`, `labels`, `labelGroups`, or `uiStatus`.\n* An asset field, addressed as `fields.<fieldId>`. Unlike entries and\n  compositions, asset field filters do not require a single-type\n  filter — but if the same field ID has differing types across asset\n  types, HTTP 400 is returned and a single asset type must be\n  filtered.\n\n| Operator | Effect |\n|---|---|\n| `[eq]` / `[neq]` | Exact equality / inequality. |\n| `[match]` | Contains (text search) match; text-like fields only. |\n| `[starts]` | Prefix match. Value limited to letters, numbers, `_`, `.`, `-`, and spaces. |\n| `[lt]` / `[lte]` / `[gt]` / `[gte]` | Comparisons for number, date, and datetime fields (including `created` / `modified`). |\n| `[in]` / `[nin]` | Comma-separated list; matches any (OR) / none of the values. |\n| `[all]` | Comma-separated list; list-valued fields (e.g. `labels`, multi-selects) must contain every value (AND). |\n| `[def]` | `true` or `false`; whether the field has a value at all. |\n\nBehavior:\n\n* Values are single strings, or comma-separated lists for `[in]`,\n  `[nin]`, and `[all]`. Dates accept `YYYY-MM-DD` or a full datetime\n  string. An empty value is rejected — use `[def]` to test presence.\n* Not every operator is valid for every field; the allowed set depends\n  on the field's type. An unsupported combination returns HTTP 400\n  with the supported operators listed.\n* Malformed keys, unknown operators, and unknown field names return\n  HTTP 400.\n\nExamples:\n\n* `filters.type[eq]=productImage` — only assets of type `productImage`.\n* `filters.modified[gte]=2026-01-01` — modified this year.\n* `filters.fields.altText[def]=false` — assets missing alt text.\n","parameters":[{"$ref":"#/components/parameters/assetId"},{"$ref":"#/components/parameters/assetIDs"},{"$ref":"#/components/parameters/createdBy1"},{"$ref":"#/components/parameters/keyword1"},{"$ref":"#/components/parameters/searchSemantic1"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/orderBy1"},{"$ref":"#/components/parameters/facetBy"},{"$ref":"#/components/parameters/projectId2"},{"$ref":"#/components/parameters/type1"},{"$ref":"#/components/parameters/updatedBy1"},{"$ref":"#/components/parameters/withTotalCount"},{"$ref":"#/components/parameters/releaseId1"},{"$ref":"#/components/parameters/withAssignedLabels"},{"$ref":"#/components/parameters/withUIStatus1"},{"$ref":"#/components/parameters/deleted"}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AssetListResponse"},{"$ref":"#/components/schemas/AssetApiResponse"}]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Asset not found","content":{"application/json":{"schema":{"type":"object","required":["errorMessage"],"properties":{"errorMessage":{"type":"string","description":"The error message"}},"additionalProperties":false}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getAssets","summary":"In addition to the named parameters below, this endpoint accepts the"},"put":{"tags":["Assets"],"description":"Creates or updates assets. Submitting the ID of a trashed asset restores it.\nA file-backed asset must include its original file reference when restored.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId"],"properties":{"projectId":{"type":"string","format":"uuid","description":"The project ID to upsert the asset to"},"releaseId":{"type":"string","format":"uuid","description":"The release ID to upsert the asset to. If unspecified the asset belongs to the base"},"asset":{"$ref":"#/components/schemas/AssetInput"},"assets":{"type":"array","items":{"$ref":"#/components/schemas/AssetInput"}}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putAssets","summary":"Creates or updates assets."},"delete":{"tags":["Assets"],"description":"Moves an asset to trash. Trashed assets are omitted from default GET results and\npermanently deleted after the configured retention period.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["assetId","projectId"],"properties":{"assetId":{"type":"string","format":"uuid","description":"The ID of the asset to move to trash"},"projectId":{"type":"string","format":"uuid","description":"The ID of the project the asset belongs to"},"releaseId":{"type":"string","format":"uuid","description":"The ID of the release the asset to delete belongs to. If unspecified the asset belongs to the base.\nNote: deleting an asset from a release will not delete the asset from the base\n"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Asset not found","content":{"application/json":{"schema":{"type":"object","required":["errorMessage"],"properties":{"errorMessage":{"type":"string","description":"The error message"}},"additionalProperties":false}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteAssets","summary":"Moves an asset to trash."}},"/api/v1/automation-run-logs":{"get":{"description":"Returns the log entries for a single automation run.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"parameters":[{"schema":{"type":"string","description":"The project ID."},"required":true,"description":"The project ID.","name":"projectId","in":"query"},{"schema":{"type":"string","description":"The automation run ID."},"required":true,"description":"The automation run ID.","name":"runId","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"logs":{"type":"array","items":{"type":"object","properties":{"level":{"type":"string","enum":["info","warning","error"],"description":"Severity of the log entry."},"message":{"type":"string","description":"Log message text."},"createdAt":{"type":"string","format":"date-time","description":"When the log entry was recorded."},"id":{"type":"string","description":"Unique identifier for the log entry."}},"required":["level","message","createdAt","id"],"additionalProperties":false,"description":"A persisted log entry for a run."},"description":"Log entries for the run."}},"required":["logs"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Run not found in this project."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Automations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getAutomationRunLogs","summary":"Returns the log entries for a single automation run."},"options":{"tags":["Automations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsAutomationRunLogs","summary":"Handles preflight requests."}},"/api/v1/automation-runs":{"get":{"description":"Lists automation runs for a project, optionally filtered by automation and status.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"parameters":[{"schema":{"type":"string","description":"The project ID."},"required":true,"description":"The project ID.","name":"projectId","in":"query"},{"schema":{"type":"string","description":"Filter to runs of a single automation."},"required":false,"description":"Filter to runs of a single automation.","name":"publicId","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of statuses to include. Statuses: running, success, rejected, unauthorized, failure, timeout, cycleAborted."},"required":false,"description":"Comma-separated list of statuses to include. Statuses: running, success, rejected, unauthorized, failure, timeout, cycleAborted.","name":"status","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"default":0,"description":"Number of records to skip."},"required":false,"description":"Number of records to skip.","name":"offset","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":25,"description":"Maximum number of records to return."},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the run."},"publicId":{"type":"string","description":"Public ID of the automation that was run."},"name":{"type":"string","description":"Name of the automation at run time."},"status":{"type":"string","enum":["running","success","rejected","unauthorized","failure","timeout","cycleAborted"],"description":"Terminal or in-progress status of an automation run."},"input":{"nullable":true,"description":"Input payload passed to the handler, or null for scheduled runs without input."},"startedAt":{"type":"string","format":"date-time","description":"When the run started."},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the run finished, or null while still running."},"latencyMs":{"type":"integer","nullable":true,"minimum":0,"description":"Run duration in milliseconds, or null while still running."}},"required":["id","publicId","name","status","startedAt","completedAt","latencyMs"],"additionalProperties":false,"description":"Summary of a single automation run."},"description":"Matching automation runs."},"totalCount":{"type":"number","description":"Total number of runs matching the filter."}},"required":["runs","totalCount"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Automations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getAutomationRuns","summary":"Lists automation runs for a project, optionally filtered by automation and status."},"post":{"description":"Triggers a one-off run of a scheduled automation, for testing.\n\nThe run is identical to a real scheduled occurrence (same trigger context, no input, same machine\nidentity) but is enqueued out of band: it does not advance the automation's schedule, and runs even\nwhen the automation is disabled. Only `schedule`-triggered automations can be run this way — other\ntrigger types have a natural way to exercise them (fire the event, send the webhook, invoke the tool).\n\nThe caller must hold every role the automation's identity holds (or be a team admin), since the run\nacts as that identity.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID."},"publicId":{"type":"string","minLength":1,"description":"The automation public ID."}},"required":["projectId","publicId"],"additionalProperties":false}}}},"responses":{"202":{"description":"202 response","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string","description":"ID of the enqueued run; poll the runs list to see its outcome."}},"required":["runId"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Automation not found."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Automations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"postAutomationRuns","summary":"Triggers a one-off run of a scheduled automation, for testing."},"options":{"tags":["Automations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsAutomationRuns","summary":"Handles preflight requests."}},"/api/v1/automation-webhooks":{"post":{"description":"Triggers incoming-webhook automations. Returns immediately after enqueueing a run; the automation result is not returned to the caller.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID."},"publicId":{"type":"string","minLength":1,"description":"The automation public ID."}},"required":["projectId","publicId"],"additionalProperties":{"type":"string","description":"Additional query parameters forwarded to the automation."}}}}},"responses":{"204":{"description":"Webhook received and enqueued."},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Automation not found, disabled, or not an incoming-webhook trigger."},"413":{"description":"Request body exceeds the size limit."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Automations"],"security":[],"operationId":"postAutomationWebhooks","summary":"Triggers incoming-webhook automations."},"options":{"tags":["Automations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsAutomationWebhooks","summary":"Handles preflight requests."}},"/api/v1/automations":{"get":{"description":"Lists the automations for a project.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"parameters":[{"schema":{"type":"string","description":"The project ID."},"required":true,"description":"The project ID.","name":"projectId","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of automation public IDs to return. Omit to return all."},"required":false,"description":"Comma-separated list of automation public IDs to return. Omit to return all.","name":"automationIDs","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"automations":{"type":"array","items":{"type":"object","properties":{"publicId":{"type":"string","description":"Stable public identifier for the automation."},"name":{"type":"string","description":"Display name of the automation."},"description":{"type":"string","nullable":true,"description":"Optional description."},"kind":{"type":"string","enum":["typescript","scout"],"description":"How the automation behaves: a bundled TypeScript handler, or Scout instructions."},"instructions":{"type":"string","nullable":true,"minLength":1,"maxLength":16384,"description":"The stored instructions for a `scout` automation; null for any other kind."},"triggers":{"type":"array","items":{"type":"object","properties":{"config":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["asset.deleted","asset.published","composition.changed","composition.deleted","composition.published","composition.release.changed","composition.release.deleted","composition.release.published","composition.release.restored","entry.changed","entry.deleted","entry.published","entry.release.changed","entry.release.deleted","entry.release.published","entry.release.restored","manifest.published","notification.created","projectmap.delete","projectmap.node.delete","projectmap.node.insert","projectmap.node.update","projectmap.update","redirect.delete","redirect.insert","redirect.update","release.changed","release.deleted","release.launch_started","release.launched","workflow.transition"],"description":"The internal webhook event name that triggers this automation."},"filter":{"type":"string","minLength":1,"description":"Optional CEL boolean expression evaluated against { input, trigger }; the automation runs only when it is true."}},"required":["type"],"description":"Runs the automation when the given internal webhook event is received."},{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 recurrence rule for when the automation runs."},"timezone":{"type":"string","minLength":1,"description":"IANA timezone used to evaluate the recurrence rule."}},"required":["type","rrule","timezone"],"description":"Runs the automation on a recurring schedule."},{"type":"object","properties":{"type":{"type":"string","enum":["incomingWebhook"]},"filter":{"type":"string","minLength":1,"description":"Optional CEL boolean expression evaluated against { input, trigger }; the automation runs only when it is true."}},"required":["type"],"description":"Runs the automation when an external system POSTs to its webhook URL."},{"type":"object","properties":{"type":{"type":"string","enum":["aiTool"]},"inputSchema":{"type":"object","additionalProperties":{"nullable":true},"description":"JSON Schema describing the AI tool arguments."}},"required":["type","inputSchema"],"description":"Exposes the automation as a callable AI tool for Scout."}],"description":"How the automation is triggered."},"nextRunAt":{"type":"string","nullable":true,"format":"date-time","description":"Next upcoming run for this trigger; null for non-schedule triggers."}},"required":["config","nextRunAt"],"additionalProperties":false,"description":"A trigger the automation subscribes to, with its next scheduled run."},"description":"The triggers this automation subscribes to."},"enabled":{"type":"boolean","description":"Whether the automation is enabled."},"lastDeployedAt":{"type":"string","format":"date-time","description":"When the automation code was last deployed."},"lastDeployedBy":{"type":"string","description":"User ID of the last deployer."},"createdAt":{"type":"string","format":"date-time","description":"When the automation was first created."},"createdBy":{"type":"string","description":"User ID of the creator."},"identity":{"type":"object","nullable":true,"properties":{"projects":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Role public IDs granted to the automation identity, keyed by project ID."}},"required":["projects"],"description":"Machine identity for the automation, or null if it has none."}},"required":["publicId","name","description","kind","instructions","triggers","enabled","lastDeployedAt","lastDeployedBy","createdAt","createdBy","identity"],"additionalProperties":false,"description":"Summary of a deployed automation."},"description":"Automations configured for the project."}},"required":["automations"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Automations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getAutomations","summary":"Lists the automations for a project."},"delete":{"description":"Deletes an automation and its run history.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID."},"publicId":{"type":"string","minLength":1,"description":"The automation public ID."}},"required":["projectId","publicId"],"additionalProperties":false}}}},"responses":{"204":{"description":"Delete successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Automation not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Automations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteAutomations","summary":"Deletes an automation and its run history."},"put":{"description":"Deploys (creates or updates) an automation.\n\nSet `kind` to `typescript` to deploy a bundled handler module, or to `scout` to have the automation run the Scout agent against stored natural-language instructions on each trigger.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID."},"publicId":{"type":"string","minLength":1,"description":"Stable public identifier for the automation."},"name":{"type":"string","minLength":1,"description":"Display name of the automation."},"description":{"type":"string","description":"For automations triggered as an AI tool, this is used to determine when an LLM should call the automation. For other triggers, this is for your reference and optional."},"triggers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["asset.deleted","asset.published","composition.changed","composition.deleted","composition.published","composition.release.changed","composition.release.deleted","composition.release.published","composition.release.restored","entry.changed","entry.deleted","entry.published","entry.release.changed","entry.release.deleted","entry.release.published","entry.release.restored","manifest.published","notification.created","projectmap.delete","projectmap.node.delete","projectmap.node.insert","projectmap.node.update","projectmap.update","redirect.delete","redirect.insert","redirect.update","release.changed","release.deleted","release.launch_started","release.launched","workflow.transition"],"description":"The internal webhook event name that triggers this automation."},"filter":{"type":"string","minLength":1,"description":"Optional CEL boolean expression evaluated against { input, trigger }; the automation runs only when it is true."}},"required":["type"],"description":"Runs the automation when the given internal webhook event is received."},{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 recurrence rule for when the automation runs."},"timezone":{"type":"string","minLength":1,"description":"IANA timezone used to evaluate the recurrence rule."}},"required":["type","rrule","timezone"],"description":"Runs the automation on a recurring schedule."},{"type":"object","properties":{"type":{"type":"string","enum":["incomingWebhook"]},"filter":{"type":"string","minLength":1,"description":"Optional CEL boolean expression evaluated against { input, trigger }; the automation runs only when it is true."}},"required":["type"],"description":"Runs the automation when an external system POSTs to its webhook URL."},{"type":"object","properties":{"type":{"type":"string","enum":["aiTool"]},"inputSchema":{"type":"object","additionalProperties":{"nullable":true},"description":"JSON Schema describing the AI tool arguments."}},"required":["type","inputSchema"],"description":"Exposes the automation as a callable AI tool for Scout."}],"description":"How the automation is triggered."},"minItems":1,"description":"The triggers this automation subscribes to."},"permissions":{"type":"object","properties":{"role":{"anyOf":[{"type":"string","minLength":1},{"type":"array","items":{"type":"string","minLength":1},"minItems":1}],"description":"Role grant(s) on the project the automation is deployed to."},"projects":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","minLength":1},{"type":"array","items":{"type":"string","minLength":1},"minItems":1}],"description":"One role public ID, or multiple role public IDs, granted in that project."},"description":"Additional project role grants keyed by project ID for cross-project access within the same team."}},"required":["role"],"additionalProperties":false,"description":"Role grants for the automation identity. The caller must hold each requested role (or be a team admin). When omitted, the automation will not receive Uniform API access credentials."},"kind":{"type":"string","enum":["typescript"],"description":"Runs a bundled TypeScript handler module."},"code":{"type":"string","maxLength":1048576,"description":"Bundled JavaScript module for the automation handler."},"compatibilityDate":{"type":"string","description":"Target date for runtime compatibility. Runtime changes after this date may not apply to this automation."}},"required":["projectId","publicId","name","triggers","kind","code"],"additionalProperties":false,"description":"An automation whose behavior is a bundled TypeScript handler."},{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID."},"publicId":{"type":"string","minLength":1,"description":"Stable public identifier for the automation."},"name":{"type":"string","minLength":1,"description":"Display name of the automation."},"description":{"type":"string","description":"For automations triggered as an AI tool, this is used to determine when an LLM should call the automation. For other triggers, this is for your reference and optional."},"triggers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["asset.deleted","asset.published","composition.changed","composition.deleted","composition.published","composition.release.changed","composition.release.deleted","composition.release.published","composition.release.restored","entry.changed","entry.deleted","entry.published","entry.release.changed","entry.release.deleted","entry.release.published","entry.release.restored","manifest.published","notification.created","projectmap.delete","projectmap.node.delete","projectmap.node.insert","projectmap.node.update","projectmap.update","redirect.delete","redirect.insert","redirect.update","release.changed","release.deleted","release.launch_started","release.launched","workflow.transition"],"description":"The internal webhook event name that triggers this automation."},"filter":{"type":"string","minLength":1,"description":"Optional CEL boolean expression evaluated against { input, trigger }; the automation runs only when it is true."}},"required":["type"],"description":"Runs the automation when the given internal webhook event is received."},{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 recurrence rule for when the automation runs."},"timezone":{"type":"string","minLength":1,"description":"IANA timezone used to evaluate the recurrence rule."}},"required":["type","rrule","timezone"],"description":"Runs the automation on a recurring schedule."},{"type":"object","properties":{"type":{"type":"string","enum":["incomingWebhook"]},"filter":{"type":"string","minLength":1,"description":"Optional CEL boolean expression evaluated against { input, trigger }; the automation runs only when it is true."}},"required":["type"],"description":"Runs the automation when an external system POSTs to its webhook URL."},{"type":"object","properties":{"type":{"type":"string","enum":["aiTool"]},"inputSchema":{"type":"object","additionalProperties":{"nullable":true},"description":"JSON Schema describing the AI tool arguments."}},"required":["type","inputSchema"],"description":"Exposes the automation as a callable AI tool for Scout."}],"description":"How the automation is triggered."},"minItems":1,"description":"The triggers this automation subscribes to."},"permissions":{"type":"object","properties":{"role":{"anyOf":[{"type":"string","minLength":1},{"type":"array","items":{"type":"string","minLength":1},"minItems":1}],"description":"Role grant(s) on the project the automation is deployed to."},"projects":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","minLength":1},{"type":"array","items":{"type":"string","minLength":1},"minItems":1}],"description":"One role public ID, or multiple role public IDs, granted in that project."},"description":"Additional project role grants keyed by project ID for cross-project access within the same team."}},"required":["role"],"additionalProperties":false,"description":"Role grants for the automation identity. The caller must hold each requested role (or be a team admin). Required: a Scout automation acts solely through its machine identity, so without a role grant it has no authority to act."},"kind":{"type":"string","enum":["scout"],"description":"Runs the Scout agent headlessly against stored instructions."},"instructions":{"type":"string","minLength":1,"maxLength":16384,"description":"The instructions Scout runs on each trigger."}},"required":["projectId","publicId","name","triggers","permissions","kind","instructions"],"additionalProperties":false,"description":"An automation whose behavior is natural-language instructions run by Scout."}]}}}},"responses":{"204":{"description":"Deploy successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Automations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putAutomations","summary":"Deploys (creates or updates) an automation."},"patch":{"description":"Toggles the enabled state of an automation. Disabled automations do not run when their trigger occurs.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID."},"publicId":{"type":"string","minLength":1,"description":"The automation public ID."},"enabled":{"type":"boolean","description":"Whether the automation should be enabled."}},"required":["projectId","publicId","enabled"],"additionalProperties":false}}}},"responses":{"204":{"description":"Toggle successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Automation not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Automations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"patchAutomations","summary":"Toggles the enabled state of an automation."},"options":{"tags":["Automations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsAutomations","summary":"Handles preflight requests."}},"/api/v1/canvas-definitions":{"options":{"tags":["Component Definitions"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsCanvasDefinitions","summary":"Handles preflight requests."},"get":{"tags":["Component Definitions"],"parameters":[{"in":"query","name":"projectId","description":"The project ID to get component definitions for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"componentId","description":"Limit the list to one result by ID (response remains an array)","schema":{"type":"string"}},{"in":"query","name":"offset","description":"Number of records to skip","schema":{"type":"integer","minimum":0}},{"in":"query","name":"limit","description":"Maximum number of records to return","schema":{"type":"integer","minimum":1,"maximum":10000,"default":100}},{"in":"query","name":"includeSystem","description":"Whether to fetch system meta-component definitions (personalize, test, etc.)","schema":{"type":"boolean","default":false}},{"in":"query","name":"categories","description":"Filter by category ID","schema":{"type":"array","items":{"type":"string","format":"uuid"}}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["componentDefinitions"],"properties":{"componentDefinitions":{"type":"array","description":"Component definitions that match the query","items":{"$ref":"#/components/schemas/ComponentDefinition"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getCanvasDefinitions","description":"GET /api/v1/canvas-definitions (Component Definitions)","summary":"GET /api/v1/canvas-definitions (Component Definitions)"},"put":{"tags":["Component Definitions"],"description":"Upserts a component definition","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","componentDefinition"],"properties":{"projectId":{"type":"string","format":"uuid","description":"The project ID to upsert the component definition to"},"componentDefinition":{"$ref":"#/components/schemas/ComponentDefinition"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putCanvasDefinitions","summary":"Upserts a component definition"},"delete":{"tags":["Component Definitions"],"description":"Deletes a component definition","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["componentId","projectId"],"properties":{"componentId":{"type":"string","description":"The public ID of the component definition to delete"},"projectId":{"type":"string","format":"uuid","description":"The project ID the component definition to delete belongs to"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteCanvasDefinitions","summary":"Deletes a component definition"}},"/api/v1/canvas-history":{"get":{"tags":["Compositions & Component/Composition Patterns"],"parameters":[{"in":"query","name":"compositionId","description":"Specify the composition ID to get history for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"editionId","description":"The edition ID. When set, gets history for a child edition of the compositionId.\n","schema":{"type":"string","format":"uuid"}},{"in":"query","name":"projectId","description":"The project the composition(s) are on","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"cursor","description":"If a request returns a cursor, pass it in this query parameter to get the next page of results","schema":{"type":"string","maxLength":1024}},{"in":"query","name":"releaseId","description":"The release ID to get history for. Note that release history is independent of base histories","schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryApiResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Composition not found","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getCanvasHistory","description":"GET /api/v1/canvas-history (Compositions & Component/Composition Patterns)","summary":"GET /api/v1/canvas-history (Compositions & Component/Composition Patterns)"}},"/api/v1/canvas":{"options":{"tags":["Compositions & Component/Composition Patterns"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsCanvas","summary":"Handles preflight requests."},"get":{"tags":["Compositions & Component/Composition Patterns"],"description":"In addition to the named parameters below, this endpoint accepts the\nfollowing query parameter conventions which are pattern-validated and\ntherefore not declared as named parameters:\n\n* `filters.<field>[<op>]` — content filtering (documented below).\n* `select.<bucket>[<op>]` — data projection (documented below).\n\n#### Content filtering (`filters.*`)\n\nFiltering narrows list results to compositions matching field values.\nThe allowed field names are project-specific — they come from the\nproject's component definitions — which is why `filters.*` parameters\nare pattern-validated rather than declared as named parameters.\n\nSyntax: `filters.<field>[<operator>]=<value>`. `<field>` is one of:\n\n* A system field: `name`, `slug`, `type`, `created`, `modified`,\n  `entityId`, `editionId`, `releaseId`, `patternId`, `creator`,\n  `creatorSubject`, `author`, `authorSubject`, `projectMapId`,\n  `projectMapNodeId`, `workflowId`, `workflowStageId`, `categoryId`,\n  `labels`, `labelGroups`, `uiStatus`, or `locale`.\n* A component parameter, addressed as `parameters.<parameterId>`.\n  Filtering by parameters requires also filtering to a single\n  composition type (e.g. `filters.type[eq]=...`).\n* A sub-property of a parameter for certain parameter types:\n  content references (`parameters.<id>.slug|name|type`), links\n  (`parameters.<id>.type|projectMapNodeId`), and assets\n  (`parameters.<id>.url|title|description|mediaType`).\n\n| Operator | Effect |\n|---|---|\n| `[eq]` / `[neq]` | Exact equality / inequality. |\n| `[match]` | Contains (text search) match; text-like fields only. |\n| `[starts]` | Prefix match. Value limited to letters, numbers, `_`, `.`, `-`, and spaces. |\n| `[lt]` / `[lte]` / `[gt]` / `[gte]` | Comparisons for number, date, and datetime fields (including `created` / `modified`). |\n| `[in]` / `[nin]` | Comma-separated list; matches any (OR) / none of the values. |\n| `[all]` | Comma-separated list; list-valued fields (e.g. `labels`, multi-selects) must contain every value (AND). |\n| `[def]` | `true` or `false`; whether the field has a value at all. |\n\nBehavior:\n\n* Values are single strings, or comma-separated lists for `[in]`,\n  `[nin]`, and `[all]`. Dates accept `YYYY-MM-DD` or a full datetime\n  string. An empty value is rejected — use `[def]` to test presence.\n* Not every operator is valid for every field; the allowed set depends\n  on the field's type. An unsupported combination returns HTTP 400\n  with the supported operators listed.\n* Malformed keys, unknown operators, and unknown field names return\n  HTTP 400.\n* Filters match root compositions only.\n\nExamples:\n\n* `filters.type[eq]=landingPage` — only compositions of type `landingPage`.\n* `filters.modified[gte]=2026-01-01` — modified this year.\n* `filters.type[eq]=landingPage&filters.parameters.audience[in]=b2b,b2c` — parameter filter scoped to one type.\n* `filters.labels[all]=approved,featured` — has both labels.\n\n#### Data projection (`select.*`)\n\nProjection returns a subset of the response by pruning fields (parameters),\nfield types, and slots before values are resolved. The allowed names are\nproject-specific — they come from the project's component definitions and\ncontent types — which is why `select.*` parameters are pattern-validated\nrather than declared as named parameters.\n\nSyntax: `select.<bucket>[<operator>]=<value>`. Values are comma-separated\nlists of names. `*` is the only wildcard and matches zero or more\ncharacters (e.g. `seo_*`).\n\n| Parameter | Effect |\n|---|---|\n| `select.fields[only]=a,b` | Keep only the named fields/parameters; drop everything else. |\n| `select.fields[except]=a,b` | Drop the named fields/parameters; keep everything else. |\n| `select.fields[locales]=a,b` | For the named fields that survive filtering, return the full per-locale value map instead of only the requested locale's value. |\n| `select.fields[blockDepth]=N` | Limit how many levels of block field children are kept. `0` removes all block fields; `preserveAll` prevents projection from trimming fields inside block children. |\n| `select.fieldTypes[only]=a,b` | Keep only fields of the named types (type IDs such as `text`, `richText`, `asset`). |\n| `select.fieldTypes[except]=a,b` | Drop fields of the named types. |\n| `select.slots[only]=a,b` | Keep only the named slots. |\n| `select.slots[except]=a,b` | Drop the named slots. |\n| `select.slots[depth]=N` | Limit how many levels of nested components are kept in slots. |\n| `select.slots.<name>[depth]=N` | Depth limit for one specific slot; overrides `slots[depth]`. |\n\nBehavior:\n\n* Projection applies recursively at every component and block in the\n  returned tree, and is forwarded into entries resolved through reference\n  fields.\n* When operators combine, all `[only]` sets are intersected first, then\n  `[except]` sets are subtracted — exclusion always wins.\n* Unknown field, slot, or type names are silent no-ops (the tree shape is\n  preserved; non-matching content is simply absent). Unknown operators\n  return HTTP 400.\n* An empty list (`select.fields[only]=` or `select.slots[only]=`) strips\n  every member of that bucket; `[except]=*` is equivalent.\n* `[depth]` counts nesting within a single fetched tree and resets inside\n  referenced entries.\n\nExamples:\n\n* `select.fields[only]=title,slug` — keep only titles and slugs, everywhere in the tree.\n* `select.fieldTypes[except]=richText` — everything except rich-text fields.\n* `select.fields[only]=title&select.slots[only]=` — root title only, with all slots flattened.\n* `select.slots[depth]=2&select.fields[only]=label,url` — two levels of nested components, trimmed to `label` and `url`.\n","parameters":[{"$ref":"#/components/parameters/compositionId"},{"$ref":"#/components/parameters/componentId"},{"$ref":"#/components/parameters/versionId1"},{"$ref":"#/components/parameters/compositionIDs"},{"$ref":"#/components/parameters/createdBy2"},{"$ref":"#/components/parameters/keyword2"},{"$ref":"#/components/parameters/limit1"},{"$ref":"#/components/parameters/offset1"},{"$ref":"#/components/parameters/orderBy2"},{"$ref":"#/components/parameters/facetBy"},{"$ref":"#/components/parameters/pattern1"},{"$ref":"#/components/parameters/patternType"},{"$ref":"#/components/parameters/withPatternType"},{"$ref":"#/components/parameters/projectId3"},{"$ref":"#/components/parameters/projectMapId1"},{"$ref":"#/components/parameters/projectMapNodeId"},{"$ref":"#/components/parameters/projectMapNodePath"},{"$ref":"#/components/parameters/skipEnhance"},{"$ref":"#/components/parameters/skipPatternResolution1"},{"$ref":"#/components/parameters/skipParameterResolution"},{"$ref":"#/components/parameters/skipOverridesResolution1"},{"$ref":"#/components/parameters/slug1"},{"$ref":"#/components/parameters/categories"},{"$ref":"#/components/parameters/state1"},{"$ref":"#/components/parameters/type2"},{"$ref":"#/components/parameters/uiStatus1"},{"$ref":"#/components/parameters/attachedToProjectMap"},{"$ref":"#/components/parameters/updatedBy2"},{"$ref":"#/components/parameters/withComponentIDs2"},{"$ref":"#/components/parameters/withTotalCount"},{"$ref":"#/components/parameters/withUIStatus2"},{"$ref":"#/components/parameters/withWorkflowDefinition1"},{"$ref":"#/components/parameters/withProjectMapNodes"},{"$ref":"#/components/parameters/withContentSourceMap"},{"$ref":"#/components/parameters/locale2"},{"$ref":"#/components/parameters/releaseId"},{"$ref":"#/components/parameters/search1"},{"$ref":"#/components/parameters/searchSemantic"},{"$ref":"#/components/parameters/editions1"},{"$ref":"#/components/parameters/format1"},{"$ref":"#/components/parameters/deleted"}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CompositionListResponse"},{"$ref":"#/components/schemas/CompositionApiResponse"}]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Composition not found","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getCanvas","summary":"In addition to the named parameters below, this endpoint accepts the"},"put":{"tags":["Compositions & Component/Composition Patterns"],"description":"Upserts a composition","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","state","composition"],"properties":{"projectId":{"type":"string","format":"uuid","description":"The project ID to upsert the composition to"},"state":{"type":"number","minimum":0,"maximum":64,"description":"The publishing state to upsert into. 0 = draft, 64 = published"},"composition":{"$ref":"#/components/schemas/RootComponentInstance"},"pattern":{"description":"Indicates if the composition is a pattern that can be referenced in other compositions","type":"boolean","default":false},"created":{"description":"This field is ignored if present","type":"string"},"modified":{"description":"This field is ignored if present","type":"string"},"categoryId":{"type":"string","format":"uuid","description":"Reference to the category this component definition belongs to","nullable":true,"default":null},"description":{"type":"string","description":"A description of the component definition","maxLength":2024,"nullable":true,"default":null},"previewImageUrl":{"type":"string","description":"A preview image URL of the component definition","maxLength":2024,"nullable":true,"default":null},"releaseId":{"type":"string","format":"uuid","description":"The release this composition belongs to. If not set, it belongs to the base"},"workflowId":{"type":"string","format":"uuid","description":"The workflow ID assigned to this composition, if any"},"workflowStageId":{"type":"string","format":"uuid","description":"The stage ID the composition is in within its assigned workflow. If undefined, it is implicitly in the initial stage of the workflow"},"editionId":{"type":"string","format":"uuid","description":"The edition ID. When set, this is a child edition of the composition in _id.\n"},"editionName":{"type":"string","maxLength":100,"description":"The name of the composition or edition as shown in the editions listing.\nDescribes the purpose of an edition.\n"},"editionPriority":{"type":"integer","description":"The priority of the edition or composition. Higher numbers are higher priority.\nWhen multiple editions enable the same locale, the highest priority edition is used.\n"}},"additionalProperties":false}}}},"parameters":[{"in":"header","name":"X-If-Unmodified-Since","description":"Optional concurrency control header. If provided, the server will check that the composition\nhas not been modified since this timestamp. If the timestamp doesn't match the current\nmodified timestamp, a 409 Conflict response will be returned.\n","required":false,"schema":{"type":"string","example":"2024-01-15T10:30:45.123Z"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"description":"Conflict - Composition has been changed since being loaded","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putCanvas","summary":"Upserts a composition"},"delete":{"tags":["Compositions & Component/Composition Patterns"],"description":"Deletes or unpublishes a composition","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["compositionId","projectId"],"properties":{"compositionId":{"type":"string","format":"uuid","description":"The ID of the composition to delete.\nWhen editionId is also passed, the composition remains and an edition under it is deleted.\nWhen editionId is omitted, and the composition has editions, all editions will also be deleted along with the composition.\n"},"editionId":{"type":"string","format":"uuid","description":"The edition ID to delete. When set, this deletes a child edition of the compositionId.\nThe composition will remain when an edition is deleted.\nIf the composition ID is specified as the edition ID, the composition will be deleted _but any other editions will remain_ (this is used for unpublishing).\n"},"projectId":{"type":"string","format":"uuid","description":"The ID of the project the composition to delete belongs to"},"releaseId":{"type":"string","format":"uuid","description":"The release the composition to delete belongs to. If not set, it belongs to the base.\nNote: Deleting a composition from a release will not delete the composition from the base\n"},"state":{"type":"number","minimum":0,"maximum":64,"description":"The state to delete (0 = draft, 64 = published [causes unpublishing], unspecified = all)"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteCanvas","summary":"Deletes or unpublishes a composition"}},"/api/v1/categories":{"get":{"tags":["Categories"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["categories"],"properties":{"categories":{"type":"array","items":{"$ref":"#/components/schemas/Category"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getCategories","description":"GET /api/v1/categories (Categories)","summary":"GET /api/v1/categories (Categories)"},"put":{"tags":["Categories"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["categories","projectId"],"properties":{"projectId":{"type":"string","format":"uuid"},"categories":{"type":"array","items":{"$ref":"#/components/schemas/Category"}}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putCategories","description":"PUT /api/v1/categories (Categories)","summary":"PUT /api/v1/categories (Categories)"},"delete":{"tags":["Categories"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","categoryId"],"properties":{"categoryId":{"type":"string","format":"uuid"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteCategories","description":"DELETE /api/v1/categories (Categories)","summary":"DELETE /api/v1/categories (Categories)"}},"/api/v1/content-types":{"options":{"tags":["Content Types"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsContentTypes","summary":"Handles preflight requests."},"get":{"tags":["Content Types"],"parameters":[{"in":"query","name":"projectId","description":"The project ID to get content type for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"offset","description":"Number of records to skip","schema":{"type":"integer","minimum":0}},{"in":"query","name":"limit","description":"Max number of records to return","schema":{"type":"integer","minimum":1,"maximum":10000,"default":100}},{"in":"query","name":"type","description":"Limit the types of content type to return. If not specified, both block types and content types are returned","schema":{"type":"string","enum":["block","contentType"]}},{"in":"query","name":"contentTypeIDs","description":"Limit the response to the content types (or block types) matching these public IDs.","style":"form","schema":{"type":"array","items":{"type":"string"}}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["contentTypes"],"properties":{"contentTypes":{"type":"array","description":"Content types that match the query","items":{"$ref":"#/components/schemas/ContentType"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getContentTypes","description":"GET /api/v1/content-types (Content Types)","summary":"GET /api/v1/content-types (Content Types)"},"put":{"tags":["Content Types"],"description":"Upserts a content type","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","contentType"],"properties":{"projectId":{"type":"string","format":"uuid","description":"The project ID to upsert the content type to"},"contentType":{"$ref":"#/components/schemas/ContentType"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putContentTypes","summary":"Upserts a content type"},"delete":{"tags":["Content Types"],"description":"Deletes a content type","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["contentTypeId","projectId"],"properties":{"contentTypeId":{"type":"string","description":"The public ID of the content type to delete"},"projectId":{"type":"string","format":"uuid","description":"The ID of the project the content type to delete belongs to"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteContentTypes","summary":"Deletes a content type"}},"/api/v1/data-source":{"get":{"tags":["Data Sources"],"parameters":[{"in":"query","name":"dataSourceId","required":true,"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9\\-]+$"}},{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["result"],"properties":{"result":{"$ref":"#/components/schemas/DataSource"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getDataSource","description":"GET /api/v1/data-source (Data Sources)","summary":"GET /api/v1/data-source (Data Sources)"},"put":{"tags":["Data Sources"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","data"],"properties":{"data":{"$ref":"#/components/schemas/DataSource"},"projectId":{"type":"string","format":"uuid"},"integrationId":{"description":"Do not use. May be removed in future","deprecated":true,"type":"string","format":"uuid"},"integrationType":{"description":"The integration type that the data source is attached to. Must be installed in the project","type":"string","minLength":4,"maxLength":256}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putDataSource","description":"PUT /api/v1/data-source (Data Sources)","summary":"PUT /api/v1/data-source (Data Sources)"},"delete":{"tags":["Data Sources"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","dataSourceId"],"properties":{"dataSourceId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9\\-]+$"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteDataSource","description":"DELETE /api/v1/data-source (Data Sources)","summary":"DELETE /api/v1/data-source (Data Sources)"}},"/api/v1/data-sources":{"get":{"tags":["Data Sources"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Gets a list of data sources.\nNote that all parameters, headers, and variables will have the value 'SECRET', as this endpoint\nrequires minimal permissions. To decrypt secrets, you must be an admin or manage-data-sources privileged\nuser, and fetch using the `data-source` endpoint for each data source\n","content":{"application/json":{"schema":{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/DataSource"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getDataSources","description":"GET /api/v1/data-sources (Data Sources)","summary":"GET /api/v1/data-sources (Data Sources)"}},"/api/v1/data-types":{"get":{"tags":["Data Types"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/DataType"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getDataTypes","description":"GET /api/v1/data-types (Data Types)","summary":"GET /api/v1/data-types (Data Types)"},"put":{"tags":["Data Types"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","data"],"properties":{"data":{"$ref":"#/components/schemas/DataType"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putDataTypes","description":"PUT /api/v1/data-types (Data Types)","summary":"PUT /api/v1/data-types (Data Types)"},"delete":{"tags":["Data Types"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","typeId"],"properties":{"typeId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9\\-]+$"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteDataTypes","description":"DELETE /api/v1/data-types (Data Types)","summary":"DELETE /api/v1/data-types (Data Types)"}},"/api/v1/enrichment-values":{"options":{"tags":["Enrichments"],"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsEnrichmentValues","summary":"Handles preflight requests."},"put":{"tags":["Enrichments"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","enrichmentId","enrichmentValue"],"properties":{"enrichmentValue":{"$ref":"#/components/schemas/EnrichmentValue"},"enrichmentId":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-\\$]+$"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putEnrichmentValues","description":"PUT /api/v1/enrichment-values (Enrichments)","summary":"PUT /api/v1/enrichment-values (Enrichments)"},"delete":{"tags":["Enrichments"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","enrichmentId","enrichmentValueId"],"properties":{"enrichmentId":{"type":"string","maxLength":36,"minLength":1,"pattern":"^[A-Za-z0-9\\-\\$]+$"},"projectId":{"type":"string","format":"uuid"},"enrichmentValueId":{"type":"string","maxLength":36,"minLength":1,"pattern":"^[A-Za-z0-9\\-\\$]+$"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Parent enrichment category was not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteEnrichmentValues","description":"DELETE /api/v1/enrichment-values (Enrichments)","summary":"DELETE /api/v1/enrichment-values (Enrichments)"}},"/api/v1/enrichments":{"options":{"tags":["Enrichments"],"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsEnrichments","summary":"Handles preflight requests."},"get":{"tags":["Enrichments"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["enrichments"],"properties":{"enrichments":{"type":"array","items":{"$ref":"#/components/schemas/EnrichmentCategoryWithValues"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getEnrichments","description":"GET /api/v1/enrichments (Enrichments)","summary":"GET /api/v1/enrichments (Enrichments)"},"put":{"tags":["Enrichments"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","enrichment"],"properties":{"enrichment":{"$ref":"#/components/schemas/EnrichmentCategory1"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putEnrichments","description":"PUT /api/v1/enrichments (Enrichments)","summary":"PUT /api/v1/enrichments (Enrichments)"},"delete":{"tags":["Enrichments"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","enrichmentId"],"properties":{"enrichmentId":{"type":"string","maxLength":40,"minLength":1},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteEnrichments","description":"DELETE /api/v1/enrichments (Enrichments)","summary":"DELETE /api/v1/enrichments (Enrichments)"}},"/api/v1/entity-releases":{"get":{"description":"Lists entity instances across all releases (and base). Default to draft state if entity supports it.","tags":["Releases"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"id","description":"Matches entity by their ID\n","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"definitionType","required":true,"schema":{"type":"string","enum":["composition","entry"]},"description":"Entity type (i.e. composition, entry, ...).\nNOTE: New values may be added to this list without being considered a breaking API change\n"},{"in":"query","name":"releaseStates","description":"Matches entity instances where their release state is one of a list. NOTE: base instance, when present, is always included in the results.\n","schema":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseState"}}},{"in":"query","name":"offset","description":"Number of records to skip\n","schema":{"type":"integer","minimum":0}},{"in":"query","name":"limit","description":"Maximum number of records to return\n","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"List of entity instances across all releases (and base).\n","content":{"application/json":{"schema":{"type":"object","required":["results","totalCount"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/EntityInRelease"}},"totalCount":{"type":"integer","minimum":0}},"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getEntityReleases","summary":"Lists entity instances across all releases (and base)."}},"/api/v1/entries-history":{"get":{"tags":["Entries & Entry Patterns"],"parameters":[{"in":"query","name":"entryId","description":"Specify the entry ID to get history for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"editionId","description":"The edition ID. When set, gets history for a child edition of the entryId.\n","deprecated":true,"schema":{"type":"string","deprecated":true,"format":"uuid"}},{"in":"query","name":"projectId","description":"The project the entries(s) are on.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"cursor","description":"If a request returns a cursor, pass it in this query parameter to get the next page of results.","schema":{"type":"string","maxLength":1024}},{"in":"query","name":"releaseId","description":"The release ID to get history for. Note that release history is independent of base histories.","schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryApiResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Entry not found","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getEntriesHistory","description":"GET /api/v1/entries-history (Entries & Entry Patterns)","summary":"GET /api/v1/entries-history (Entries & Entry Patterns)"}},"/api/v1/entries":{"options":{"tags":["Entries & Entry Patterns"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsEntries","summary":"Handles preflight requests."},"get":{"tags":["Entries & Entry Patterns"],"description":"In addition to the named parameters below, this endpoint accepts the\nfollowing query parameter conventions which are pattern-validated and\ntherefore not declared as named parameters:\n\n* `filters.<field>[<op>]` — content filtering (documented below).\n* `select.<bucket>[<op>]` — data projection (documented below).\n\n#### Content filtering (`filters.*`)\n\nFiltering narrows list results to entries matching field values. The\nallowed field names are project-specific — they come from the project's\ncontent types — which is why `filters.*` parameters are\npattern-validated rather than declared as named parameters.\n\nSyntax: `filters.<field>[<operator>]=<value>`. `<field>` is one of:\n\n* A system field: `name`, `slug`, `type`, `created`, `modified`,\n  `entityId`, `editionId`, `releaseId`, `patternId`, `creator`,\n  `creatorSubject`, `author`, `authorSubject`, `workflowId`,\n  `workflowStageId`, `categoryId`, `labels`, `labelGroups`,\n  `uiStatus`, or `locale`.\n* An entry field, addressed as `fields.<fieldId>`. Filtering by fields\n  requires also filtering to a single content type (e.g.\n  `filters.type[eq]=...`).\n* A sub-property of a field for certain field types: content\n  references (`fields.<id>.slug|name|type`), links\n  (`fields.<id>.type|projectMapNodeId`), and assets\n  (`fields.<id>.url|title|description|mediaType`).\n\n| Operator | Effect |\n|---|---|\n| `[eq]` / `[neq]` | Exact equality / inequality. |\n| `[match]` | Contains (text search) match; text-like fields only. |\n| `[starts]` | Prefix match. Value limited to letters, numbers, `_`, `.`, `-`, and spaces. |\n| `[lt]` / `[lte]` / `[gt]` / `[gte]` | Comparisons for number, date, and datetime fields (including `created` / `modified`). |\n| `[in]` / `[nin]` | Comma-separated list; matches any (OR) / none of the values. |\n| `[all]` | Comma-separated list; list-valued fields (e.g. `labels`, multi-selects) must contain every value (AND). |\n| `[def]` | `true` or `false`; whether the field has a value at all. |\n\nBehavior:\n\n* Values are single strings, or comma-separated lists for `[in]`,\n  `[nin]`, and `[all]`. Dates accept `YYYY-MM-DD` or a full datetime\n  string. An empty value is rejected — use `[def]` to test presence.\n* Not every operator is valid for every field; the allowed set depends\n  on the field's type. An unsupported combination returns HTTP 400\n  with the supported operators listed.\n* Malformed keys, unknown operators, and unknown field names return\n  HTTP 400.\n\nExamples:\n\n* `filters.type[eq]=article` — only entries of type `article`.\n* `filters.modified[gte]=2026-01-01` — modified this year.\n* `filters.type[eq]=article&filters.fields.brandName[match]=adidas` — field filter scoped to one type.\n* `filters.fields.author.slug[eq]=jane-doe` — filter by a referenced entry's slug.\n\n#### Data projection (`select.*`)\n\nProjection returns a subset of the response by pruning fields and field\ntypes before values are resolved. The allowed names are project-specific —\nthey come from the project's content types — which is why `select.*`\nparameters are pattern-validated rather than declared as named parameters.\n\nSyntax: `select.<bucket>[<operator>]=<value>`. Values are comma-separated\nlists of names. `*` is the only wildcard and matches zero or more\ncharacters (e.g. `seo_*`).\n\n| Parameter | Effect |\n|---|---|\n| `select.fields[only]=a,b` | Keep only the named fields; drop everything else. |\n| `select.fields[except]=a,b` | Drop the named fields; keep everything else. |\n| `select.fields[locales]=a,b` | For the named fields that survive filtering, return the full per-locale value map instead of only the requested locale's value. |\n| `select.fields[blockDepth]=N` | Limit how many levels of block field children are kept. `0` removes all block fields; `preserveAll` prevents projection from trimming fields inside block children. |\n| `select.fieldTypes[only]=a,b` | Keep only fields of the named types (type IDs such as `text`, `richText`, `asset`). |\n| `select.fieldTypes[except]=a,b` | Drop fields of the named types. |\n\nThe composition-oriented `select.slots.*` operators are also accepted but\nhave no effect on entry responses (entries have no slots).\n\nBehavior:\n\n* Projection applies recursively at every block in the returned entry,\n  and is forwarded into entries resolved through reference fields.\n* When operators combine, all `[only]` sets are intersected first, then\n  `[except]` sets are subtracted — exclusion always wins.\n* Unknown field or type names are silent no-ops (the entry shape is\n  preserved; non-matching content is simply absent). Unknown operators\n  return HTTP 400.\n* An empty list (`select.fields[only]=`) strips every field; `[except]=*`\n  is equivalent.\n\nExamples:\n\n* `select.fields[only]=title,coverImage` — keep only titles and cover images on every entry in the list.\n* `select.fieldTypes[except]=richText` — everything except rich-text fields.\n* `select.fields[only]=title,seo_*&select.fields[locales]=seo_*` — lean payload keeping all locales on the SEO fields.\n","parameters":[{"$ref":"#/components/parameters/entryIDs"},{"$ref":"#/components/parameters/versionId"},{"$ref":"#/components/parameters/slug"},{"$ref":"#/components/parameters/createdBy"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/orderBy"},{"$ref":"#/components/parameters/facetBy"},{"$ref":"#/components/parameters/pattern"},{"$ref":"#/components/parameters/projectId"},{"$ref":"#/components/parameters/state"},{"$ref":"#/components/parameters/type"},{"$ref":"#/components/parameters/uiStatus"},{"$ref":"#/components/parameters/updatedBy"},{"$ref":"#/components/parameters/withTotalCount"},{"$ref":"#/components/parameters/withUIStatus"},{"$ref":"#/components/parameters/withWorkflowDefinition"},{"$ref":"#/components/parameters/withComponentIDs"},{"$ref":"#/components/parameters/keyword"},{"$ref":"#/components/parameters/skipPatternResolution"},{"$ref":"#/components/parameters/skipParameterResolution"},{"$ref":"#/components/parameters/skipOverridesResolution"},{"$ref":"#/components/parameters/skipContentTypeResolution"},{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/releaseId"},{"$ref":"#/components/parameters/search"},{"$ref":"#/components/parameters/searchSemantic"},{"$ref":"#/components/parameters/editions"},{"$ref":"#/components/parameters/format"},{"$ref":"#/components/parameters/deleted"}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryListResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Entry not found","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getEntries","summary":"In addition to the named parameters below, this endpoint accepts the"},"put":{"tags":["Entries & Entry Patterns"],"description":"Upserts an entry","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","state","entry"],"properties":{"projectId":{"type":"string","format":"uuid","description":"The project ID to upsert the entry to"},"state":{"type":"number","minimum":0,"maximum":64,"description":"The publishing state to upsert into. 0 = draft, 64 = published"},"entry":{"$ref":"#/components/schemas/EntryInput"},"created":{"description":"Ignored if present","type":"string"},"modified":{"description":"Ignored if present","type":"string"},"pattern":{"description":"True if the entry is a pattern (which can be referenced on other entries)","type":"boolean","default":false},"releaseId":{"type":"string","format":"uuid","description":"The release this entry belongs to. If not set, the entry belongs to the base"},"workflowId":{"type":"string","format":"uuid","description":"The workflow ID that this entry is assigned, if any"},"workflowStageId":{"type":"string","format":"uuid","description":"The stage ID the entry is in on its assigned workflow. When undefined, it is implicitly in the initial stage of the workflow"},"editionId":{"type":"string","format":"uuid","description":"The edition ID. When set, this is a child edition of the entry in _id.\n"},"editionName":{"type":"string","maxLength":100,"description":"The name of the entry or edition as shown in the editions listing.\nDescribes the purpose of an edition.\n"},"editionPriority":{"type":"integer","description":"The priority of the edition or entry. Higher numbers are higher priority.\nWhen multiple editions enable the same locale, the highest priority edition is used.\n"}},"additionalProperties":false}}}},"parameters":[{"in":"header","name":"X-If-Unmodified-Since","description":"Optional concurrency control header. If provided, the server will check that the entry\nhas not been modified since this timestamp. If the timestamp doesn't match the current\nmodified timestamp, a 409 Conflict response will be returned.\n","required":false,"schema":{"type":"string","example":"2024-01-15T10:30:45.123Z"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"description":"Conflict - Entry has been changed since being loaded","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putEntries","summary":"Upserts an entry"},"delete":{"tags":["Entries & Entry Patterns"],"description":"Deletes or unpublishes an entry","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["entryId","projectId"],"properties":{"entryId":{"type":"string","format":"uuid","description":"The ID of the entry to delete.\nWhen editionId is also passed, the entry remains and an edition under it is deleted.\nWhen editionId is omitted, and the entry has editions, all editions will also be deleted along with the entry.\n"},"editionId":{"type":"string","format":"uuid","description":"The edition ID to delete. When set, this deletes a child edition of the entryId.\nThe entry will remain when an edition is deleted.\nIf the entry ID is specified as the edition ID, the entry will be deleted _but any other editions will remain_ (this is used for unpublishing).\n"},"projectId":{"type":"string","format":"uuid","description":"The ID of the project the entry to delete belongs to"},"releaseId":{"type":"string","format":"uuid","description":"The ID of the release the entry to delete belongs to. If unspecified the entry belongs to the base.\nNote: Deleting an entry from a release will not delete the entry from the base\n"},"state":{"type":"number","minimum":0,"maximum":64,"description":"The state to delete (0 = draft, 64 = published [causes unpublishing], unspecified = all)"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteEntries","summary":"Deletes or unpublishes an entry"}},"/api/v1/favorites":{"get":{"description":"Lists the current user's favorites for a project. Optionally filtered by entityType. Returns stale rows when the underlying entity has been deleted - clients render a gone-state with a one-click 'Remove from favorites' affordance.","parameters":[{"schema":{"type":"string","description":"Project the favorites belong to."},"required":true,"description":"Project the favorites belong to.","name":"projectId","in":"query"},{"schema":{"type":"string","enum":["entry","composition","component","contentType","blockType","entryPattern","componentPattern","compositionPattern","asset"],"description":"Optional filter; omit to list every favorite for the project."},"required":false,"description":"Optional filter; omit to list every favorite for the project.","name":"entityType","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"default":0,"description":"Number of records to skip."},"required":false,"description":"Number of records to skip.","name":"offset","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":500,"default":200,"description":"Maximum number of records to return."},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"favorites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"},"entityType":{"type":"string","enum":["entry","composition","component","contentType","blockType","entryPattern","componentPattern","compositionPattern","asset"]},"entityId":{"type":"string","minLength":1,"maxLength":255},"created":{"type":"string","format":"date-time"}},"required":["id","projectId","entityType","entityId","created"],"additionalProperties":false}},"totalCount":{"type":"number"}},"required":["favorites","totalCount"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Favorites"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getFavorites","summary":"Lists the current user's favorites for a project."},"delete":{"description":"Removes a favorite. Body-keyed by `(entityType, entityId)` rather than by row id so toggling doesn't need a prior fetch. Returns 204 even if the row was already absent (delete is idempotent).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"entityType":{"type":"string","enum":["entry","composition","component","contentType","blockType","entryPattern","componentPattern","compositionPattern","asset"]},"entityId":{"type":"string","minLength":1,"maxLength":255}},"required":["projectId","entityType","entityId"],"additionalProperties":false}}}},"responses":{"204":{"description":"No Content","content":{"application/json":{"schema":{"type":"string","maxLength":0}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Favorites"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteFavorites","summary":"Removes a favorite."},"put":{"description":"Idempotent upsert. Adds a favorite for the current user if none exists; returns the existing row otherwise. Identity is taken from the verified token, never the body.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"entityType":{"type":"string","enum":["entry","composition","component","contentType","blockType","entryPattern","componentPattern","compositionPattern","asset"]},"entityId":{"type":"string","minLength":1,"maxLength":255}},"required":["projectId","entityType","entityId"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"},"entityType":{"type":"string","enum":["entry","composition","component","contentType","blockType","entryPattern","componentPattern","compositionPattern","asset"]},"entityId":{"type":"string","minLength":1,"maxLength":255},"created":{"type":"string","format":"date-time"}},"required":["id","projectId","entityType","entityId","created"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"description":"Quota exceeded: at most 100 favorite entries allowed for this project. Remove an existing entry before creating a new one."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Favorites"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putFavorites","summary":"Idempotent upsert."},"options":{"tags":["Favorites"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsFavorites","summary":"Handles preflight requests."}},"/api/v1/files":{"get":{"description":"Gets a single file","parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"url","in":"query"},{"schema":{"type":"string"},"required":false,"name":"sourceId","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"projectId","in":"query"}],"responses":{"200":{"description":"The file","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"state":{"type":"number"},"url":{"type":"string"},"name":{"type":"string"},"mediaType":{"type":"string"},"metadata":{"nullable":true},"size":{"type":"number"},"sourceId":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}},"required":["id","state","name","mediaType","size"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"File not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Files"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getFiles","summary":"Gets a single file"},"delete":{"description":"Deletes a file","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"fileId":{"type":"string"},"sourceId":{"type":"string"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"responses":{"200":{"description":"The file was deleted","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"File not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Files"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteFiles","summary":"Deletes a file"},"post":{"description":"Creates a new file","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"projectId":{"type":"string","format":"uuid"},"sourceId":{"type":"string","maxLength":128},"teamId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":128},"size":{"type":"number","minimum":1,"maximum":52428800},"mediaType":{"type":"string","minLength":1},"width":{"type":"number","minimum":1},"height":{"type":"number","minimum":1},"expiresAt":{"type":"string","format":"date-time","description":"Optional expiry time for temporary uploads. If set, and the file is not attached to an asset at that time, it will be automatically deleted."}},"required":["name","size","mediaType"],"additionalProperties":false}}}},"responses":{"202":{"description":"Upload URL issued","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"uploadUrl":{"type":"string"},"method":{"type":"string","enum":["POST","PUT"]}},"required":["id","uploadUrl","method"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Project not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Files"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"postFiles","summary":"Creates a new file"},"patch":{"description":"Replaces a file while preserving the existing URL","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid"},"existingFileId":{"type":"string","format":"uuid"},"replacementFileId":{"type":"string","format":"uuid"}},"required":["projectId","existingFileId","replacementFileId"],"additionalProperties":false}}}},"responses":{"200":{"description":"The file was replaced","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"state":{"type":"number"},"url":{"type":"string"},"name":{"type":"string"},"mediaType":{"type":"string"},"metadata":{"nullable":true},"size":{"type":"number"},"sourceId":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"deletedReplacementFileId":{"type":"string","format":"uuid"}},"required":["id","state","name","mediaType","size"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"File not found"},"409":{"description":"Conflict: the replacement file is already attached to another asset. Use an unattached file (for example a temporary upload) as the replacement."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Files"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"patchFiles","summary":"Replaces a file while preserving the existing URL"}},"/api/v1/insights-connections":{"get":{"description":"Gets insights connection for a project and workspace","parameters":[{"schema":{"type":"string"},"required":true,"name":"projectId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"workspace","in":"query"},{"schema":{"type":"string"},"required":false,"name":"id","in":"query"},{"schema":{"type":"string","enum":["mcp"]},"required":false,"name":"tokenScope","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"insightsConnection":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"},"workspace":{"type":"string"},"trackingToken":{"type":"string"},"dashboardToken":{"type":"string"},"apiHost":{"type":"string"},"region":{"type":"string"}},"required":["id","projectId","workspace","trackingToken","dashboardToken","apiHost","region"],"additionalProperties":false},"mcpToken":{"type":"object","properties":{"token":{"type":"string"},"host":{"type":"string"},"exp":{"type":"number"}},"required":["token","host","exp"],"additionalProperties":false}},"required":["insightsConnection"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Insights"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getInsightsConnections","summary":"Gets insights connection for a project and workspace"},"delete":{"description":"Deletes an insights connection","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"additionalProperties":false}}}},"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Insights"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteInsightsConnections","summary":"Deletes an insights connection"},"put":{"description":"Creates an insights connection with read/write tokens","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"workspace":{"type":"string","minLength":1,"maxLength":255},"apiHost":{"type":"string"},"region":{"type":"string","enum":["europe-west2","europe-west3","us-east4","northamerica-northeast2","eu-central-1","eu-west-1","us-east-1","us-west-2","local"]}},"required":["projectId","workspace","region"],"additionalProperties":false}}}},"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"201":{"description":"201 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Insights"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putInsightsConnections","summary":"Creates an insights connection with read/write tokens"}},"/api/v1/insights":{"get":{"tags":["Insights"],"parameters":[{"in":"query","name":"insightsType","description":"The type of insights to fetch","required":true,"schema":{"type":"string"}},{"in":"query","name":"projectId","description":"The project to fetch insights for","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InsightDefinition"}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getInsights","description":"GET /api/v1/insights (Insights)","summary":"GET /api/v1/insights (Insights)"}},"/api/v1/integration-credentials":{"delete":{"description":"Revokes the credential for an integration definition. Future grants and refreshes will fail until a new credential is minted. In-flight delegation tokens remain valid until natural expiry.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","format":"uuid","description":"The team ID that owns the integration"},"integrationDefinitionId":{"type":"string","format":"uuid","description":"The integration definition ID to mint or revoke credentials for"},"kind":{"type":"string","enum":["app_secret"],"description":"Kind of credential to rotate or revoke. Currently only `app_secret` is supported."}},"required":["teamId","integrationDefinitionId","kind"],"additionalProperties":false}}}},"responses":{"204":{"description":"Credential revoked"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Integration definition not found in this team, or no credential of the given kind is configured"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteIntegrationCredentials","summary":"Revokes the credential for an integration definition."},"post":{"description":"Mints or rotates the credential for an integration definition. Atomic: a successful response invalidates any previously-issued secret of the same kind. The plaintext secret is returned in the response body and cannot be retrieved later.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","format":"uuid","description":"The team ID that owns the integration"},"integrationDefinitionId":{"type":"string","format":"uuid","description":"The integration definition ID to mint or revoke credentials for"},"kind":{"type":"string","enum":["app_secret"],"description":"Kind of credential to rotate or revoke. Currently only `app_secret` is supported."}},"required":["teamId","integrationDefinitionId","kind"],"additionalProperties":false}}}},"responses":{"200":{"description":"Credential minted or rotated.","content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["app_secret"],"description":"Kind of credential to rotate or revoke. Currently only `app_secret` is supported."},"integrationDefinitionId":{"type":"string","format":"uuid"},"appSecret":{"type":"string","description":"Plaintext app secret. Only returned on this response; cannot be retrieved later."},"createdAt":{"type":"string","description":"ISO timestamp when the secret became effective."}},"required":["kind","integrationDefinitionId","appSecret","createdAt"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Integration definition not found in this team"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"postIntegrationCredentials","summary":"Mints or rotates the credential for an integration definition."},"options":{"tags":["Integrations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsIntegrationCredentials","summary":"Handles preflight requests."}},"/api/v1/integration-definitions":{"get":{"description":"Gets a list of Mesh apps that are available for a Uniform team","parameters":[{"schema":{"type":"string","description":"The team ID"},"required":true,"description":"The team ID","name":"teamId","in":"query"},{"schema":{"type":"boolean","nullable":true,"default":false,"description":"Whether to include Mesh apps that are shared publicly to all teams, or only custom apps registered on this team."},"required":false,"description":"Whether to include Mesh apps that are shared publicly to all teams, or only custom apps registered on this team.","name":"includePublic","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"Whether to use team-specific integration types or team-agnostic types (for serialization across projects)"},"required":false,"description":"Whether to use team-specific integration types or team-agnostic types (for serialization across projects)","name":"teamSpecificType","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"$schema":{"type":"string","description":"Optional reference to the JSON schema used to validate this manifest (for editor/agent tooling). Ignored by Uniform."},"type":{"type":"string","minLength":2,"pattern":"^[a-z0-9-_]+$","description":"Integration public id. Do not change after registering. Must be unique and lowercase alphanumeric with hyphens/underscores."},"displayName":{"type":"string","minLength":1,"description":"Display name used in the UI for the integration."},"logoIconUrl":{"type":"string","description":"URL to the integration's logo icon (larger, used on listing)."},"badgeIconUrl":{"type":"string","description":"URL to the integration's badge icon (small, round, used as a badge in the UI)."},"category":{"type":"string","enum":["analytics","cdn","classic","commerce","content","comingSoon","data","deprecated","email","framework","search","starters","translation","uniform","ai","unknown"],"description":"Category of the integration."},"public":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string"},"description":"List of permissions to access sensitive data or perform certain actions."},"identityDelegation":{"type":"boolean","description":"When true, this integration can request delegation tokens to call Uniform APIs on behalf of the current user."},"integrationId":{"type":"string","format":"uuid"},"hasAppSecret":{"type":"boolean"},"baseLocationUrl":{"type":"string","description":"Prefix for location URL paths. When set, location URLs may be relative to it; otherwise full URLs are required."},"locations":{"type":"object","properties":{"install":{"type":"object","properties":{"description":{"type":"array","items":{"type":"string"}},"informationUrl":{"type":"string"},"canvasPackageUrl":{"type":"string"}},"description":"Locations used during installation of the integration."},"settings":{"type":"object","properties":{"url":{"type":"string"},"locations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}}},"required":["url"],"description":"Settings location for configuring the integration."},"canvas":{"type":"object","properties":{"parameterTypes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string"},"configureUrl":{"type":"string"},"editorUrl":{"type":"string"},"configurationLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"editorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"renderableInPropertyPanel":{"type":"boolean"},"localizable":{"type":"string","enum":["default-yes","default-no","yes","no"]},"allowedPlacement":{"type":"array","items":{"type":"string","enum":["parameter","field"]}}},"required":["type","displayName","editorUrl"]}},"editorTools":{"anyOf":[{"type":"object","properties":{"composition":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"componentPattern":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"compositionDefaults":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"entry":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"entryPattern":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false},"editorTypes":{"type":"array","items":{"type":"string","enum":["composition","componentPattern","compositionDefaults","entry","entryPattern"]}}},"required":["id","name","url"]}}]},"personalization":{"type":"object","properties":{"selectionAlgorithms":{"type":"object","additionalProperties":{"type":"object","properties":{"displayName":{"type":"string"},"description":{"type":"string"},"criteriaEditorUrl":{"type":"string"}},"required":["displayName"]}}}}},"description":"Locations within Uniform Canvas for the integration to extend."},"dataConnectors":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string"},"dataSourceEditorUrl":{"type":"string"},"supportsUnpublishedData":{"type":"boolean"},"dataSourceEditorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"dataArchetypes":{"type":"object","additionalProperties":{"type":"object","properties":{"displayName":{"type":"string"},"typeEditorUrl":{"type":"string"},"typeEditorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"dataEditorUrl":{"type":"string"},"dataEditorUrlLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"embeddedEditor":{"type":"string"},"dataResourceSelectorUrl":{"type":"string"},"dataResourceSelectorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}}},"required":["displayName"]}},"badgeIconUrl":{"type":"string"}},"required":["type","displayName"]},"description":"Data Connector(s) provided by the integration."},"assetLibrary":{"type":"object","properties":{"assetLibraryUrl":{"type":"string"},"assetParameterUrl":{"type":"string"},"assetLibraryLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"unstable_dynamicAssets":{"type":"object","properties":{"dataConnectorId":{"type":"string"},"assetsListArchetypeId":{"type":"string"},"singleAssetArchetypeId":{"type":"string"}},"required":["dataConnectorId","assetsListArchetypeId","singleAssetArchetypeId"]}},"required":["assetLibraryUrl","assetParameterUrl"],"description":"Asset Library provided by the integration."},"unstable_assetLibrary":{"type":"object","properties":{"url":{"type":"string"},"dynamicAssets":{"type":"object","properties":{"dataConnectorId":{"type":"string"},"assetsListArchetypeId":{"type":"string"},"singleAssetArchetypeId":{"type":"string"}},"required":["dataConnectorId","assetsListArchetypeId","singleAssetArchetypeId"]}},"required":["url"],"description":"Deprecated. Use `assetLibrary` instead."},"ai":{"type":"object","properties":{"generateUrl":{"type":"string"},"metadataUrl":{"type":"string"},"prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"text":{"type":"string"},"data":{"type":"object","nullable":true,"properties":{"arguments":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string","nullable":true},"helpText":{"type":"string","nullable":true},"default":{"type":"string","nullable":true}},"required":["type"]}},"metadata":{"nullable":true}}},"parameterTypes":{"type":"array","items":{"type":"string"}}},"required":["id","name","text","parameterTypes"]}}},"required":["generateUrl"],"description":"AI configuration for the integration."},"unstable_ai":{"type":"object","properties":{"generateUrl":{"type":"string"},"metadataUrl":{"type":"string"}},"required":["generateUrl"],"description":"Deprecated. Use `ai` instead."},"aiAgents":{"type":"object","properties":{"functionCalling":{"type":"object","properties":{"handlerUrl":{"type":"string"},"functions":{"type":"array","items":{"type":"object","properties":{"definition":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"nullable":true}},"strict":{"type":"boolean"}},"required":["name","description","parameters","strict"]},"systemParameters":{"type":"array","items":{"type":"string","enum":["pageHtml"]}},"includedAgents":{"type":"array","items":{"type":"string","enum":["scout","sage"]}}},"required":["definition"]}}},"required":["handlerUrl","functions"]}},"description":"Deprecated/experimental. AI agents function-calling configuration."},"tools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Deprecated. Will be removed shortly."},"projectTools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Project-level tools provided by the integration."},"dashboardTools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Dashboard-level tools provided by the integration."}},"additionalProperties":false,"description":"Locations where the integration is exposed within the Uniform application."},"unstable_prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"text":{"type":"string"},"data":{"type":"object","nullable":true,"properties":{"arguments":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string","nullable":true},"helpText":{"type":"string","nullable":true},"default":{"type":"string","nullable":true}},"required":["type"]}},"metadata":{"nullable":true}}},"parameterTypes":{"type":"array","items":{"type":"string"}}},"required":["id","name","text","parameterTypes"]},"description":"Deprecated. Use `locations.ai.prompts` instead."}},"required":["type","displayName","locations"]}}},"required":["results"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getIntegrationDefinitions","summary":"Gets a list of Mesh apps that are available for a Uniform team"},"delete":{"description":"Removes a Mesh app definition from a team. Note that public integrations may not be deleted without contacting Uniform.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"The team ID"},"type":{"type":"string","description":"The integration type to remove"}},"required":["teamId","type"],"additionalProperties":false}}}},"responses":{"204":{"description":"Delete successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Integration to delete was not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteIntegrationDefinitions","summary":"Removes a Mesh app definition from a team."},"put":{"description":"Creates or updates a Mesh app definition on a team.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"The team ID"},"data":{"type":"object","properties":{"$schema":{"type":"string","description":"Optional reference to the JSON schema used to validate this manifest (for editor/agent tooling). Ignored by Uniform."},"type":{"type":"string","minLength":2,"pattern":"^[a-z0-9-_]+$","description":"Integration public id. Do not change after registering. Must be unique and lowercase alphanumeric with hyphens/underscores."},"displayName":{"type":"string","minLength":1,"description":"Display name used in the UI for the integration."},"logoIconUrl":{"type":"string","description":"URL to the integration's logo icon (larger, used on listing)."},"badgeIconUrl":{"type":"string","description":"URL to the integration's badge icon (small, round, used as a badge in the UI)."},"category":{"type":"string","enum":["analytics","cdn","classic","commerce","content","comingSoon","data","deprecated","email","framework","search","starters","translation","uniform","ai","unknown"],"description":"Category of the integration."},"scopes":{"type":"array","items":{"type":"string"},"description":"List of permissions to access sensitive data or perform certain actions."},"identityDelegation":{"type":"boolean","description":"When true, this integration can request delegation tokens to call Uniform APIs on behalf of the current user."},"baseLocationUrl":{"type":"string","description":"Prefix for location URL paths. When set, location URLs may be relative to it; otherwise full URLs are required."},"locations":{"type":"object","properties":{"install":{"type":"object","properties":{"description":{"type":"array","items":{"type":"string"}},"informationUrl":{"type":"string"},"canvasPackageUrl":{"type":"string"}},"description":"Locations used during installation of the integration."},"settings":{"type":"object","properties":{"url":{"type":"string"},"locations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}}},"required":["url"],"description":"Settings location for configuring the integration."},"canvas":{"type":"object","properties":{"parameterTypes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string"},"configureUrl":{"type":"string"},"editorUrl":{"type":"string"},"configurationLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"editorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"renderableInPropertyPanel":{"type":"boolean"},"localizable":{"type":"string","enum":["default-yes","default-no","yes","no"]},"allowedPlacement":{"type":"array","items":{"type":"string","enum":["parameter","field"]}}},"required":["type","displayName","editorUrl"]}},"editorTools":{"anyOf":[{"type":"object","properties":{"composition":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"componentPattern":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"compositionDefaults":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"entry":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"entryPattern":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false},"editorTypes":{"type":"array","items":{"type":"string","enum":["composition","componentPattern","compositionDefaults","entry","entryPattern"]}}},"required":["id","name","url"]}}]},"personalization":{"type":"object","properties":{"selectionAlgorithms":{"type":"object","additionalProperties":{"type":"object","properties":{"displayName":{"type":"string"},"description":{"type":"string"},"criteriaEditorUrl":{"type":"string"}},"required":["displayName"]}}}}},"description":"Locations within Uniform Canvas for the integration to extend."},"dataConnectors":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string"},"dataSourceEditorUrl":{"type":"string"},"supportsUnpublishedData":{"type":"boolean"},"dataSourceEditorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"dataArchetypes":{"type":"object","additionalProperties":{"type":"object","properties":{"displayName":{"type":"string"},"typeEditorUrl":{"type":"string"},"typeEditorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"dataEditorUrl":{"type":"string"},"dataEditorUrlLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"embeddedEditor":{"type":"string"},"dataResourceSelectorUrl":{"type":"string"},"dataResourceSelectorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}}},"required":["displayName"]}},"badgeIconUrl":{"type":"string"}},"required":["type","displayName"]},"description":"Data Connector(s) provided by the integration."},"assetLibrary":{"type":"object","properties":{"assetLibraryUrl":{"type":"string"},"assetParameterUrl":{"type":"string"},"assetLibraryLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"unstable_dynamicAssets":{"type":"object","properties":{"dataConnectorId":{"type":"string"},"assetsListArchetypeId":{"type":"string"},"singleAssetArchetypeId":{"type":"string"}},"required":["dataConnectorId","assetsListArchetypeId","singleAssetArchetypeId"]}},"required":["assetLibraryUrl","assetParameterUrl"],"description":"Asset Library provided by the integration."},"unstable_assetLibrary":{"type":"object","properties":{"url":{"type":"string"},"dynamicAssets":{"type":"object","properties":{"dataConnectorId":{"type":"string"},"assetsListArchetypeId":{"type":"string"},"singleAssetArchetypeId":{"type":"string"}},"required":["dataConnectorId","assetsListArchetypeId","singleAssetArchetypeId"]}},"required":["url"],"description":"Deprecated. Use `assetLibrary` instead."},"ai":{"type":"object","properties":{"generateUrl":{"type":"string"},"metadataUrl":{"type":"string"},"prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"text":{"type":"string"},"data":{"type":"object","nullable":true,"properties":{"arguments":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string","nullable":true},"helpText":{"type":"string","nullable":true},"default":{"type":"string","nullable":true}},"required":["type"]}},"metadata":{"nullable":true}}},"parameterTypes":{"type":"array","items":{"type":"string"}}},"required":["id","name","text","parameterTypes"]}}},"required":["generateUrl"],"description":"AI configuration for the integration."},"unstable_ai":{"type":"object","properties":{"generateUrl":{"type":"string"},"metadataUrl":{"type":"string"}},"required":["generateUrl"],"description":"Deprecated. Use `ai` instead."},"aiAgents":{"type":"object","properties":{"functionCalling":{"type":"object","properties":{"handlerUrl":{"type":"string"},"functions":{"type":"array","items":{"type":"object","properties":{"definition":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"nullable":true}},"strict":{"type":"boolean"}},"required":["name","description","parameters","strict"]},"systemParameters":{"type":"array","items":{"type":"string","enum":["pageHtml"]}},"includedAgents":{"type":"array","items":{"type":"string","enum":["scout","sage"]}}},"required":["definition"]}}},"required":["handlerUrl","functions"]}},"description":"Deprecated/experimental. AI agents function-calling configuration."},"tools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Deprecated. Will be removed shortly."},"projectTools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Project-level tools provided by the integration."},"dashboardTools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Dashboard-level tools provided by the integration."}},"additionalProperties":false,"description":"Locations where the integration is exposed within the Uniform application."},"unstable_prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"text":{"type":"string"},"data":{"type":"object","nullable":true,"properties":{"arguments":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string","nullable":true},"helpText":{"type":"string","nullable":true},"default":{"type":"string","nullable":true}},"required":["type"]}},"metadata":{"nullable":true}}},"parameterTypes":{"type":"array","items":{"type":"string"}}},"required":["id","name","text","parameterTypes"]},"description":"Deprecated. Use `locations.ai.prompts` instead."}},"required":["type","displayName","locations"]}},"required":["teamId","data"]}}}},"responses":{"200":{"description":"Update success","content":{"application/json":{"schema":{"type":"object","properties":{"$schema":{"type":"string","description":"Optional reference to the JSON schema used to validate this manifest (for editor/agent tooling). Ignored by Uniform."},"type":{"type":"string","minLength":2,"pattern":"^[a-z0-9-_]+$","description":"Integration public id. Do not change after registering. Must be unique and lowercase alphanumeric with hyphens/underscores."},"displayName":{"type":"string","minLength":1,"description":"Display name used in the UI for the integration."},"logoIconUrl":{"type":"string","description":"URL to the integration's logo icon (larger, used on listing)."},"badgeIconUrl":{"type":"string","description":"URL to the integration's badge icon (small, round, used as a badge in the UI)."},"category":{"type":"string","enum":["analytics","cdn","classic","commerce","content","comingSoon","data","deprecated","email","framework","search","starters","translation","uniform","ai","unknown"],"description":"Category of the integration."},"public":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string"},"description":"List of permissions to access sensitive data or perform certain actions."},"identityDelegation":{"type":"boolean","description":"When true, this integration can request delegation tokens to call Uniform APIs on behalf of the current user."},"integrationId":{"type":"string","format":"uuid","description":"Stable id for this integration definition. Required for identity delegation token exchange."},"hasAppSecret":{"type":"boolean"},"baseLocationUrl":{"type":"string","description":"Prefix for location URL paths. When set, location URLs may be relative to it; otherwise full URLs are required."},"locations":{"type":"object","properties":{"install":{"type":"object","properties":{"description":{"type":"array","items":{"type":"string"}},"informationUrl":{"type":"string"},"canvasPackageUrl":{"type":"string"}},"description":"Locations used during installation of the integration."},"settings":{"type":"object","properties":{"url":{"type":"string"},"locations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}}},"required":["url"],"description":"Settings location for configuring the integration."},"canvas":{"type":"object","properties":{"parameterTypes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string"},"configureUrl":{"type":"string"},"editorUrl":{"type":"string"},"configurationLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"editorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"renderableInPropertyPanel":{"type":"boolean"},"localizable":{"type":"string","enum":["default-yes","default-no","yes","no"]},"allowedPlacement":{"type":"array","items":{"type":"string","enum":["parameter","field"]}}},"required":["type","displayName","editorUrl"]}},"editorTools":{"anyOf":[{"type":"object","properties":{"composition":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"componentPattern":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"compositionDefaults":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"entry":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"entryPattern":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false},"editorTypes":{"type":"array","items":{"type":"string","enum":["composition","componentPattern","compositionDefaults","entry","entryPattern"]}}},"required":["id","name","url"]}}]},"personalization":{"type":"object","properties":{"selectionAlgorithms":{"type":"object","additionalProperties":{"type":"object","properties":{"displayName":{"type":"string"},"description":{"type":"string"},"criteriaEditorUrl":{"type":"string"}},"required":["displayName"]}}}}},"description":"Locations within Uniform Canvas for the integration to extend."},"dataConnectors":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string"},"dataSourceEditorUrl":{"type":"string"},"supportsUnpublishedData":{"type":"boolean"},"dataSourceEditorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"dataArchetypes":{"type":"object","additionalProperties":{"type":"object","properties":{"displayName":{"type":"string"},"typeEditorUrl":{"type":"string"},"typeEditorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"dataEditorUrl":{"type":"string"},"dataEditorUrlLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"embeddedEditor":{"type":"string"},"dataResourceSelectorUrl":{"type":"string"},"dataResourceSelectorLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}}},"required":["displayName"]}},"badgeIconUrl":{"type":"string"}},"required":["type","displayName"]},"description":"Data Connector(s) provided by the integration."},"assetLibrary":{"type":"object","properties":{"assetLibraryUrl":{"type":"string"},"assetParameterUrl":{"type":"string"},"assetLibraryLocations":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string"},"layout":{"type":"object","properties":{"height":{"type":"string","enum":["full-height"]},"width":{"type":"string","enum":["wide"]}},"additionalProperties":false}},"required":["url"],"additionalProperties":false}},"unstable_dynamicAssets":{"type":"object","properties":{"dataConnectorId":{"type":"string"},"assetsListArchetypeId":{"type":"string"},"singleAssetArchetypeId":{"type":"string"}},"required":["dataConnectorId","assetsListArchetypeId","singleAssetArchetypeId"]}},"required":["assetLibraryUrl","assetParameterUrl"],"description":"Asset Library provided by the integration."},"unstable_assetLibrary":{"type":"object","properties":{"url":{"type":"string"},"dynamicAssets":{"type":"object","properties":{"dataConnectorId":{"type":"string"},"assetsListArchetypeId":{"type":"string"},"singleAssetArchetypeId":{"type":"string"}},"required":["dataConnectorId","assetsListArchetypeId","singleAssetArchetypeId"]}},"required":["url"],"description":"Deprecated. Use `assetLibrary` instead."},"ai":{"type":"object","properties":{"generateUrl":{"type":"string"},"metadataUrl":{"type":"string"},"prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"text":{"type":"string"},"data":{"type":"object","nullable":true,"properties":{"arguments":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string","nullable":true},"helpText":{"type":"string","nullable":true},"default":{"type":"string","nullable":true}},"required":["type"]}},"metadata":{"nullable":true}}},"parameterTypes":{"type":"array","items":{"type":"string"}}},"required":["id","name","text","parameterTypes"]}}},"required":["generateUrl"],"description":"AI configuration for the integration."},"unstable_ai":{"type":"object","properties":{"generateUrl":{"type":"string"},"metadataUrl":{"type":"string"}},"required":["generateUrl"],"description":"Deprecated. Use `ai` instead."},"aiAgents":{"type":"object","properties":{"functionCalling":{"type":"object","properties":{"handlerUrl":{"type":"string"},"functions":{"type":"array","items":{"type":"object","properties":{"definition":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"nullable":true}},"strict":{"type":"boolean"}},"required":["name","description","parameters","strict"]},"systemParameters":{"type":"array","items":{"type":"string","enum":["pageHtml"]}},"includedAgents":{"type":"array","items":{"type":"string","enum":["scout","sage"]}}},"required":["definition"]}}},"required":["handlerUrl","functions"]}},"description":"Deprecated/experimental. AI agents function-calling configuration."},"tools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Deprecated. Will be removed shortly."},"projectTools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Project-level tools provided by the integration."},"dashboardTools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"iconUrl":{"type":"string"},"access":{"type":"object","properties":{"teamAdminRequired":{"type":"boolean","enum":[true]}},"additionalProperties":false}},"required":["id","name","url"]},"description":"Dashboard-level tools provided by the integration."}},"additionalProperties":false,"description":"Locations where the integration is exposed within the Uniform application."},"unstable_prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"text":{"type":"string"},"data":{"type":"object","nullable":true,"properties":{"arguments":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"type":{"type":"string"},"displayName":{"type":"string","nullable":true},"helpText":{"type":"string","nullable":true},"default":{"type":"string","nullable":true}},"required":["type"]}},"metadata":{"nullable":true}}},"parameterTypes":{"type":"array","items":{"type":"string"}}},"required":["id","name","text","parameterTypes"]},"description":"Deprecated. Use `locations.ai.prompts` instead."}},"required":["type","displayName","integrationId","locations"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putIntegrationDefinitions","summary":"Creates or updates a Mesh app definition on a team."},"options":{"tags":["Integrations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsIntegrationDefinitions","summary":"Handles preflight requests."}},"/api/v1/integration-edgehancers":{"get":{"description":"Gets a list of custom edgehancers for a project.","parameters":[{"schema":{"type":"string","description":"The project ID"},"required":true,"description":"The project ID","name":"projectId","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"edgehancers":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}}},"description":"Custom edgehancers availability by connectorType -> archetype -> hook -> isAvailable (always true if defined)"}},"required":["edgehancers"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getIntegrationEdgehancers","summary":"Gets a list of custom edgehancers for a project."},"delete":{"description":"Removes a custom edgehancer from a Mesh app. The integration will not be removed, only the custom code.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"The team ID"},"connectorType":{"type":"string","description":"The integration dataConnector to remove the edgehancer from"},"archetype":{"type":"string","description":"The data connector archetype name to remove the edgehancer from"},"hook":{"type":"string","enum":["preRequest","request","createAIDataResourceEdit","afterAIDataResourceEdit"],"description":"The hook to remove the edgehancer from"}},"required":["teamId","connectorType","archetype","hook"],"additionalProperties":false}}}},"responses":{"204":{"description":"Delete successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Integration/connector/archetype/hook did not exist, nothing deleted."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"},"502":{"description":"Internal error"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteIntegrationEdgehancers","summary":"Removes a custom edgehancer from a Mesh app."},"put":{"description":"Creates or updates a custom edgehancer on a Mesh app.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"The team ID"},"connectorType":{"type":"string","description":"The integration dataConnector to attach the edgehancer to"},"archetype":{"type":"string","description":"The data connector archetype name to attach the edgehancer to"},"hook":{"type":"string","enum":["preRequest","request","createAIDataResourceEdit","afterAIDataResourceEdit"],"description":"The hook to attach the edgehancer to"},"code":{"type":"string","maxLength":1048576,"description":"ESM JS code to run for the custom edgehancer. It runs in a v8 runtime, and is expected to default-export a function which conforms to the hook type specs."},"compatibilityDate":{"type":"string","description":"Date indicating targeted support in the custom edgehancer runtime. Backwards incompatible fixes to the runtime following this date will not affect this custom edgehancer."}},"required":["teamId","connectorType","archetype","hook","code"],"additionalProperties":false}}}},"responses":{"204":{"description":"Put successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Integration exposing selected connector type and archetype does not exist"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"},"502":{"description":"Internal error"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putIntegrationEdgehancers","summary":"Creates or updates a custom edgehancer on a Mesh app."},"options":{"tags":["Integrations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsIntegrationEdgehancers","summary":"Handles preflight requests."}},"/api/v1/integration-installations":{"get":{"description":"Gets a list of installed integrations for a Uniform Project","parameters":[{"schema":{"type":"string","description":"The project ID"},"required":true,"description":"The project ID","name":"projectId","in":"query"},{"schema":{"type":"string","description":"Limit results to a single integration type"},"required":false,"description":"Limit results to a single integration type","name":"type","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"Whether to match the passed type exactly or to treat the type as a prefix"},"required":false,"description":"Whether to match the passed type exactly or to treat the type as a prefix","name":"exactType","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"Whether to use team-specific integration types or team-agnostic types (for serialization across projects)"},"required":false,"description":"Whether to use team-specific integration types or team-agnostic types (for serialization across projects)","name":"teamSpecificType","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"data":{"type":"object","additionalProperties":{"type":["array","boolean","integer","number","object","string"]}}},"required":["type"]}}},"required":["results"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getIntegrationInstallations","summary":"Gets a list of installed integrations for a Uniform Project"},"delete":{"description":"Removes an integration from a project.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"type":{"type":"string","description":"The integration type to remove"},"exactType":{"type":"boolean","nullable":true,"description":"Whether to match the passed type exactly or to treat the type as a prefix"}},"required":["projectId","type"],"additionalProperties":false}}}},"responses":{"204":{"description":"Delete successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Integration to delete was not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteIntegrationInstallations","summary":"Removes an integration from a project."},"put":{"description":"Installs or updates an integration on a Uniform Project. If data is not provided, it will remain unmodified from any existing value.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"exactType":{"type":"boolean","nullable":true,"description":"Whether to match the passed type exactly or to treat the type as a prefix"},"type":{"type":"string"},"data":{"type":"object","additionalProperties":{"type":["array","boolean","integer","number","object","string"]}}},"required":["projectId","type"],"additionalProperties":false}}}},"responses":{"204":{"description":"Install or update success"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putIntegrationInstallations","summary":"Installs or updates an integration on a Uniform Project."},"options":{"tags":["Integrations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsIntegrationInstallations","summary":"Handles preflight requests."}},"/api/v1/integration-property-editors":{"get":{"description":"Gets a list of propertyType and hook names for the current team, including public integrations' hooks.","parameters":[{"schema":{"type":"string","description":"The team ID"},"required":true,"description":"The team ID","name":"teamId","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"propertyEditors":{"type":"object","additionalProperties":{"type":"object","properties":{"createAIEdit":{"type":"object","properties":{"id":{"type":"string","description":"Internal unique identifier for the editor"},"integrationType":{"type":"string","description":"The integration type"},"isPublic":{"type":"boolean","description":"Whether this is a public integration"},"teamId":{"type":"string","description":"The team ID for public integrations. Omitted for private integrations."}},"required":["id","integrationType","isPublic"],"additionalProperties":false},"afterAIEdit":{"type":"object","properties":{"id":{"type":"string","description":"Internal unique identifier for the editor"},"integrationType":{"type":"string","description":"The integration type"},"isPublic":{"type":"boolean","description":"Whether this is a public integration"},"teamId":{"type":"string","description":"The team ID for public integrations. Omitted for private integrations."}},"required":["id","integrationType","isPublic"],"additionalProperties":false}},"additionalProperties":false},"description":"A map of property types to a map of hook names to integration details"}},"required":["propertyEditors"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Team not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getIntegrationPropertyEditors","summary":"Gets a list of propertyType and hook names for the current team, including public integrations' h..."},"delete":{"description":"Removes a custom AI property editor from a Mesh app. The property type will not be removed, only the custom code.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"The team ID"},"propertyType":{"type":"string","description":"The property type to remove the editor from"},"hook":{"type":"string","enum":["createAIEdit","afterAIEdit"],"description":"The hook to remove the editor from"}},"required":["teamId","propertyType","hook"],"additionalProperties":false}}}},"responses":{"204":{"description":"Delete successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Property type/hook did not exist, nothing deleted."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"},"502":{"description":"Internal error"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteIntegrationPropertyEditors","summary":"Removes a custom AI property editor from a Mesh app."},"put":{"description":"Creates or updates a custom AI property editor on a Mesh app.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"The team ID"},"propertyType":{"type":"string","description":"The property type to attach the editor to"},"hook":{"type":"string","enum":["createAIEdit","afterAIEdit"],"description":"The hook to attach the editor to"},"code":{"type":"string","maxLength":1048576,"description":"ESM JS code to run for the custom property editor. It runs in a v8 runtime, and is expected to default-export a function which conforms to the hook type specs."},"compatibilityDate":{"type":"string","description":"Date indicating targeted support in the custom property editor runtime. Backwards incompatible fixes to the runtime following this date will not affect this custom property editor."}},"required":["teamId","propertyType","hook","code"],"additionalProperties":false}}}},"responses":{"204":{"description":"Put successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Property type does not exist"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"},"502":{"description":"Internal error"}},"tags":["Integrations"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putIntegrationPropertyEditors","summary":"Creates or updates a custom AI property editor on a Mesh app."},"options":{"tags":["Integrations"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsIntegrationPropertyEditors","summary":"Handles preflight requests."}},"/api/v1/invitations":{"get":{"description":"Lists pending invitations for a team. Requires team admin.","parameters":[{"schema":{"type":"string"},"required":true,"name":"teamId","in":"query"}],"responses":{"200":{"description":"Invitations list retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"invitations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"teamRole":{"type":"string","enum":["Admin","User"]},"createdAt":{"type":"string"},"createdBy":{"type":"string"},"invitationUrl":{"type":"string","description":"URL to accept the invitation"}},"required":["id","email","name","teamRole","createdAt","invitationUrl"]}}},"required":["invitations"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Members"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getInvitations","summary":"Lists pending invitations for a team."},"delete":{"description":"Revokes a pending invitation. Requires team admin.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string"},"invitationId":{"type":"string"}},"required":["teamId","invitationId"]}}}},"responses":{"204":{"description":"Invitation revoked successfully"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Members"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteInvitations","summary":"Revokes a pending invitation."}},"/api/v1/labels":{"get":{"description":"Gets labels for a project","parameters":[{"schema":{"type":"string","description":"The project ID to get labels for"},"required":true,"description":"The project ID to get labels for","name":"projectId","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"default":0,"description":"Number of records to skip"},"required":false,"description":"Number of records to skip","name":"offset","in":"query"},{"schema":{"type":"number","minimum":1,"default":100,"description":"Maximum number of records to return"},"required":false,"description":"Maximum number of records to return","name":"limit","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of label public IDs"},"required":false,"description":"Comma-separated list of label public IDs","name":"labelIds","in":"query"},{"schema":{"type":"string","description":"Public ID of the parent group label"},"required":false,"description":"Public ID of the parent group label","name":"groupId","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"Filter to only group labels"},"required":false,"description":"Filter to only group labels","name":"isGroup","in":"query"},{"schema":{"type":"string","description":"Filter labels with public ID prefix"},"required":false,"description":"Filter labels with public ID prefix","name":"idPrefix","in":"query"},{"schema":{"type":"string","description":"Filter labels with display name prefix (case insensitive)"},"required":false,"description":"Filter labels with display name prefix (case insensitive)","name":"namePrefix","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"label":{"type":"object","properties":{"publicId":{"type":"string","pattern":"^[a-z0-9_-]{1,40}$","description":"Public ID of the label (cannot be changed after creation)"},"displayName":{"type":"string","maxLength":80,"description":"Human readable name of the label"},"isGroup":{"type":"boolean","description":"Whether this label is a group label (cannot be changed after creation)"},"parent":{"type":"string","pattern":"^[a-z0-9_-]{1,40}$","description":"Public ID of the parent group label"},"color":{"type":"string","description":"Human readable color identifier"},"description":{"type":"string","description":"Short description of what the label is about"},"scope":{"type":"array","items":{"type":"string"},"description":"Scope of the label (currently unused)"}},"required":["publicId","displayName","isGroup","color","scope"],"additionalProperties":false},"created":{"type":"string","format":"date-time"},"modified":{"type":"string","format":"date-time"},"createdBy":{"type":"string"},"modifiedBy":{"type":"string"}},"required":["projectId","label","created","modified"],"additionalProperties":false}},"totalCount":{"type":"number"}},"required":["labels","totalCount"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Labels"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getLabels","summary":"Gets labels for a project"},"delete":{"description":"Deletes a label","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"labelId":{"type":"string","description":"Public ID of the label to delete"}},"required":["projectId","labelId"],"additionalProperties":false}}}},"responses":{"204":{"description":"OK","content":{"application/json":{"schema":{"type":"string","maxLength":0}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Labels"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteLabels","summary":"Deletes a label"},"put":{"description":"Creates or updates a label","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"label":{"type":"object","properties":{"publicId":{"type":"string","pattern":"^[a-z0-9_-]{1,40}$","description":"Public ID of the label"},"displayName":{"type":"string","minLength":1,"maxLength":40},"isGroup":{"type":"boolean","default":false},"parent":{"type":"string","pattern":"^[a-z0-9_-]{1,40}$"},"color":{"type":"string"},"description":{"type":"string"},"scope":{"type":"array","items":{"type":"string"},"description":"Ignored on PUT"}},"required":["publicId","displayName","color"],"additionalProperties":false}},"required":["projectId","label"],"additionalProperties":false}}}},"responses":{"204":{"description":"OK","content":{"application/json":{"schema":{"type":"string","maxLength":0}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Labels"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putLabels","summary":"Creates or updates a label"},"options":{"tags":["Labels"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsLabels","summary":"Handles preflight requests."}},"/api/v1/locales":{"get":{"tags":["Locales"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Gets a list of all defined locales for a project\n","content":{"application/json":{"schema":{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Locale"}}},"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getLocales","description":"GET /api/v1/locales (Locales)","summary":"GET /api/v1/locales (Locales)"},"put":{"tags":["Locales"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocalePutBody"}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putLocales","description":"PUT /api/v1/locales (Locales)","summary":"PUT /api/v1/locales (Locales)"},"delete":{"tags":["Locales"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleDeleteBody"}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteLocales","description":"DELETE /api/v1/locales (Locales)","summary":"DELETE /api/v1/locales (Locales)"}},"/api/v1/mcp-servers":{"get":{"description":"Gets a list of MCP server configurations for a project.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"parameters":[{"schema":{"type":"string","description":"The project ID"},"required":true,"description":"The project ID","name":"projectId","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9]([a-zA-Z0-9_-]{0,61}[a-zA-Z0-9])?$"},"siteId":{"type":"string"},"url":{"type":"string","format":"uri"},"authConfig":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["none"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["custom_headers"]},"headerNames":{"type":"array","items":{"type":"string"}}},"required":["type","headerNames"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["oauth"]},"clientId":{"type":"string"},"hasClientSecret":{"type":"boolean"}},"required":["type"],"additionalProperties":false}]},"enabledTools":{"type":"array","nullable":true,"items":{"type":"string"}},"isActive":{"type":"boolean"},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["publicId","siteId","url","authConfig","enabledTools","isActive","createdBy","createdAt","updatedAt"],"additionalProperties":false}}},"required":["results"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["AI Agents"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getMcpServers","summary":"Gets a list of MCP server configurations for a project."},"delete":{"description":"Deletes an MCP server configuration.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"publicId":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9]([a-zA-Z0-9_-]{0,61}[a-zA-Z0-9])?$","description":"The MCP server public ID"}},"required":["projectId","publicId"],"additionalProperties":false}}}},"responses":{"204":{"description":"MCP server deleted"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"MCP server not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["AI Agents"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteMcpServers","summary":"Deletes an MCP server configuration."},"put":{"description":"Upserts an MCP server configuration (create or update by publicId within the project).\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"data":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9]([a-zA-Z0-9_-]{0,61}[a-zA-Z0-9])?$"},"url":{"type":"string","format":"uri"},"authConfig":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["none"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["custom_headers"]},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"required":["type","headers"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["oauth"]},"clientId":{"type":"string"},"clientSecret":{"type":"string"}},"required":["type"],"additionalProperties":false}]},"enabledTools":{"type":"array","nullable":true,"items":{"type":"string"}},"isActive":{"type":"boolean"}},"required":["publicId","url","authConfig"],"additionalProperties":false}},"required":["projectId","data"],"additionalProperties":false}}}},"responses":{"204":{"description":"MCP server created or updated"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["AI Agents"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putMcpServers","summary":"Upserts an MCP server configuration (create or update by publicId within the project)."},"options":{"tags":["AI Agents"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsMcpServers","summary":"Handles preflight requests."}},"/api/v1/members":{"get":{"description":"Lists members of a team and their permissions. Callers that are not a team admin will see all members, but project roles and team admin status will only be provided for the caller identity.","deprecated":true,"parameters":[{"schema":{"type":"string"},"required":true,"name":"teamId","in":"query"},{"schema":{"type":"string","enum":["member","apiKey","pat","serviceAccount"],"description":"Filter by member type: member (oauth login), apiKey (all API keys, both service accounts and PATs), pat (PATs only), serviceAccount (service accounts only)"},"required":false,"description":"Filter by member type: member (oauth login), apiKey (all API keys, both service accounts and PATs), pat (PATs only), serviceAccount (service accounts only)","name":"type","in":"query"},{"schema":{"type":"string","description":"Filter PATs by owner subject. Requires type=pat. Returns only PATs owned by this user."},"required":false,"description":"Filter PATs by owner subject. Requires type=pat. Returns only PATs owned by this user.","name":"ownerSubject","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"Includes additional metaddata with member info, specifically created timestamp and project names."},"required":false,"description":"Includes additional metaddata with member info, specifically created timestamp and project names.","name":"includeMetadata","in":"query"}],"responses":{"200":{"description":"Members list retrieved","content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"subject":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"picture":{"type":"string"},"isTeamAdmin":{"type":"boolean"},"projects":{"type":"object","additionalProperties":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"string"}},"customPermissions":{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"description":"When this is present, roles are ignored and custom permission assignment is used instead. Using roles is recommended instead.","deprecated":true},"name":{"type":"string","description":"Only present if includeMetadata is true"}},"required":["roles"]}},"type":{"type":"string","enum":["member","apiKey"]},"apiKeyType":{"type":"string","enum":["serviceAccount","pat"],"description":"Distinguishes between service accounts and personal access tokens. Only present when type is \"apiKey\"."},"memberSince":{"type":"string","description":"Only present if includeMetadata is true"},"expiresAt":{"type":"string","description":"ISO 8601 datetime when the token expires. Only present for API keys/PATs if includeMetadata is true and an expiration was set."}},"required":["subject","name","isTeamAdmin","projects","type"]}}},"required":["members"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Members"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getMembers","summary":"Lists members of a team and their permissions."},"delete":{"description":"Removes a team member or API key from the team. Team admin permissions are required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string"},"subject":{"type":"string","description":"The identity subject to remove from the team"}},"required":["teamId","subject"],"additionalProperties":false}}}},"responses":{"204":{"description":"Delete successful"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Identity to remove from team was not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Members"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteMembers","summary":"Removes a team member or API key from the team."},"post":{"description":"Invites a new member to the team via email, with specific permissions. Team admin permissions are required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projects":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"useCustom":{"type":"boolean","description":"This is no longer used. If `permissions` is present and not empty, custom permissions are used and roles are ignored. Otherwise, roles are used.","deprecated":true},"roles":{"type":"array","items":{"type":"string","description":"The public ID of the role"}},"permissions":{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]}}},"required":["projectId","roles"]}},"isAdmin":{"type":"boolean","description":"If true, the API key will be a team admin and all other roles and permissions are irrelevant"},"email":{"type":"string","format":"email","description":"The email address of the person to invite"},"teamId":{"type":"string"},"sendEmail":{"type":"boolean","description":"If true, an email will be sent to the person. If false, the invitation link returned from the request must be shared with the user via some other channel."},"name":{"type":"string","maxLength":100,"pattern":"^[^<>]+$/g","description":"The name of the person to invite. NOTE: only used for the email, does not set a name for the account"}},"required":["projects","isAdmin","email","teamId","sendEmail","name"]}}}},"responses":{"200":{"description":"Invitation sent","content":{"application/json":{"schema":{"type":"object","properties":{"invitationUrl":{"type":"string","description":"The URL to send to the person to accept the invitation"}},"required":["invitationUrl"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Members"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"postMembers","summary":"Invites a new member to the team via email, with specific permissions."},"put":{"description":"Creates an API key. Team admin permissions are required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projects":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"useCustom":{"type":"boolean","description":"This is no longer used. If `permissions` is present and not empty, custom permissions are used and roles are ignored. Otherwise, roles are used.","deprecated":true},"roles":{"type":"array","items":{"type":"string","description":"The public ID of the role"}},"permissions":{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]}}},"required":["projectId","roles"]}},"isAdmin":{"type":"boolean","description":"If true, the API key will be a team admin and all other roles and permissions are irrelevant"},"teamId":{"type":"string"},"name":{"type":"string","maxLength":100,"pattern":"^[^<>]+$/g","description":"The name of the API key"},"ownerSubject":{"type":"string","description":"If provided, creates a Personal Access Token (PAT) owned by this identity. Must be the callers own subject."},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 datetime when the token should expire. If not set, the token has no expiration.","example":"2026-12-31T23:59:59Z"}},"required":["projects","teamId","name"]}}}},"responses":{"201":{"description":"API key created","content":{"application/json":{"schema":{"type":"object","properties":{"apiKey":{"type":"string"}},"required":["apiKey"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Members"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putMembers","summary":"Creates an API key."},"patch":{"description":"Updates permissions for an existing member or API key","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identity_subject":{"type":"string","description":"The subject of the identity to update permissions on"},"projects":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"useCustom":{"type":"boolean","description":"This is no longer used. If `permissions` is present and not empty, custom permissions are used and roles are ignored. Otherwise, roles are used.","deprecated":true},"roles":{"type":"array","items":{"type":"string","description":"The public ID of the role"}},"permissions":{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]}}},"required":["projectId","roles"]}},"isAdmin":{"type":"boolean","description":"If true, the API key will be a team admin and all other roles and permissions are irrelevant"},"teamId":{"type":"string"},"name":{"type":"string","maxLength":100,"pattern":"^[^<>]+$/g","description":"The name of the person or API key. NOTE: user accounts may have this overwritten by their identity provider."}},"required":["identity_subject","projects","teamId","name"]}}}},"responses":{"200":{"description":"Permissions updated","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Members"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"patchMembers","summary":"Updates permissions for an existing member or API key"},"options":{"tags":["Members"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsMembers","summary":"Handles preflight requests."}},"/api/v1/notifications":{"get":{"description":"Lists the current user's notifications. Results are cursor-paginated newest-first and may be scoped to the current team. Omit teamId to list every notification for the caller.","deprecated":true,"parameters":[{"schema":{"type":"string","maxLength":1024,"description":"Opaque cursor returned by the previous response. Omit to read the newest page of notifications."},"required":false,"description":"Opaque cursor returned by the previous response. Omit to read the newest page of notifications.","name":"cursor","in":"query"},{"schema":{"type":"boolean","description":"When true, only unread notifications are returned."},"required":false,"description":"When true, only unread notifications are returned.","name":"unreadOnly","in":"query"},{"schema":{"type":"string","description":"Optional team scope. Use teamId to limit results to one team."},"required":false,"description":"Optional team scope. Use teamId to limit results to one team.","name":"teamId","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":50,"description":"Maximum number of notifications to return. Defaults to 50."},"required":false,"description":"Maximum number of notifications to return. Defaults to 50.","name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"notifications":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["text"],"description":"The notification content type. Currently, only text notifications are supported."},"teamId":{"type":"string"},"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"author":{"type":"object","nullable":true,"properties":{"subject":{"type":"string"},"name":{"type":"string"}},"required":["subject","name"],"additionalProperties":false},"summary":{"type":"object","properties":{"format":{"type":"string","enum":["markdown"]},"value":{"type":"string","minLength":1,"maxLength":256}},"required":["format","value"],"additionalProperties":false},"entity":{"oneOf":[{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["entry","composition"]},"releaseId":{"type":"string"},"editionId":{"type":"string"}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["entryPattern","componentPattern","compositionPattern"]},"releaseId":{"type":"string"}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["component","contentType","blockType","asset","audience","intent","enrichment","signal","quirk","test","projectMapNode"]}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["external"]},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["type","url"],"additionalProperties":false}]},"createdAt":{"type":"string","format":"date-time"},"readAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","type","teamId","project","author","summary","createdAt"],"additionalProperties":false}},"cursor":{"type":"string"},"unreadCount":{"type":"number"}},"required":["notifications","unreadCount"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Notifications"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getNotifications","summary":"Lists the current user's notifications."},"post":{"description":"Creates a project-scoped notification for recipients who belong to the project's team. The caller must have access to the project. A missing or inaccessible project returns 404.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"recipients":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"type":{"type":"string","enum":["text"],"default":"text","description":"The notification content type. Currently, only text notifications are supported."},"summary":{"type":"object","properties":{"format":{"type":"string","enum":["markdown"]},"value":{"type":"string","minLength":1,"maxLength":256}},"required":["format","value"],"additionalProperties":false},"entity":{"oneOf":[{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["entry","composition"]},"releaseId":{"type":"string"},"editionId":{"type":"string"}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["entryPattern","componentPattern","compositionPattern"]},"releaseId":{"type":"string"}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["component","contentType","blockType","asset","audience","intent","enrichment","signal","quirk","test","projectMapNode"]}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["external"]},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["type","url"],"additionalProperties":false}]},"projectId":{"type":"string"}},"required":["recipients","summary","projectId"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["text"],"description":"The notification content type. Currently, only text notifications are supported."},"teamId":{"type":"string"},"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"author":{"type":"object","nullable":true,"properties":{"subject":{"type":"string"},"name":{"type":"string"}},"required":["subject","name"],"additionalProperties":false},"summary":{"type":"object","properties":{"format":{"type":"string","enum":["markdown"]},"value":{"type":"string","minLength":1,"maxLength":256}},"required":["format","value"],"additionalProperties":false},"entity":{"oneOf":[{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["entry","composition"]},"releaseId":{"type":"string"},"editionId":{"type":"string"}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["entryPattern","componentPattern","compositionPattern"]},"releaseId":{"type":"string"}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"entityId":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string","enum":["component","contentType","blockType","asset","audience","intent","enrichment","signal","quirk","test","projectMapNode"]}},"required":["entityId","type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["external"]},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["type","url"],"additionalProperties":false}]},"createdAt":{"type":"string","format":"date-time"},"readAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","type","teamId","project","author","summary","createdAt"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Project not found or inaccessible to the caller"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Notifications"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"postNotifications","summary":"Creates a project-scoped notification for recipients who belong to the project's team."},"patch":{"description":"Updates read state for the current user's notifications. Use target: ids to update specific notifications, or target: all to mark all notifications as read. Read-all may be scoped to a team.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"target":{"type":"string","enum":["ids"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100},"read":{"type":"boolean"}},"required":["target","ids","read"],"additionalProperties":false},{"type":"object","properties":{"target":{"type":"string","enum":["all"]},"teamId":{"type":"string"}},"required":["target"],"additionalProperties":false}]}}}},"responses":{"204":{"description":"No Content","content":{"application/json":{"schema":{"nullable":true}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"None of the specified notifications exist or belong to the caller"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Notifications"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"patchNotifications","summary":"Updates read state for the current user's notifications."},"options":{"tags":["Notifications"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsNotifications","summary":"Handles preflight requests."}},"/api/v1/policy-documents":{"get":{"description":"Reads policy documents for a project. Team admin permissions are required.","parameters":[{"schema":{"type":"string"},"required":true,"name":"projectId","in":"query"}],"responses":{"200":{"description":"Policy documents read","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"allowing":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}},"denying":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Policies"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getPolicyDocuments","summary":"Reads policy documents for a project."},"put":{"description":"Writes policy documents for a project. Team admin permissions are required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"documents":{"type":"object","additionalProperties":{"type":"object","properties":{"allowing":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}},"denying":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}}}}}},"required":["projectId","documents"]}}}},"responses":{"204":{"description":"Policy documents written","content":{"application/json":{"schema":{"type":"string","maxLength":0}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Policies"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putPolicyDocuments","summary":"Writes policy documents for a project."}},"/api/v1/preview-urls":{"get":{"description":"Gets all preview URLs","parameters":[{"schema":{"type":"string"},"required":true,"name":"projectId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"id","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"previewUrls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"order":{"type":"number","description":"Order in which the preview URL should be displayed in the UI. Lower numbers are displayed first."}},"required":["id","name","url"],"additionalProperties":false}}},"required":["previewUrls"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Preview Settings"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getPreviewUrls","summary":"Gets all preview URLs"},"delete":{"description":"Deletes a preview URL","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"}},"required":["id","projectId"],"additionalProperties":false}}}},"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Preview Settings"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deletePreviewUrls","summary":"Deletes a preview URL"},"put":{"description":"Upserts a preview URL","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":255},"url":{"type":"string","minLength":1,"maxLength":512},"order":{"type":"number","minimum":0,"description":"Order in which the preview URL should be displayed in the UI. Lower numbers are displayed first."}},"required":["projectId","name","url"],"additionalProperties":false}}}},"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"201":{"description":"201 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Preview Settings"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putPreviewUrls","summary":"Upserts a preview URL"}},"/api/v1/preview-viewports":{"get":{"description":"Gets all preview viewports","parameters":[{"schema":{"type":"string"},"required":true,"name":"projectId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"id","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"previewViewports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"},"width":{"type":"number","description":"Width in pixels"}},"required":["id","name","icon","width"],"additionalProperties":false}}},"required":["previewViewports"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Preview Settings"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getPreviewViewports","summary":"Gets all preview viewports"},"delete":{"description":"Deletes a preview viewport","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"}},"required":["id","projectId"],"additionalProperties":false}}}},"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Preview Settings"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deletePreviewViewports","summary":"Deletes a preview viewport"},"put":{"description":"Upserts a preview viewport","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":255},"icon":{"type":"string","maxLength":255},"width":{"type":"number","maximum":8192,"minimum":1,"description":"Width in pixels"}},"required":["projectId","name","icon","width"],"additionalProperties":false}}}},"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"201":{"description":"201 response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Preview Settings"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putPreviewViewports","summary":"Upserts a preview viewport"}},"/api/v1/project-map-nodes":{"options":{"tags":["Project Map"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsProjectMapNodes","summary":"Handles preflight requests."},"get":{"description":"Called to get a list of nodes belonging to a specific path or Id.\n\nNote on branch-scoped permissions: if the caller's role has a\nbranch-scoped PrmNodeRead policy (i.e. read access is configured for\nspecific project map branches only), the response is filtered\nserver-side to nodes within those branches. Consumers should not\nassume the response contains the entire project map. Users with\nunscoped PrmNodeRead, PrmSchema, or composition-level read permissions\nreceive the full set (backward-compatible behavior).\n","tags":["Project Map"],"parameters":[{"in":"query","name":"projectMapId","description":"The project map id that the desired nodes belong","schema":{"type":"string","format":"uuid"}},{"in":"query","name":"projectId","description":"The project id that contains the project map tree that this node belongs to","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"releaseId","description":"The ID of a release to fetch the composition data for.\n\n- When unspecified, composition data is fetched from base.\n- When specified, all content is returned as it would appear in the release if it was released now. This includes both content copied to the release and changed, as well as content that is not part of the release.\n\nContent copied to a release can be differentiated from base content by the `releaseId` property on the content. If the content is not copied to the release, this property will not be defined\n","schema":{"type":"string","format":"uuid"}},{"in":"query","name":"id","description":"The id of the node to retrieve, cannot have both this parameter and `path`","required":false,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"path","description":"The path of the root node to retrieve, cannot have both this parameter and `id`","required":false,"schema":{"type":"string","pattern":"^\\/$|^(\\/:?[^\\/]+)+$"}},{"in":"query","name":"compositionId","description":"Composition id to find associated project map node for","required":false,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"limit","description":"Limit the number or records returned by a number","required":false,"schema":{"type":"integer","default":100000}},{"in":"query","name":"offset","description":"Number of records to skip before returning nodes","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"depth","description":"Depth of the tree to fetch. This only applies when fetching by path","required":false,"schema":{"type":"integer"}},{"in":"query","name":"state","description":"State of compositions to fetch. 0 = draft, 64 = published","schema":{"type":"number","minimum":0,"maximum":64}},{"in":"query","name":"tree","description":"should the data be returned as a json tree object (or a flat array)","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"search","description":"text search filter","required":false,"schema":{"type":"string"}},{"in":"query","name":"includeAncestors","description":"Modifies the results to include all ancestors of matched nodes, in addition to the nodes themselves.\nResults are sorted by path. If multiple nodes are selected, ancestors are not duplicated\n","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"expanded","description":"include expanded helper computed properties, including `isLeaf`, `parentPath`, `pathSegment` etc","schema":{"type":"boolean"}},{"in":"query","name":"withCompositionData","description":"include basic composition information.  ID, type, state, name, and definition id","schema":{"type":"boolean"}},{"in":"query","name":"withCompositionUIStatus","deprecated":true,"description":"Returns the UI status string of the composition.\nThis internal status is subject to change without notice and is thus marked deprecated to discourage the use of internal data\n","schema":{"type":"boolean","default":false}},{"in":"query","name":"withRedirectData","description":"Include basic redirect information","schema":{"type":"boolean","default":false}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"nodes":{"type":"array","items":{"$ref":"#/components/schemas/ProjectMapNodeDefinition"}},"tree":{"$ref":"#/components/schemas/ProjectMapTreeNodeDefinition"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getProjectMapNodes","summary":"Called to get a list of nodes belonging to a specific path or Id."},"put":{"description":"Called to insert or update a node or nodes","tags":["Project Map"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["nodes","projectId"],"properties":{"nodes":{"description":"An array of projectMap node objects to be updated or inserted","type":"array","maxItems":5,"items":{"type":"object","required":["node"],"properties":{"node":{"$ref":"#/components/schemas/ProjectMapNodeUpdate"},"previousSibling":{"description":"The path of the node directly prior to the location where the current node is desired to go or undefined if there isn't one","type":"string","maxLength":2048},"nextSibling":{"description":"The path of the node directly after the location where the current node is desired to go or undefined if there isn't one","type":"string","maxLength":2048}}}},"projectId":{"description":"The project id of the project that the projectMap belongs to","type":"string","format":"uuid"},"projectMapId":{"description":"The projectMap id that the changing or inserting nodes belong to","type":"string","format":"uuid"}}}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putProjectMapNodes","summary":"Called to insert or update a node or nodes"},"delete":{"description":"Called to delete a particular projectMap node by id or path","tags":["Project Map"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["projectId","path"],"properties":{"nodeId":{"description":"Id of the projectMap node to delete","type":"string","format":"uuid"},"path":{"description":"Path to the projectMap node to delete","type":"string","minLength":1,"maxLength":2048},"projectMapId":{"description":"Project map id that the node to delete belongs to","type":"string","format":"uuid"},"projectId":{"description":"Project id that the project map belongs to","type":"string","format":"uuid"}}},{"type":"object","required":["projectId","nodeId"],"properties":{"nodeId":{"description":"Id of the projectMap node to delete","type":"string","format":"uuid"},"path":{"description":"Path to the projectMap node to delete","type":"string","minLength":1,"maxLength":2048},"projectMapId":{"description":"Project map id that the node to delete belongs to","type":"string","format":"uuid"},"projectId":{"description":"Project id that the project map belongs to","type":"string","format":"uuid"}}}]}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteProjectMapNodes","summary":"Called to delete a particular projectMap node by id or path"}},"/api/v1/project-map":{"options":{"tags":["Project Map"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsProjectMap","summary":"Handles preflight requests."},"get":{"description":"Called to retrieve a list of project maps related to a project or a specific project map by id","tags":["Project Map"],"parameters":[{"in":"query","name":"projectId","description":"The project to fetch project map for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"projectMapId","description":"The id of the project map to fetch","required":false,"schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["projectMaps"],"properties":{"projectMaps":{"type":"array","items":{"$ref":"#/components/schemas/ProjectMapDefinition"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getProjectMap","summary":"Called to retrieve a list of project maps related to a project or a specific project map by id"},"put":{"tags":["Project Map"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","projectMap"],"properties":{"projectMap":{"description":"Project map object to insert","$ref":"#/components/schemas/ProjectMapDefinition"},"projectId":{"description":"Project id to insert the projectMap into","type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["projectMapId"],"properties":{"projectMapId":{"type":"string","format":"uuid","description":"Id of the projectMap"}},"additionalProperties":false}}}},"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putProjectMap","description":"PUT /api/v1/project-map (Project Map)","summary":"PUT /api/v1/project-map (Project Map)"},"delete":{"description":"Called to delete a projectMap","tags":["Project Map"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","projectMapId"],"properties":{"projectId":{"type":"string","format":"uuid","description":"Id of the project that this projectMap belongs to"},"projectMapId":{"type":"string","format":"uuid","description":"Id of the projectMap to delete"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteProjectMap","summary":"Called to delete a projectMap"}},"/api/v1/project":{"get":{"tags":["Projects"],"parameters":[{"in":"query","name":"projectId","description":"The project to fetch","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"withSearchIndexStatus","description":"If true it will check if a project has a valid search index","required":false,"schema":{"type":"boolean","default":false}}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProject"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getProject","description":"GET /api/v1/project (Projects)","summary":"GET /api/v1/project (Projects)"},"post":{"tags":["Projects"],"deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostProject"}}}},"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","format":"uuid"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"postProject","description":"POST /api/v1/project (Projects)","summary":"POST /api/v1/project (Projects)"},"put":{"tags":["Projects"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutProjectBody"}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","format":"uuid"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putProject","description":"PUT /api/v1/project (Projects)","summary":"PUT /api/v1/project (Projects)"},"patch":{"tags":["Projects"],"deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchProject"}}}},"security":[{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"patchProject","description":"PATCH /api/v1/project (Projects)","summary":"PATCH /api/v1/project (Projects)"},"delete":{"tags":["Projects"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId"],"properties":{"projectId":{"type":"string","format":"uuid"},"permanent":{"type":"boolean","description":"If true, the project will be permanently removed from the database instead of \"soft-deleted\" where the record is retained but is marked as deleted. Permanent delete is primarily intended for use by E2E tests"}},"additionalProperties":false}}}},"security":[{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteProject","description":"DELETE /api/v1/project (Projects)","summary":"DELETE /api/v1/project (Projects)"}},"/api/v1/projects":{"get":{"description":"Lists projects grouped by team. If teamId is provided, returns a single team with its projects. If omitted, returns all accessible teams and their projects.","parameters":[{"schema":{"type":"string","description":"If provided, only return the specified team and its projects. If omitted, return all accessible teams."},"required":false,"description":"If provided, only return the specified team and its projects. If omitted, return all accessible teams.","name":"teamId","in":"query"},{"schema":{"type":"string","enum":["name_ASC","name_DESC","createdAt_ASC","createdAt_DESC"],"description":"Sort order for projects within each team. Defaults to name_ASC."},"required":false,"description":"Sort order for projects within each team. Defaults to name_ASC.","name":"orderBy","in":"query"}],"responses":{"200":{"description":"Projects retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isPaid":{"type":"boolean"},"teamRole":{"type":"string","description":"The caller's role in this team (e.g. \"Admin\" or \"User\")"},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"projectTypeId":{"type":"string"},"previewUrl":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"isProd":{"type":"boolean"}},"required":["id","name","projectTypeId","previewUrl","createdAt","updatedAt","isProd"]}}},"required":["id","name","isPaid","teamRole","projects"]}}},"required":["teams"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Team not found (only when teamId is provided)"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Projects"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getProjects","summary":"Lists projects grouped by team."}},"/api/v1/prompts":{"get":{"deprecated":true,"tags":["Prompts"],"parameters":[{"in":"query","name":"promptId","schema":{"type":"string","format":"uuid"}},{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Prompt"},{"type":"array","items":{"$ref":"#/components/schemas/Prompt"}}]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getPrompts","description":"GET /api/v1/prompts (Prompts)","summary":"GET /api/v1/prompts (Prompts)"},"put":{"deprecated":true,"tags":["Prompts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","data"],"properties":{"data":{"$ref":"#/components/schemas/Prompt"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putPrompts","description":"PUT /api/v1/prompts (Prompts)","summary":"PUT /api/v1/prompts (Prompts)"},"delete":{"deprecated":true,"tags":["Prompts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","promptId"],"properties":{"projectId":{"type":"string","format":"uuid"},"promptId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deletePrompts","description":"DELETE /api/v1/prompts (Prompts)","summary":"DELETE /api/v1/prompts (Prompts)"}},"/api/v1/redirect":{"options":{"tags":["Redirects"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsRedirect","summary":"Handles preflight requests."},"get":{"description":"Called to retrieve a list of redirects related to a project","tags":["Redirects"],"parameters":[{"in":"query","name":"projectId","description":"The project to fetch redirects for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"id","description":"Id of the redirect to retrieve","required":false,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"ids","description":"Ids of the redirects to retrieve","schema":{"type":"array","items":{"type":"string","format":"uuid"}}},{"in":"query","name":"sourceUrl","description":"Source url to attempt to find redirects for","schema":{"type":"string","maxLength":2048}},{"in":"query","name":"targetUrl","description":"Find redirects that could redirect to this url","schema":{"type":"string","maxLength":2048}},{"in":"query","name":"projectMapId","description":"Id of the project map the source or target belongs to","required":false,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"sourceProjectMapNodeId","description":"Id of the project map node to find redirects for","required":false,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"targetProjectMapNodeId","description":"Id of the project map node to find redirects for","required":false,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"orderBy","description":"Column to order results by, only applicable if trie is not active","schema":{"type":"string","enum":["updated_at asc","updated_at desc","source_url asc","source_url desc","target_url asc","target_url desc","created_by asc","created_by desc"]}},{"in":"query","name":"limit","description":"Limit the results to this number of results, ignored if using trie parameter. Defaults to 10, maximum 500. Send both limit and offset to receive total.","schema":{"type":"number","maximum":500}},{"in":"query","name":"offset","description":"Offset the results a certain amount, useful for pagination. Defaults to 0. Send both limit and offset to receive total.","schema":{"type":"number"}},{"in":"query","name":"search","description":"Search text to filter redirects by, filtering on the source and target urls","schema":{"type":"string","maxLength":50}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["redirects"],"properties":{"redirects":{"$ref":"#/components/schemas/RedirectGetResponse"},"total":{"description":"Total number of matching redirects. Returned only when the request sent both limit and offset.","type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getRedirect","summary":"Called to retrieve a list of redirects related to a project"},"put":{"tags":["Redirects"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","redirect"],"properties":{"redirect":{"description":"Redirect object to insert","$ref":"#/components/schemas/Redirect"},"projectId":{"description":"Project id to insert the redirect into","type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","format":"uuid","description":"Id of the redirect"}},"additionalProperties":false}}}},"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putRedirect","description":"PUT /api/v1/redirect (Redirects)","summary":"PUT /api/v1/redirect (Redirects)"},"delete":{"description":"Called to delete a redirect","tags":["Redirects"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","projectId"],"properties":{"id":{"type":"string","format":"uuid","description":"Redirect id to be deleted"},"projectId":{"type":"string","format":"uuid","description":"Project the redirect belongs to"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","format":"uuid","description":"Id of the redirect"}},"additionalProperties":false}}}},"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteRedirect","summary":"Called to delete a redirect"}},"/api/v1/relationships":{"get":{"description":"Gets the relationships for a given entity type","parameters":[{"schema":{"type":"string"},"required":true,"name":"projectId","in":"query"},{"schema":{"type":"string","enum":["component","contentType","blockType","asset","componentPattern","entryPattern","compositionPattern","entry","dataType","dataSource","test"]},"required":true,"name":"type","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Entity IDs"},"required":true,"description":"Entity IDs","name":"ids","in":"query"},{"schema":{"type":"boolean","nullable":true,"default":false,"description":"Whether to include a list of related instances in the response. Only supported when a single entity ID is provided"},"required":false,"description":"Whether to include a list of related instances in the response. Only supported when a single entity ID is provided","name":"withInstances","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"description":"Use this to paginate over the instances when \"whenInstances\" is true"},"required":false,"description":"Use this to paginate over the instances when \"whenInstances\" is true","name":"limit","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"description":"Use this to paginate over the instances when \"whenInstances\" is true"},"required":false,"description":"Use this to paginate over the instances when \"whenInstances\" is true","name":"offset","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"instances":{"type":"array","items":{"type":"object","properties":{"uiStatus":{"type":"string","enum":["Draft","Modified","Published","Orphan","Unknown","Previous"]},"publishedOnly":{"type":"boolean"},"icon":{"type":"string"},"instance":{"type":"object","properties":{"_id":{"type":"string"},"_name":{"type":"string"},"_pattern":{"type":"string"}},"required":["_id","_name"],"additionalProperties":false},"edition":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"description":"When set, this is a child edition of the instance in _id"},"pattern":{"type":"boolean"},"type":{"type":"string","enum":["entry","composition","component"]},"definition":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"release":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["publishedOnly","instance","pattern","type","definition"],"additionalProperties":false}},"totalCount":{"type":"number"}},"required":["id","totalCount"],"additionalProperties":false}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Relationships"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getRelationships","summary":"Gets the relationships for a given entity type"}},"/api/v1/release-contents":{"get":{"description":"Lists all contents (adds, moves, deletes) of a release","tags":["Releases"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"releaseId","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"offset","description":"Number of records to skip\nThis is a list query parameter, and cannot be used with any primary query parameters\n","schema":{"type":"integer","minimum":0}},{"in":"query","name":"limit","description":"Max number of records to return\nThis is a list query parameter, and cannot be used with any primary query parameters\n","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"in":"query","name":"publicIDs","description":"Matches release contents where their public ID is one of a list\n","schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicIdProperty"}}},{"$ref":"#/components/parameters/deleted"}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Gets a list all changes that are part of a release\n","content":{"application/json":{"schema":{"type":"object","required":["results","totalCount"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseContent"}},"totalCount":{"type":"integer","minimum":0}},"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getReleaseContents","summary":"Lists all contents (adds, moves, deletes) of a release"},"delete":{"description":"Deletes a change from a release","tags":["Releases"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseContentsDeleteBody"}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteReleaseContents","summary":"Deletes a change from a release"}},"/api/v1/releases":{"get":{"tags":["Releases"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"offset","description":"Number of records to skip","schema":{"type":"integer","minimum":0}},{"in":"query","name":"limit","description":"Max number of records to return","schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"in":"query","name":"keyword","description":"Matches releases where their name contains the specified keyword\n","schema":{"type":"string","maxLength":256}},{"in":"query","name":"states","description":"Matches releases where their state is one of a list\n","schema":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseState"}}},{"in":"query","name":"scheduleStates","description":"Matches releases by whether an auto-launch schedule is set\n","schema":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseScheduleState"}}},{"in":"query","name":"releaseIDs","description":"Matches releases where their ID is one of a list\n","schema":{"type":"array","items":{"type":"string","format":"uuid"}}},{"in":"query","name":"orderBy","description":"Sets the sorting of the results. If unspecified, results are sorted by launch(ed) date descending, and then by name ascending.\nAllowed values are: auto_launch_schedule_DESC, auto_launch_schedule_ASC, launched_at_DESC, launched_at_ASC, name_DESC, name_ASC\n","style":"form","schema":{"type":"array","items":{"type":"string","enum":["auto_launch_schedule_DESC","auto_launch_schedule_ASC","launched_at_DESC","launched_at_ASC","name_DESC","name_ASC"]}}}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Gets a list of all defined releases for a project\n","content":{"application/json":{"schema":{"type":"object","required":["results","totalCount"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Release"}},"totalCount":{"type":"integer","minimum":0}},"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getReleases","description":"GET /api/v1/releases (Releases)","summary":"GET /api/v1/releases (Releases)"},"put":{"tags":["Releases"],"description":"Adds or updates a release","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleasePutBody"}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"201":{"description":"OK"},"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putReleases","summary":"Adds or updates a release"},"patch":{"tags":["Releases"],"description":"Readies or un-readies a release","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleasePatchBody"}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"patchReleases","summary":"Readies or un-readies a release"},"delete":{"tags":["Releases"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseDeleteBody"}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteReleases","description":"DELETE /api/v1/releases (Releases)","summary":"DELETE /api/v1/releases (Releases)"}},"/api/v1/roles":{"get":{"description":"Reads roles for a team. Team admin permissions are required.","parameters":[{"schema":{"type":"string"},"required":true,"name":"teamId","in":"query"}],"responses":{"200":{"description":"Roles read","content":{"application/json":{"schema":{"type":"object","properties":{"ssoGroupMappingEnabled":{"type":"boolean"},"ssoAdminGroup":{"type":"string","nullable":true},"roles":{"type":"array","items":{"type":"object","properties":{"singleRole":{"type":"object","properties":{"id":{"type":"string"},"publicId":{"type":"string","minLength":0,"maxLength":100,"pattern":"^[A-Za-z0-9$-]+$"},"teamId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]{1,100}$"},"description":{"type":"string","maxLength":1000},"permissions":{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]}},"mappedGroup":{"type":"string","nullable":true,"minLength":1,"maxLength":500}},"required":["id","teamId","name","permissions"]},"users":{"type":"array","items":{"type":"string"}},"apiKeys":{"type":"array","items":{"type":"string"}},"policies":{"type":"object","additionalProperties":{"type":"object","properties":{"allowing":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}},"denying":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}}}}}},"required":["singleRole","users","apiKeys","policies"]}}},"required":["ssoGroupMappingEnabled","roles"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Roles"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getRoles","summary":"Reads roles for a team."},"delete":{"description":"Deletes a role. Team admin permissions are required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"roleId":{"type":"string"}},"required":["roleId"]}}}},"responses":{"204":{"description":"Role deleted","content":{"application/json":{"schema":{"type":"string","maxLength":0}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Roles"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteRoles","summary":"Deletes a role."},"put":{"description":"Creates a new role. Team admin permissions are required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"singleRole":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"string","maxLength":0}]},"publicId":{"type":"string","minLength":0,"maxLength":100,"pattern":"^[A-Za-z0-9$-]+$"},"teamId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]{1,100}$"},"description":{"type":"string","maxLength":1000},"permissions":{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]}},"mappedGroup":{"type":"string","nullable":true,"minLength":1,"maxLength":500}},"required":["teamId","name","permissions"]},"policies":{"type":"object","additionalProperties":{"type":"object","properties":{"allowing":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}},"denying":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}}}}}},"required":["singleRole"]}}}},"responses":{"204":{"description":"Role created","content":{"application/json":{"schema":{"type":"string","maxLength":0}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"description":"Conflict: another role on the team already uses this public ID."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Roles"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putRoles","summary":"Creates a new role."},"patch":{"description":"Updates a role. Team admin permissions are required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"singleRole":{"type":"object","properties":{"id":{"type":"string"},"publicId":{"type":"string","minLength":0,"maxLength":100,"pattern":"^[A-Za-z0-9$-]+$"},"teamId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]{1,100}$"},"description":{"type":"string","maxLength":1000},"permissions":{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]}},"mappedGroup":{"type":"string","nullable":true,"minLength":1,"maxLength":500}},"required":["id","teamId","name","permissions"]},"policies":{"type":"object","additionalProperties":{"type":"object","properties":{"allowing":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}},"denying":{"type":"array","items":{"type":"object","properties":{"entityGroup":{"type":"string","enum":["compositions","entries","assets","componentPatterns","compositionPatterns","entryPatterns","aiPrompts","automations","components","contentTypes","dataSources","dataTypes","enrichments","insights","intentsAndAudiences","labels","manifest","projectMap","quirks","redirects","releases","signals","tests","utmMapper","workflows"]},"permission":{"anyOf":[{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"minItems":1}]},"condition":{"anyOf":[{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]},{"type":"array","items":{"type":"object","properties":{"property":{"type":"string","enum":["id","type","pattern"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]}},"required":["property","value"]}}]},"locations":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","minLength":1},"scope":{"type":"string","enum":["self_and_descendants","descendants_only","self_only"]}},"required":["node"]},"minItems":1}},"required":["entityGroup","permission"]}}}}}},"required":["singleRole"]}}}},"responses":{"204":{"description":"Role updated","content":{"application/json":{"schema":{"type":"string","maxLength":0}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Roles"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"patchRoles","summary":"Updates a role."}},"/api/v1/route":{"options":{"tags":["Routes"],"description":"Handles preflight requests. This endpoint allows CORS","responses":{"204":{"description":"OK"}},"operationId":"optionsRoute","summary":"Handles preflight requests."},"get":{"tags":["Routes"],"description":"Fetches the correct response action for a given route (redirection, composition, not found).\n\nIn addition to the named parameters below, this endpoint accepts data projection syntax:\n`select.<bucket>[<op>]` — documented below.\n\n#### Data projection (`select.*`)\n\nProjection returns a subset of the matched composition by pruning fields\n(parameters), field types, and slots before values are resolved. It only\napplies when the route resolves to a composition; redirect and notFound\nresponses are returned unchanged. The allowed names are project-specific —\nthey come from the project's component definitions and content types —\nwhich is why `select.*` parameters are pattern-validated rather than\ndeclared as named parameters.\n\nSyntax: `select.<bucket>[<operator>]=<value>`. Values are comma-separated\nlists of names. `*` is the only wildcard and matches zero or more\ncharacters (e.g. `seo_*`).\n\n| Parameter | Effect |\n|---|---|\n| `select.fields[only]=a,b` | Keep only the named fields/parameters; drop everything else. |\n| `select.fields[except]=a,b` | Drop the named fields/parameters; keep everything else. |\n| `select.fields[locales]=a,b` | For the named fields that survive filtering, return the full per-locale value map instead of only the requested locale's value. |\n| `select.fields[blockDepth]=N` | Limit how many levels of block field children are kept. `0` removes all block fields; `preserveAll` prevents projection from trimming fields inside block children. |\n| `select.fieldTypes[only]=a,b` | Keep only fields of the named types (type IDs such as `text`, `richText`, `asset`). |\n| `select.fieldTypes[except]=a,b` | Drop fields of the named types. |\n| `select.slots[only]=a,b` | Keep only the named slots. |\n| `select.slots[except]=a,b` | Drop the named slots. |\n| `select.slots[depth]=N` | Limit how many levels of nested components are kept in slots. |\n| `select.slots.<name>[depth]=N` | Depth limit for one specific slot; overrides `slots[depth]`. |\n\nBehavior:\n\n* Projection applies recursively at every component and block in the\n  returned tree, and is forwarded into entries resolved through reference\n  fields.\n* When operators combine, all `[only]` sets are intersected first, then\n  `[except]` sets are subtracted — exclusion always wins.\n* Unknown field, slot, or type names are silent no-ops (the tree shape is\n  preserved; non-matching content is simply absent). Unknown operators\n  return HTTP 400.\n* An empty list (`select.fields[only]=` or `select.slots[only]=`) strips\n  every member of that bucket; `[except]=*` is equivalent.\n* `[depth]` counts nesting within a single fetched tree and resets inside\n  referenced entries.\n\nExamples:\n\n* `select.fields[only]=title,slug&select.slots[only]=` — title and slug of the resolved page with all slots flattened (e.g. for breadcrumbs).\n* `select.fieldTypes[except]=richText` — everything except rich-text fields.\n* `select.slots[depth]=2&select.fields[only]=label,url` — two levels of nested components, trimmed to `label` and `url`.\n","parameters":[{"$ref":"#/components/parameters/projectId"},{"$ref":"#/components/parameters/path"},{"$ref":"#/components/parameters/projectMapId"},{"$ref":"#/components/parameters/state"},{"$ref":"#/components/parameters/withComponentIDs"},{"$ref":"#/components/parameters/withContentSourceMap"},{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/releaseId"},{"$ref":"#/components/parameters/dataSourceVariant"},{"$ref":"#/components/parameters/ignoreRedirects"}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getRoute","summary":"Fetches the correct response action for a given route (redirection, composition, not found)."}},"/api/v1/security-audit-log":{"get":{"description":"Get paginated security audit log for a team. Requires team admin permissions.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"teamId","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"description":"Number of records to skip for pagination. Defaults to 0."},"required":false,"description":"Number of records to skip for pagination. Defaults to 0.","name":"offset","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of records to return. Defaults to 50, max 100."},"required":false,"description":"Maximum number of records to return. Defaults to 50, max 100.","name":"limit","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"When true, includes totalCount in the response for pagination."},"required":false,"description":"When true, includes totalCount in the response for pagination.","name":"withTotalCount","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["CREATE_API_KEY","DELETE_API_KEY","CREATE_PAT","DELETE_PAT","PRUNE_PAT_ROLES","UPDATE_MEMBER_PERMISSIONS","CREATE_INVITATION","ACCEPT_INVITATION","REMOVE_MEMBER","PURGE_IDENTITY","CREATE_ROLE","UPDATE_ROLE","DELETE_ROLE","UPDATE_POLICIES","CREATE_INTEGRATION_SECRET","REGENERATE_INTEGRATION_SECRET","DELETE_INTEGRATION_SECRET","CREATE_SESSION_TOKEN","CREATE_DELEGATION_TOKEN","REFRESH_DELEGATION_TOKEN","SSO_ROLE_RECONCILIATION","SSO_DEPROVISION_IDENTITY","SSO_CONNECTION_BINDING","SSO_ADMIN_DELEGATION"]},"description":"Filter by one or more action types (comma-separated, e.g. `actions=CREATE_PAT` or `actions=CREATE_PAT,DELETE_PAT`)."},"required":false,"description":"Filter by one or more action types (comma-separated, e.g. `actions=CREATE_PAT` or `actions=CREATE_PAT,DELETE_PAT`).","name":"actions","in":"query"},{"schema":{"type":"string","description":"Filter by the identity subject who performed the action."},"required":false,"description":"Filter by the identity subject who performed the action.","name":"identitySubject","in":"query"},{"schema":{"type":"string","enum":["api_key","pat","user","role","policy","integration","organization"],"description":"Filter by target type."},"required":false,"description":"Filter by target type.","name":"targetType","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Filter events created after this date (ISO 8601)."},"required":false,"description":"Filter events created after this date (ISO 8601).","name":"startDate","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Filter events created before this date (ISO 8601)."},"required":false,"description":"Filter events created before this date (ISO 8601).","name":"endDate","in":"query"}],"responses":{"200":{"description":"Audit log entries","content":{"application/json":{"schema":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"organizationId":{"type":"string","format":"uuid"},"identitySubject":{"type":"string"},"action":{"type":"string","enum":["CREATE_API_KEY","DELETE_API_KEY","CREATE_PAT","DELETE_PAT","PRUNE_PAT_ROLES","UPDATE_MEMBER_PERMISSIONS","CREATE_INVITATION","ACCEPT_INVITATION","REMOVE_MEMBER","PURGE_IDENTITY","CREATE_ROLE","UPDATE_ROLE","DELETE_ROLE","UPDATE_POLICIES","CREATE_INTEGRATION_SECRET","REGENERATE_INTEGRATION_SECRET","DELETE_INTEGRATION_SECRET","CREATE_SESSION_TOKEN","CREATE_DELEGATION_TOKEN","REFRESH_DELEGATION_TOKEN","SSO_ROLE_RECONCILIATION","SSO_DEPROVISION_IDENTITY","SSO_CONNECTION_BINDING","SSO_ADMIN_DELEGATION"]},"targetType":{"type":"string","enum":["api_key","pat","user","role","policy","integration","organization"]},"targetId":{"type":"string","nullable":true},"targetName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true,"format":"uuid"},"metadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"createdAt":{"type":"string"}},"required":["id","organizationId","identitySubject","action","targetType","targetId","targetName","projectId","metadata","createdAt"]}},"totalCount":{"type":"number"}},"required":["entries"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Security"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getSecurityAuditLog","summary":"Get paginated security audit log for a team."}},"/api/v1/skills":{"get":{"description":"Gets a list of agent skills for a project (max 10 per project).\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"parameters":[{"schema":{"type":"string","description":"The project ID"},"required":true,"description":"The project ID","name":"projectId","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"autoLoad":{"type":"boolean","default":false},"enabled":{"type":"boolean","default":true},"files":{"type":"object","additionalProperties":{"type":"string","maxLength":10000}},"id":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["files","id","createdBy","createdAt","updatedAt"]}}},"required":["results"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["AI Agents"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getSkills","summary":"Gets a list of agent skills for a project (max 10 per project)."},"delete":{"description":"Deletes a skill.\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"id":{"type":"string","description":"The skill ID"}},"required":["projectId","id"],"additionalProperties":false}}}},"responses":{"204":{"description":"Skill deleted"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Skill not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["AI Agents"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteSkills","summary":"Deletes a skill."},"put":{"description":"Upserts a skill (create or update by id).\n\nThis is experimental functionality that is subject to change without notice.","deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID"},"data":{"type":"object","properties":{"autoLoad":{"type":"boolean","default":false},"enabled":{"type":"boolean","default":true},"files":{"type":"object","additionalProperties":{"type":"string","maxLength":10000}},"id":{"type":"string"}},"required":["files"]}},"required":["projectId","data"],"additionalProperties":false}}}},"responses":{"200":{"description":"Skill updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"201":{"description":"Skill created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["AI Agents"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putSkills","summary":"Upserts a skill (create or update by id)."},"options":{"tags":["AI Agents"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsSkills","summary":"Handles preflight requests."}},"/api/v1/svix-dashboard":{"get":{"deprecated":true,"tags":["Webhooks"],"parameters":[{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["activated","zapier_activated"],"properties":{"activated":{"type":"boolean"},"dashboard_url":{"type":"string"},"zapier_activated":{"type":"boolean","deprecated":true}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getSvixDashboard","description":"GET /api/v1/svix-dashboard (Webhooks)","summary":"GET /api/v1/svix-dashboard (Webhooks)"}},"/api/v1/team":{"delete":{"description":"Delete a team","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string"}},"required":["teamId"],"additionalProperties":false}}}},"responses":{"204":{"description":"Team deleted successfully"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Team not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Teams"],"security":[{"BearerAuth":[]}],"operationId":"deleteTeam","summary":"Delete a team"},"post":{"description":"Create a new team","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"e2eOnlyEntitlements":{"type":"array","items":{"type":"object","properties":{"entitlement_id":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"required":["entitlement_id","quantity"],"additionalProperties":false},"deprecated":true,"description":"Internal use only. Ignored in public requests."}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Team created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"ident":{"type":"array","items":{"type":"object","properties":{"identity":{"type":"object","properties":{"name":{"type":"string"},"email_address":{"type":"string","nullable":true}},"required":["name","email_address"],"additionalProperties":false}},"required":["identity"],"additionalProperties":false}}},"required":["id","name","ident"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Teams"],"security":[{"BearerAuth":[]}],"operationId":"postTeam","summary":"Create a new team"},"patch":{"description":"Update team name and/or LLM configuration","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team to update"},"name":{"type":"string","minLength":1,"description":"The new name of the team. If not provided, the team name will not be updated."},"llmConfig":{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["openai"]},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri","description":"Custom base URL for OpenAI API (e.g., for Azure OpenAI)"}},"required":["provider","apiKey"]},{"type":"object","properties":{"provider":{"type":"string","enum":["azure-openai"]},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri","description":"Azure OpenAI base URL"},"smallModelDeploymentName":{"type":"string","description":"Deployment name for small model in Azure"},"largeModelDeploymentName":{"type":"string","description":"Deployment name for large model in Azure"}},"required":["provider","apiKey","baseUrl","smallModelDeploymentName","largeModelDeploymentName"]},{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic"]},"apiKey":{"type":"string"}},"required":["provider","apiKey"]},{"nullable":true}],"description":"The new LLM configuration for the team. Pass null to clear existing configuration. If not provided, the LLM configuration will not be updated.","deprecated":true}},"required":["teamId"],"additionalProperties":false}}}},"responses":{"204":{"description":"Team updated successfully"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Teams"],"security":[{"BearerAuth":[]}],"operationId":"patchTeam","summary":"Update team name and/or LLM configuration"}},"/api/v1/token":{"post":{"description":"Exchange credentials for delegation tokens.\n\nSupported grant types and authentication:\n- `session_token` (bearer-protected): requires `Authorization: Bearer <Auth0 access token>`. Mints a short-lived (10s) session token bound to the requested integration and project.\n- `delegation_token` (integration-secret protected): exchanges a session token plus the integration `app_secret` for a delegation access token (and, when allowed, a refresh token). No bearer token is used.\n- `refresh_token` (integration-secret protected): exchanges a refresh token plus the integration `app_secret` for a new delegation/refresh pair. No bearer token is used.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"grantType":{"type":"string","enum":["session_token"]},"integrationId":{"type":"string","format":"uuid"},"projectId":{"type":"string","format":"uuid"},"allowRefresh":{"type":"boolean","default":false}},"required":["grantType","integrationId","projectId"]},{"type":"object","properties":{"grantType":{"type":"string","enum":["delegation_token"]},"sessionToken":{"type":"string"},"integrationId":{"type":"string","format":"uuid"},"integrationSecret":{"type":"string"}},"required":["grantType","sessionToken","integrationId","integrationSecret"]},{"type":"object","properties":{"grantType":{"type":"string","enum":["refresh_token"]},"refreshToken":{"type":"string"},"integrationId":{"type":"string","format":"uuid"},"integrationSecret":{"type":"string"}},"required":["grantType","refreshToken","integrationId","integrationSecret"]}]}}}},"responses":{"200":{"description":"Token exchange successful","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"sessionToken":{"type":"string"},"expiresIn":{"type":"number"}},"required":["sessionToken","expiresIn"]},{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"tokenType":{"type":"string","enum":["Bearer"]},"expiresIn":{"type":"number"}},"required":["accessToken","tokenType","expiresIn"]}]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Integration or project not found"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Authentication"],"security":[],"operationId":"postToken","summary":"Exchange credentials for delegation tokens."},"options":{"tags":["Authentication"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsToken","summary":"Handles preflight requests."}},"/api/v1/utm-mapper-link-configuration":{"options":{"tags":["UTM Mapper"],"deprecated":true,"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsUtmMapperLinkConfiguration","summary":"Handles preflight requests."},"get":{"deprecated":true,"tags":["UTM Mapper"],"parameters":[{"in":"query","name":"projectId","description":"The project ID to get UTM mapper link configuration for.","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkConfiguration"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getUtmMapperLinkConfiguration","description":"GET /api/v1/utm-mapper-link-configuration (UTM Mapper)","summary":"GET /api/v1/utm-mapper-link-configuration (UTM Mapper)"}},"/api/v1/vercel-patch":{"get":{"description":"Gets the value of the parameter","deprecated":true,"parameters":[{"in":"query","name":"projectId","schema":{"type":"string","format":"uuid"},"required":true},{"in":"query","name":"compositionId","schema":{"type":"string","format":"uuid"},"required":true},{"in":"query","name":"componentId","schema":{"type":"string","format":"uuid"},"required":true},{"in":"query","name":"parameter","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string"}},"required":["value"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Vercel"],"security":[{"BearerAuth":[]}],"operationId":"getVercelPatch","summary":"Gets the value of the parameter"},"post":{"description":"Sets the value of the parameter","deprecated":true,"parameters":[{"in":"query","name":"projectId","schema":{"type":"string","format":"uuid"},"required":true},{"in":"query","name":"compositionId","schema":{"type":"string","format":"uuid"},"required":true},{"in":"query","name":"componentId","schema":{"type":"string","format":"uuid"},"required":true},{"in":"query","name":"parameter","schema":{"type":"string"},"required":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string"}},"required":["value"],"additionalProperties":true}}}},"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Vercel"],"security":[{"BearerAuth":[]}],"operationId":"postVercelPatch","summary":"Sets the value of the parameter"}},"/api/v1/views":{"get":{"description":"Lists saved views for a project + resource type.","parameters":[{"schema":{"type":"string","description":"Project the views belong to."},"required":true,"description":"Project the views belong to.","name":"projectId","in":"query"},{"schema":{"type":"string","enum":["composition","compositionPattern","component","componentPattern","entry","entryPattern","contentType","blockType","release","signal","intent","audience","asset"],"description":"Resource type these views apply to (e.g. \"entry\")."},"required":true,"description":"Resource type these views apply to (e.g. \"entry\").","name":"resourceType","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0,"description":"Number of records to skip."},"required":false,"description":"Number of records to skip.","name":"offset","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":200,"description":"Maximum number of records to return."},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"views":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","maxLength":500},"searchTerm":{"type":"string","maxLength":500},"filters":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":200},"dynamicField":{"type":"string","maxLength":500},"operator":{"type":"string","minLength":1,"maxLength":50},"value":{"anyOf":[{"type":"string","maxLength":2000},{"type":"array","items":{"type":"string","maxLength":2000},"maxItems":100}]}},"required":["field","operator","value"],"additionalProperties":false},"maxItems":50},"sort":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_.-]+_(ASC|DESC)$/u"},"maxItems":1},"shared":{"type":"boolean"},"icon":{"type":"string","minLength":1,"maxLength":2024},"id":{"type":"string"},"projectId":{"type":"string"},"resourceType":{"type":"string","enum":["composition","compositionPattern","component","componentPattern","entry","entryPattern","contentType","blockType","release","signal","intent","audience","asset"]},"createdBy":{"type":"string","nullable":true},"created":{"type":"string","format":"date-time"},"modified":{"type":"string","format":"date-time"}},"required":["name","filters","shared","id","projectId","resourceType","createdBy","created","modified"],"additionalProperties":false}},"totalCount":{"type":"number"}},"required":["views","totalCount"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Views"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getViews","summary":"Lists saved views for a project + resource type."},"delete":{"description":"Deletes a saved view by id.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"}},"required":["id","projectId"],"additionalProperties":false}}}},"responses":{"204":{"description":"No Content","content":{"application/json":{"schema":{"type":"string","maxLength":0}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"View not found."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Views"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"deleteViews","summary":"Deletes a saved view by id."},"put":{"description":"Create-or-replace a saved view by id. The caller mints the UUID. Omitted optional fields are cleared. `shared` may only be promoted (personal → shared); demotion returns 400. `projectId` and `resourceType` are immutable after create.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","maxLength":500},"searchTerm":{"type":"string","maxLength":500},"filters":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":200},"dynamicField":{"type":"string","maxLength":500},"operator":{"type":"string","minLength":1,"maxLength":50},"value":{"anyOf":[{"type":"string","maxLength":2000},{"type":"array","items":{"type":"string","maxLength":2000},"maxItems":100}]}},"required":["field","operator","value"],"additionalProperties":false},"maxItems":50},"sort":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_.-]+_(ASC|DESC)$/u"},"maxItems":1},"shared":{"type":"boolean"},"icon":{"type":"string","minLength":1,"maxLength":2024},"id":{"type":"string"},"projectId":{"type":"string"},"resourceType":{"type":"string","enum":["composition","compositionPattern","component","componentPattern","entry","entryPattern","contentType","blockType","release","signal","intent","audience","asset"]}},"required":["name","filters","shared","id","projectId","resourceType"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","maxLength":500},"searchTerm":{"type":"string","maxLength":500},"filters":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":200},"dynamicField":{"type":"string","maxLength":500},"operator":{"type":"string","minLength":1,"maxLength":50},"value":{"anyOf":[{"type":"string","maxLength":2000},{"type":"array","items":{"type":"string","maxLength":2000},"maxItems":100}]}},"required":["field","operator","value"],"additionalProperties":false},"maxItems":50},"sort":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_.-]+_(ASC|DESC)$/u"},"maxItems":1},"shared":{"type":"boolean"},"icon":{"type":"string","minLength":1,"maxLength":2024},"id":{"type":"string"},"projectId":{"type":"string"},"resourceType":{"type":"string","enum":["composition","compositionPattern","component","componentPattern","entry","entryPattern","contentType","blockType","release","signal","intent","audience","asset"]},"createdBy":{"type":"string","nullable":true},"created":{"type":"string","format":"date-time"},"modified":{"type":"string","format":"date-time"}},"required":["name","filters","shared","id","projectId","resourceType","createdBy","created","modified"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"View not found (or belongs to another project)."},"409":{"description":"Quota exceeded: at most 100 saved views allowed for this project + resource type + user. Remove an existing view before creating a new one."},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Views"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"putViews","summary":"Create-or-replace a saved view by id."},"options":{"tags":["Views"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsViews","summary":"Handles preflight requests."}},"/api/v1/workflows":{"get":{"tags":["Workflows"],"parameters":[{"in":"query","name":"projectId","description":"The project to fetch workflows for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"offset","description":"Number of records to skip","schema":{"type":"integer","minimum":0}},{"in":"query","name":"limit","description":"Max number of records to return","schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000}},{"in":"query","name":"keyword","description":"Matches workflows where their name contains the specified keyword.\n","schema":{"type":"string","maxLength":32}},{"in":"query","name":"workflowIDs","description":"Matches workflows where their ID is one of a list.\n","schema":{"type":"array","items":{"type":"string","format":"uuid"}}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowDefinition"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getWorkflows","description":"GET /api/v1/workflows (Workflows)","summary":"GET /api/v1/workflows (Workflows)"},"put":{"tags":["Workflows"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","workflow"],"properties":{"workflow":{"$ref":"#/components/schemas/WorkflowDefinition"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putWorkflows","description":"PUT /api/v1/workflows (Workflows)","summary":"PUT /api/v1/workflows (Workflows)"},"delete":{"tags":["Workflows"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","workflowId"],"properties":{"workflowId":{"type":"string","format":"uuid"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteWorkflows","description":"DELETE /api/v1/workflows (Workflows)","summary":"DELETE /api/v1/workflows (Workflows)"}},"/api/v2/aggregate":{"options":{"tags":["Aggregates"],"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsAggregate","summary":"Handles preflight requests."},"get":{"tags":["Aggregates"],"parameters":[{"in":"query","name":"projectId","description":"The project to fetch aggregates for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"aggregateId","description":"Limit the results to a specific aggregate ID","required":false,"schema":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-\\$]+$"}},{"in":"query","name":"type","description":"Limit the results to a specific aggregate type\n0: Audience\n1: Intent\n","required":false,"schema":{"type":"number","enum":[0,1]}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["aggregates"],"properties":{"aggregates":{"type":"array","items":{"$ref":"#/components/schemas/AggregateData"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getAggregate","description":"GET /api/v2/aggregate (Aggregates)","summary":"GET /api/v2/aggregate (Aggregates)"},"put":{"tags":["Aggregates"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","aggregate"],"properties":{"aggregate":{"$ref":"#/components/schemas/AggregateData"},"projectId":{"type":"string","format":"uuid"},"skipInputs":{"type":"boolean","default":false,"description":"Skips updating aggregate inputs and upserts only the aggregate definition.\nInputs data is still required, but is ignored and not saved or validated.\nUseful when creating aggregates that reference each other: Create the definitions, then the inputs.\n"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putAggregate","description":"PUT /api/v2/aggregate (Aggregates)","summary":"PUT /api/v2/aggregate (Aggregates)"},"delete":{"tags":["Aggregates"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","aggregateId"],"properties":{"aggregateId":{"type":"string","maxLength":40,"minLength":1},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteAggregate","description":"DELETE /api/v2/aggregate (Aggregates)","summary":"DELETE /api/v2/aggregate (Aggregates)"}},"/api/v2/dimension":{"options":{"tags":["Dimensions"],"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsDimension","summary":"Handles preflight requests."},"get":{"tags":["Dimensions"],"parameters":[{"in":"query","name":"projectId","description":"The project to fetch dimensions for","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["dimensions"],"properties":{"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/DimensionDefinition"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getDimension","description":"GET /api/v2/dimension (Dimensions)","summary":"GET /api/v2/dimension (Dimensions)"}},"/api/v2/insights":{"get":{"description":"Fetch insights data","parameters":[{"schema":{"type":"string","enum":["personalizationSummary","personalizationTimeseries","testsSummary","testsTimeseries","sessionsSummary","sessionsTimeseries","segmentSummary","segmentTimeseries","goalsSummary","goalsTimeseries","enrichmentSummary","enrichmentTimeseries","compositionSummary","compositionTimeseries","pathnameSummary","pathnameTimeseries","deviceSummary"]},"required":true,"name":"insightType","in":"query"},{"schema":{"type":"string"},"required":true,"name":"projectId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":false,"name":"endDate","in":"query"},{"schema":{"type":"string"},"required":false,"name":"compositionId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"pathname","in":"query"},{"schema":{"type":"string"},"required":false,"name":"pmNodePath","in":"query"},{"schema":{"type":"number"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"name","in":"query"},{"schema":{"type":"string"},"required":false,"name":"goalId","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"style":"form","explode":false,"name":"dynamicInputKeys","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"style":"form","explode":false,"name":"dynamicInputValues","in":"query"},{"schema":{"type":"boolean"},"required":false,"name":"includeGoals","in":"query"},{"schema":{"type":"boolean"},"required":false,"name":"includeBounceRate","in":"query"},{"schema":{"type":"string"},"required":false,"name":"segmentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"enrichmentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"enrichmentKey","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deviceType","in":"query"}],"responses":{"200":{"description":"200 response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"nullable":true}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"404 response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Insights"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getInsights2","summary":"Fetch insights data"}},"/api/v2/manifest":{"options":{"tags":["Manifest"],"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsManifest","summary":"Handles preflight requests."},"get":{"description":"Fetches the optimization Manifest for a given project.\nIf no manifest has ever been published, and an API key is used that has preview manifest permissions then the current preview manifest will be returned (in delivery format).\n","tags":["Manifest"],"parameters":[{"in":"query","name":"preview","schema":{"type":"boolean","default":false,"description":"If true, returns a preview of the manifest instead of the last published version. The response format changes depending on the value of the preview parameter."}},{"in":"query","name":"projectId","required":true,"schema":{"type":"string","format":"uuid","description":"The ID of the project to fetch the manifest for."}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestV2"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"description":"No manifest has ever been published, and the API key does not have preview permissions","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getManifest","summary":"Fetches the optimization Manifest for a given project."}},"/api/v2/members":{"get":{"description":"Lists members of a team and their permissions. Callers that are not a team admin will see all members, but project roles and team admin status will only be provided for the caller identity.","parameters":[{"schema":{"type":"string"},"required":true,"name":"teamId","in":"query"},{"schema":{"type":"string","enum":["member","apiKey","pat","serviceAccount","automation"],"description":"Filter by member type: member (oauth login), apiKey (all API keys), pat (PATs only), serviceAccount (service accounts only), automation (automation machine identities)"},"required":false,"description":"Filter by member type: member (oauth login), apiKey (all API keys), pat (PATs only), serviceAccount (service accounts only), automation (automation machine identities)","name":"type","in":"query"},{"schema":{"type":"string","description":"Filter PATs by owner subject. Requires type=pat. Returns only PATs owned by this user."},"required":false,"description":"Filter PATs by owner subject. Requires type=pat. Returns only PATs owned by this user.","name":"ownerSubject","in":"query"},{"schema":{"type":"string","description":"Filter to a specific member by subject. Useful for fetching a single member."},"required":false,"description":"Filter to a specific member by subject. Useful for fetching a single member.","name":"subject","in":"query"},{"schema":{"type":"string","description":"Search keyword to filter members by name or email (case-insensitive)."},"required":false,"description":"Search keyword to filter members by name or email (case-insensitive).","name":"keyword","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"description":"Number of records to skip for pagination. Defaults to 0."},"required":false,"description":"Number of records to skip for pagination. Defaults to 0.","name":"offset","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum number of records to return. Maximum 1000 when specified, but no limit is used when unspecified."},"required":false,"description":"Maximum number of records to return. Maximum 1000 when specified, but no limit is used when unspecified.","name":"limit","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"Includes additional metadata with member info, specifically created timestamp and project names."},"required":false,"description":"Includes additional metadata with member info, specifically created timestamp and project names.","name":"includeMetadata","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"Includes project and role assignments for each member. Required to see role information."},"required":false,"description":"Includes project and role assignments for each member. Required to see role information.","name":"includeProjects","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"Includes custom permissions for each member (deprecated feature). Requires includeProjects to be true.","deprecated":true},"required":false,"description":"Includes custom permissions for each member (deprecated feature). Requires includeProjects to be true.","name":"includeCustomPermissions","in":"query"},{"schema":{"type":"boolean","nullable":true,"description":"When true, includes totalCount in the response for pagination. May add slight overhead."},"required":false,"description":"When true, includes totalCount in the response for pagination. May add slight overhead.","name":"withTotalCount","in":"query"},{"schema":{"type":"string","enum":["name_ASC","name_DESC","email_ASC","email_DESC","created_ASC","created_DESC"],"description":"Sort order for results. Defaults to name_ASC."},"required":false,"description":"Sort order for results. Defaults to name_ASC.","name":"orderBy","in":"query"}],"responses":{"200":{"description":"Members list retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"subject":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"picture":{"type":"string"},"isTeamAdmin":{"type":"boolean"},"projects":{"type":"object","additionalProperties":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"string"}},"customPermissions":{"type":"array","items":{"type":"string","enum":["INSIGHTS_MANAGE","INSIGHTS_VIEW","LBL_CREATE","LBL_DELETE","LBL_UPDATE","OPT_CREATE_ENRICHMENTS","OPT_CREATE_INTENTS","OPT_CREATE_QUIRKS","OPT_CREATE_SIGNALS","OPT_CREATE_TESTS","OPT_DELETE_ENRICHMENTS","OPT_DELETE_INTENTS","OPT_DELETE_QUIRKS","OPT_DELETE_SIGNALS","OPT_DELETE_TESTS","OPT_PUB","OPT_PUBLISH","OPT_READ","OPT_WRITE_ENRICHMENTS","OPT_WRITE_INTENTS","OPT_WRITE_QUIRKS","OPT_WRITE_SIGNALS","OPT_WRITE_TESTS","PRM_NODE_CREATE","PRM_NODE_DELETE","PRM_NODE_EDIT","PRM_NODE_READ","PRM_SCHEMA","PROJECT","RDT_ADVANCED","RDT_CREATE","RDT_DELETE","RDT_UPDATE","UPM_AUTOMATION_MANAGE","UPM_COMPOSITION_SCHEMA","UPM_CREATE","UPM_DATACONN","UPM_DATATYPE","UPM_DELETE","UPM_ENTRY_SCHEMA","UPM_PROMPT_SCHEMA","UPM_PUB","UPM_PUBLISH","UPM_READ","UPM_RELEASE_CREATE","UPM_RELEASE_DELETE","UPM_RELEASE_LAUNCH","UPM_RELEASE_UPDATE","UPM_SCHEMA","UPM_WORKFLOW_MANAGE","UPM_WRITE","UTM_PUB","UTM_WRITE"]},"description":"When this is present, roles are ignored and custom permission assignment is used instead. Using roles is recommended instead.","deprecated":true},"name":{"type":"string","description":"Only present if includeMetadata is true"}},"required":["roles"]},"description":"Only present if includeProjects is true"},"type":{"type":"string","enum":["member","apiKey","automation"]},"apiKeyType":{"type":"string","enum":["serviceAccount","pat"],"description":"Distinguishes between service accounts and personal access tokens. Only present when type is \"apiKey\"."},"ownerSubject":{"type":"string","description":"The subject of the user who owns this PAT. Only present when apiKeyType is \"pat\"."},"expiresAt":{"type":"string","description":"ISO 8601 datetime when the token expires. Only present for API keys/PATs if includeMetadata is true and an expiration was set."},"apiKeyDisplay":{"type":"string","description":"Displayable identifier for the API key (e.g. \"uf2...a9a3\"). Not set for older API keys."},"memberSince":{"type":"string","description":"Only present if includeMetadata is true"},"createdBy":{"type":"string","description":"The subject of the user who added this member to the team. For users, this is who sent the invitation. For API keys, this is who created the key. Only present if includeMetadata is true."}},"required":["subject","name","isTeamAdmin","type"]}},"totalCount":{"type":"number","description":"Total number of members matching the query. Only present if withTotalCount is true."}},"required":["members"]}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"tags":["Members"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"operationId":"getMembers2","summary":"Lists members of a team and their permissions."},"options":{"tags":["Members"],"responses":{"204":{"description":"ok"}},"description":"Handles preflight requests. This endpoint allows CORS.","operationId":"optionsMembers2","summary":"Handles preflight requests."}},"/api/v2/quirk":{"options":{"tags":["Quirks"],"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsQuirk","summary":"Handles preflight requests."},"get":{"tags":["Quirks"],"description":"Gets quirk definitions for a project","parameters":[{"in":"query","name":"projectId","description":"The project to fetch quirk definitions for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"quirkId","description":"Limit the results to a specific quirk ID","required":false,"schema":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-]+$"}},{"in":"query","name":"withIntegrations","description":"Include quirks that are defined by integrations","required":false,"schema":{"type":"boolean","default":false}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["quirks"],"properties":{"quirks":{"type":"array","items":{"$ref":"#/components/schemas/Quirk"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getQuirk","summary":"Gets quirk definitions for a project"},"put":{"tags":["Quirks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","quirk"],"properties":{"quirk":{"$ref":"#/components/schemas/Quirk"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putQuirk","description":"PUT /api/v2/quirk (Quirks)","summary":"PUT /api/v2/quirk (Quirks)"},"delete":{"tags":["Quirks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","quirkId"],"properties":{"quirkId":{"type":"string","maxLength":36,"minLength":1,"pattern":"^[A-Za-z0-9\\-\\$]+$"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteQuirk","description":"DELETE /api/v2/quirk (Quirks)","summary":"DELETE /api/v2/quirk (Quirks)"}},"/api/v2/signal":{"options":{"tags":["Signals"],"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsSignal","summary":"Handles preflight requests."},"get":{"tags":["Signals"],"parameters":[{"in":"query","name":"projectId","description":"The project to fetch signals for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"signalId","description":"Limit the results to a specific signal ID","required":false,"schema":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-\\$]+$"}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["signals"],"properties":{"signals":{"type":"array","items":{"$ref":"#/components/schemas/SignalWithId"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getSignal","description":"GET /api/v2/signal (Signals)","summary":"GET /api/v2/signal (Signals)"},"put":{"tags":["Signals"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","signal"],"properties":{"signal":{"$ref":"#/components/schemas/SignalWithId"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putSignal","description":"PUT /api/v2/signal (Signals)","summary":"PUT /api/v2/signal (Signals)"},"delete":{"tags":["Signals"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","signalId"],"properties":{"signalId":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-\\$]+$"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteSignal","description":"DELETE /api/v2/signal (Signals)","summary":"DELETE /api/v2/signal (Signals)"}},"/api/v2/test":{"options":{"tags":["Tests"],"description":"Handles preflight requests. This endpoint allows CORS.","responses":{"204":{"description":"OK"}},"operationId":"optionsTest","summary":"Handles preflight requests."},"get":{"tags":["Tests"],"description":"Gets A/B test definitions for a project","parameters":[{"in":"query","name":"projectId","description":"The project to fetch tests for","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"testId","description":"Limit the results to a specific test public ID","required":false,"schema":{"type":"string","minLength":1,"maxLength":100}}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["tests"],"properties":{"tests":{"type":"array","items":{"$ref":"#/components/schemas/Test1"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"getTest","summary":"Gets A/B test definitions for a project"},"put":{"tags":["Tests"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","test"],"properties":{"test":{"$ref":"#/components/schemas/Test1"},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"putTest","description":"PUT /api/v2/test (Tests)","summary":"PUT /api/v2/test (Tests)"},"delete":{"tags":["Tests"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["projectId","testId"],"properties":{"testId":{"type":"string","minLength":1,"maxLength":100},"projectId":{"type":"string","format":"uuid"}},"additionalProperties":false}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"204":{"description":"OK"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"429":{"$ref":"#/components/responses/RateLimitError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"operationId":"deleteTest","description":"DELETE /api/v2/test (Tests)","summary":"DELETE /api/v2/test (Tests)"}}},"components":{"schemas":{"Error":{"type":"object","properties":{"errorMessage":{"description":"Error message(s) that occurred while processing the request","oneOf":[{"type":"array","items":{"type":"string"}},{"type":"string"}]}}},"PublicIdProperty":{"description":"Public ID (used in code). Do not change after creation","type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9-_]+$"},"ComponentDefinitionParameter":{"type":"object","description":"The definition of a component parameter","required":["id","name","type"],"properties":{"id":{"$ref":"#/components/schemas/PublicIdProperty"},"name":{"type":"string","description":"Friendly name of the parameter","maxLength":100,"minLength":1},"helpText":{"type":"string","description":"Appears next to the parameter in the Composition editor","maxLength":256,"minLength":0},"guidance":{"type":"string","description":"Context provided to AI when generating content for this parameter. May also be shown to humans.","maxLength":3000,"pattern":"^[^<>]+$"},"type":{"type":"string","description":"Type name of the parameter (provided by a Uniform integration)","maxLength":50,"minLength":1},"localizable":{"type":"boolean","description":"If true, this property can have locale-specific values. If false or not defined,\nthis property will have a single value that is shared for all locales\n"},"notLocalizedByDefault":{"type":"boolean","description":"When `localizable` is true, this property controls the default localizability of the property.\ntrue - when the property has no existing value, it will be in 'single value' mode and not store locale specific values\nfalse/undefined - when the property has no existing value, it will store separate values for each enabled locale\n\nIf `localized` is false, this has no effect.\n"},"allowConditionalValues":{"type":"boolean","description":"Enables creating additional conditional values for the parameter based on criteria such as dynamic inputs.\nWhen combined with a localized value, each locale has independent conditional values.\n\nWhen not defined, conditional values are not allowed.\n"},"typeConfig":{"description":"The configuration object for the type (type-specific)"}},"additionalProperties":false},"ComponentDefinitionSlot":{"type":"object","description":"The definition of a named component slot that can contain other components","required":["id","name","inheritAllowedComponents","allowedComponents"],"properties":{"id":{"$ref":"#/components/schemas/PublicIdProperty"},"name":{"type":"string","description":"Friendly name of the slot","maxLength":100,"minLength":1},"allowedComponents":{"type":"array","description":"A list of component definition public IDs that are allowed in this named slot","items":{"type":"string","maxLength":100}},"inheritAllowedComponents":{"type":"boolean","description":"Whether this slot inherits its allowed components from the parent slot it lives in. If true, `allowedComponents` is irrelevant.\nIf `allowAllComponents` is true, this value is ignored\n","default":false},"allowAllComponents":{"type":"boolean","description":"When false or not defined, only components in `allowedComponents` may be added to this slot - and if `allowedComponents` is empty, nothing can be added.\nWhen true, every component and pattern that is defined may be added to this slot regardless of any other setting including `inheritAllowedComponents`\n"},"patternsInAllowedComponents":{"type":"boolean","description":"When not defined, or false: all patterns for components listed in `allowedComponents` are automatically allowed in the slot.\nWhen true: patterns for components listed in `allowedComponents` are not allowed in the slot unless explicitly added to `allowedComponents` as `$p:<patternid>`\n"},"minComponents":{"type":"integer","description":"Minimum valid number of components in this slot","maximum":2147483647},"maxComponents":{"type":"integer","description":"Maximum valid number of components in this slot","maximum":2147483647}},"additionalProperties":false},"ComponentDefinitionSlugSettings":{"type":"object","description":"The definition of a composition's slug settings","properties":{"required":{"type":"string","description":"Whether the slug is required\nno: slug is optional\nyes: slug is required\ndisabled: slug is disabled and will not be shown in the editor\n","default":"no","enum":["no","yes","disabled"]},"unique":{"type":"string","description":"Slug uniqueness configuration.\nno = no unique constraint\nlocal = must be unique within this component type\nglobal = must be unique across all component types\n","enum":["no","local","global"]},"regularExpression":{"type":"string","description":"Regular expression slugs must match"},"regularExpressionMessage":{"type":"string","description":"Custom error message when regular expression validation fails.\nHas no effect if `regularExpression` is not set\n"}}},"ComponentDefinitionVariant":{"type":"object","description":"The definition of a component variant","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/PublicIdProperty"},"name":{"type":"string","description":"Friendly name of the variant","maxLength":100,"minLength":1}},"additionalProperties":false},"ComponentDefinitionPermission":{"type":"object","description":"Permission set for a component definition","required":["roleId","permission","state"],"properties":{"roleId":{"$ref":"#/components/schemas/PublicIdProperty"},"permission":{"type":"string","description":"Permission type for this permission ComponentDefinition:\nread | write | create | delete\n","enum":["read","write","create","delete"]},"state":{"type":"integer","description":"State of the component that this permission applies to","maximum":64,"minimum":0}},"additionalProperties":false},"ComponentDefinition":{"type":"object","description":"Defines a component type that can live on a Composition","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/PublicIdProperty"},"name":{"type":"string","description":"Friendly name of the component definition","maxLength":100,"minLength":1,"pattern":"^[^<>]*$"},"icon":{"type":"string","description":"Icon name for the component definition (e.g. 'screen')","default":"screen","maxLength":2024},"titleParameter":{"type":"string","description":"The public ID of the parameter whose value should be used to create a display title for this component in the UI.\nThe parameter type must support being used as a title parameter for this to work\n","maxLength":100,"nullable":true,"default":null},"thumbnailParameter":{"type":"string","description":"The public ID of the parameter whose value should be used as a thumbnail for compositions of this component in the UI\n","maxLength":100,"nullable":true,"default":null},"canBeComposition":{"type":"boolean","description":"Whether this component type can be the root of a composition. If false, this component is only used within slots on other components","default":false},"parameters":{"type":"array","description":"The parameters for this component. Parameters are key-value pairs that can be anything from text values to links to CMS entries","items":{"$ref":"#/components/schemas/ComponentDefinitionParameter"}},"categoryId":{"type":"string","format":"uuid","description":"Reference to the category this component definition belongs to","nullable":true,"default":null},"description":{"type":"string","description":"Description of the component definition","maxLength":2024},"previewImageUrl":{"type":"string","description":"Preview image URL for the component definition (shown in the UI)","maxLength":2024},"useTeamPermissions":{"type":"boolean","description":"if this component uses team permissions or custom permissions","default":true},"permissions":{"type":"array","description":"Custom role permissions for this component definition","items":{"$ref":"#/components/schemas/ComponentDefinitionPermission"}},"slots":{"type":"array","description":"The named slots for this component; placement areas where arrays of other components can be added","items":{"$ref":"#/components/schemas/ComponentDefinitionSlot"}},"slugSettings":{"$ref":"#/components/schemas/ComponentDefinitionSlugSettings"},"defaults":{"description":"Default component instance value","oneOf":[{"$ref":"#/components/schemas/ComponentInstance"},{"enum":[null]}]},"variants":{"type":"array","description":"Named variants for this component; enables the creation of visual variants that use the same parameter data","items":{"$ref":"#/components/schemas/ComponentDefinitionVariant"}},"created":{"type":"string","description":"Created date string for this definition (ignored for writes)","maxLength":50},"updated":{"type":"string","description":"Last modified date string for this definition (ignored for writes)","maxLength":50},"workflowId":{"type":"string","format":"uuid","description":"ID of the workflow that instances of this component definition will use by default. When not set, no workflow is attached"}},"additionalProperties":false},"ContentType":{"type":"object","description":"Defines a content type","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/PublicIdProperty"},"name":{"type":"string","description":"Friendly name of the content type","maxLength":100,"minLength":1,"pattern":"^[^<>]*$"},"entryName":{"type":"string","description":"The public ID of the field whose value should be used to create a display name for entries of this content type in the UI.\nThe field type must support being used as an entry name for this to work\n","maxLength":100,"nullable":true},"thumbnailField":{"type":"string","description":"The public ID of the field whose value should be used as a thumbnail for entries of this content type in the UI\n","maxLength":100,"nullable":true,"default":null},"fields":{"type":"array","description":"The fields for this content type. Fields are key-value pairs that can be text, numbers, JSON objects, etc.","items":{"$ref":"#/components/schemas/ComponentDefinitionParameter"}},"description":{"type":"string","description":"Description of the content type","maxLength":2024},"icon":{"type":"string","description":"Icon name for the content type (e.g. 'screen')","default":"file-document","maxLength":2024},"created":{"type":"string","description":"Created date string for this content type (ignored for writes)","maxLength":50},"updated":{"type":"string","description":"Last modified date string for this content type (ignored for writes)","maxLength":50},"slugSettings":{"$ref":"#/components/schemas/ComponentDefinitionSlugSettings"},"type":{"description":"The definition type of this content type (block or content type)","type":"string","enum":["contentType","block"],"default":"contentType"},"useTeamPermissions":{"type":"boolean","description":"if this content type uses team permissions or custom permissions","default":true},"permissions":{"type":"array","description":"Custom role permissions for this content type","items":{"$ref":"#/components/schemas/ComponentDefinitionPermission"}},"workflowId":{"type":"string","format":"uuid","description":"ID of the workflow that instances of this content type will use by default. When not set, no workflow is attached"},"previewConfigurations":{"type":"array","description":"Configurations for previewing an entry on a consuming pattern or composition.","items":{"$ref":"#/components/schemas/ContentTypePreviewConfiguration"}}},"additionalProperties":false},"ContentTypePreviewConfiguration":{"type":"object","description":"Defines a configuration for previewing an entry on a consuming pattern or composition.","required":["type","label","id"],"properties":{"type":{"type":"string","description":"The type of preview configuration","enum":["pattern","project-map"]},"label":{"type":"string","description":"Display label for the preview configuration","minLength":1,"maxLength":100,"pattern":"^[^<>]*$"},"id":{"type":"string","description":"Target preview entity ID (project map node ID or pattern ID)","format":"uuid"},"dynamicInputs":{"type":"object","description":"Optional mapping of dynamic input names to their values","additionalProperties":{"type":"string"}}},"additionalProperties":false},"ComponentParameter":{"type":"object","description":"Defines an editable parameter on a component","properties":{"value":{"description":"The value of the parameter. Any JSON-serializable value is acceptable"},"type":{"type":"string","description":"The type of the parameter. Determines how it is displayed when editing and tells the consumer how to process it","minLength":1},"connectedData":{"deprecated":true,"$ref":"#/components/schemas/DataElementConnectionDefinition"},"locales":{"type":"object","description":"Locale-specific values for this parameter. Keys are locale codes, and values are the `value` in that locale.\nNote that locales must be registered on the entry/composition `_locales` before being used\n","additionalProperties":{"example":"{ en-US: 'hello', de: 'hallo' }\n"}},"conditions":{"$ref":"#/components/schemas/ComponentParameterConditions"},"localesConditions":{"type":"object","description":"Locale-specific conditional values for this parameter. Keys are locale codes, and values are the `conditions` for that locale.\n","additionalProperties":{"$ref":"#/components/schemas/ComponentParameterConditions","example":"{ en-US: [{ when: { rule: '$di', source: 'productId', op: 'is', value: '123' }, value: 'hello 123' }] }\n"}}},"required":["type"],"additionalProperties":false},"ComponentParameterConditions":{"type":"array","description":"Array of alternate values which are based on conditions.\n\nWhen requested with an explicit locale parameter, or via the route API:\n* Conditions are evaluated sequentially and the first match is used. If a match is found, the conditions are eliminated.\n* If no conditions match, the `value` property is used.\n* If a condition cannot be evaluated yet (i.e. a client-side criteria), it is left alone.\n\nWhen no locale is passed to a non-route API, conditions are not processed and all conditions are returned.\n","items":{"$ref":"#/components/schemas/ComponentParameterConditionalValue"}},"ComponentParameterConditionalValue":{"type":"object","description":"Defines a conditional value for a component parameter\n","properties":{"when":{"$ref":"#/components/schemas/VisibilityCriteriaGroup"},"value":{"description":"The value of the parameter. Any JSON-serializable value is acceptable.\nA value of `null` will cause the parameter value to be removed, if it matches.\n"},"id":{"type":"number","description":"Unique sequence identifier of the conditional value within the component parameter.\nThis value must be unique within the conditional values array, and it should not change after a condition is created.\n"}},"required":["when","id","value"],"additionalProperties":false},"VisibilityCriteriaGroup":{"deprecated":true,"description":"beta functionality subject to change","type":"object","properties":{"op":{"type":"string","description":"The boolean operator to join the clauses with. Defaults to & if not specified.","enum":["&","|"]},"clauses":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/VisibilityCriteria"},{"$ref":"#/components/schemas/VisibilityCriteriaGroup"}]}}},"required":["clauses"],"additionalProperties":false},"VisibilityCriteria":{"deprecated":true,"description":"beta functionality subject to change","type":"object","properties":{"rule":{"type":"string","description":"The rule type to execute","maxLength":32},"source":{"type":"string","description":"The source value of the rule.\nFor rules which have multiple classes of match, for example a dynamic input matches on a named DI, the rule is dynamic input and the DI name is the source.\n","maxLength":128},"op":{"type":"string","description":"The rule-definition-specific operator to test against","maxLength":10},"value":{"oneOf":[{"type":"string","maxLength":1024},{"type":"array","items":{"type":"string","maxLength":1024}}],"description":"The value, or if an array several potential values, to test against. In most rules, multiple values are OR'd together ('any of') but this is not a hard requirement."}},"required":["rule","op","value"],"additionalProperties":false},"DataElementConnectionDefinition":{"type":"object","description":"Defines a connection to a dynamic token on a data resource\n","properties":{"pointer":{"description":"A JSON Pointer expression that defines the data resource dynamic token value","type":"string","maxLength":256},"syntax":{"type":"string","description":"The syntax used to select the dynamic token to bind to","enum":["jptr"]},"failureAction":{"type":"string","description":"The action to take if the dynamic token cannot be resolved\n- t: TOKEN: Removes the failed dynamic token value, leaving the rest of the property value, if any, intact [default]\n        NOTE: If the _only_ value in the property is a dynamic token, the property value is removed (as with 'p' below)\n        NOTE: If the _failureDefault_ property is also set, that default value will be used instead of removing the token.\n              this only applies when the failureAction is 't' or undefined, the default is otherwise ignored\n- p: PROPERTY: Removes the entire property value, including any other dynamic tokens or static values in the property\n- c: COMPONENT: Removes the whole parent component or block that contains the property.\n        NOTE: If a 'component' failure occurs on the root component of a composition, or an entry,\n        it is treated as an 'a' failure because removing the root means we must remove all\n- a: ALL: Fails the whole entry or composition. This will result in the item returning a 404 from APIs, and being removed from API list responses\n","enum":["t","p","c","a"]},"failureLogLevel":{"type":"string","description":"How to report when the dynamic token cannot be resolved\n- e: ERROR: Report an error message (this will prevent publishing)\n- w: WARNING: Report a warning message [default]\n- i: INFO: Log an informative message (failure is expected/normal, i.e. optional data)\n","enum":["e","w","i"]},"failureDefault":{"type":"string","description":"The default value to use if the dynamic token cannot be resolved.\nThis is only used if the failureAction is the default (undefined, or explicitly token)\n"}},"required":["pointer","syntax"],"additionalProperties":false},"ComponentInstance":{"type":"object","description":"Defines the shape of a component instance served by the composition API","required":["type"],"properties":{"type":{"type":"string","description":"Type of the component instance (public_id of its definition)","maxLength":100,"minLength":1},"parameters":{"type":"object","description":"Component parameter values for the component instance","additionalProperties":{"$ref":"#/components/schemas/ComponentParameter"}},"variant":{"type":"string","description":"Public ID of alternate visual appearance for this component, if any selected"},"slots":{"type":"object","description":"Slots containing any child components","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/ComponentInstance"}}},"_id":{"type":"string","description":"Unique identifier of the component within the composition.\nNo assumptions should be made about the format of this value other than \"it will be unique.\"\nThis is not returned in GET replies unless specifically requested via `withComponentIDs` API parameter.\nWhen updating or creating a composition, if you do not specify an _id for each component, one will be created and stored for you\n","minLength":1,"maxLength":2000},"_pattern":{"type":"string","pattern":"^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$","description":"Indicates this component instance should be sourced from a pattern library pattern"},"_dataResources":{"$ref":"#/components/schemas/DataResourceDefinitions"},"_patternDataResources":{"type":"object","description":"Data definitions coming from a pattern resolved for this component. Merged with _dataResources during resolution.\nMeans nothing for PUTs; it will be ignored\n","additionalProperties":{"$ref":"#/components/schemas/DataResourceDefinition"}},"_patternOptedInQueryStrings":{"type":"array","description":"Query-string opt-ins coming from a pattern resolved for this component.\nMeans nothing for PUTs; it will be ignored\n","maxItems":50,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":50}},"_patternError":{"$ref":"#/components/schemas/PatternError"},"_overrides":{"type":"object","description":"Defines patch overrides to component IDs that live in the composition.\nThis can be used to override parameters that are defined on patterns,\nincluding nested patterns, with values that are specific to this composition.\nThe keys in this object are component IDs.\nOverrides are applied from the top down, so for example if both the composition\nand a pattern on the composition define an override on a nested pattern,\nthe composition's override replaces the pattern's.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","additionalProperties":{"$ref":"#/components/schemas/ComponentOverride"}},"_patternOverrides":{"type":"object","description":"Overrides coming from a pattern resolved for this component. Merged with _overrides during resolution.\nMeans nothing for PUTs; it will be ignored\n","additionalProperties":{"$ref":"#/components/schemas/ComponentOverride"}},"_overridability":{"description":"When used on a pattern, defines how the pattern's parameters may be overridden\nby consumers of the pattern.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","$ref":"#/components/schemas/ComponentOverridability"},"_locales":{"description":"Array of locales that have data defined. Only set for pattern references or composition defaults","type":"array","items":{"type":"string","maxLength":32}}},"additionalProperties":false},"RootComponentInstance":{"type":"object","description":"Defines the shape of the root component in a composition","required":["type","_id","_name"],"properties":{"type":{"type":"string","description":"Type of the component instance (public_id of its definition)","maxLength":100,"minLength":1},"parameters":{"type":"object","description":"Component parameter values for the component instance","additionalProperties":{"$ref":"#/components/schemas/ComponentParameter"}},"variant":{"type":"string","description":"Public ID of alternate visual appearance for this component, if any selected","maxLength":100},"projectMapNodes":{"type":"array","description":"Project map nodes associated with this component.  Must pass withProjectMapNodes parameter to be populated","items":{"$ref":"#/components/schemas/CompositionProjectMapNodeInfo"}},"slots":{"type":"object","description":"Slots containing any child components","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/ComponentInstance"}}},"_id":{"type":"string","description":"The ID of the composition","pattern":"^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$","minLength":1},"_slug":{"type":"string","description":"Slug pattern of this component","nullable":true,"maxLength":512,"pattern":"^[^<>]*$"},"_name":{"type":"string","description":"Friendly name of this component","maxLength":100,"minLength":1},"_author":{"type":"string","description":"Name of the author of the most recent change","minLength":1,"maxLength":255},"_authorSubject":{"type":"string","description":"Identity subject of the author of the most recent change","minLength":1,"maxLength":255},"_creator":{"type":"string","description":"Name of the original creator","minLength":1,"maxLength":255},"_creatorSubject":{"type":"string","description":"Identity subject of the original creator","minLength":1,"maxLength":255},"_pattern":{"type":"string","pattern":"^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$","description":"Indicates this component instance should be sourced from a pattern library pattern"},"_patternDataResources":{"type":"object","description":"Data definitions coming from a pattern resolved for this component. Merged with _dataResources during resolution.\nMeans nothing for PUTs; it will be ignored\n","additionalProperties":{"$ref":"#/components/schemas/DataResourceDefinition"}},"_patternOptedInQueryStrings":{"type":"array","description":"Query-string opt-ins coming from a pattern resolved for this component.\nMeans nothing for PUTs; it will be ignored\n","maxItems":50,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":50}},"_dataResources":{"$ref":"#/components/schemas/DataResourceDefinitions"},"_patternError":{"$ref":"#/components/schemas/PatternError"},"_overrides":{"type":"object","description":"Defines patch overrides to component IDs that live in the composition.\nThis can be used to override parameters that are defined on patterns,\nincluding nested patterns, with values that are specific to this composition.\nThe keys in this object are component IDs.\nOverrides are applied from the top down, so for example if both the composition\nand a pattern on the composition define an override on a nested pattern,\nthe composition's override replaces the pattern's.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","additionalProperties":{"$ref":"#/components/schemas/ComponentOverride"}},"_patternOverrides":{"type":"object","description":"Overrides coming from a pattern resolved for this component. Merged with _overrides during resolution.\nMeans nothing for PUTs; it will be ignored\n","additionalProperties":{"$ref":"#/components/schemas/ComponentOverride"}},"_overridability":{"description":"When used on a pattern, defines how the pattern's parameters may be overridden\nby consumers of the pattern.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","$ref":"#/components/schemas/ComponentOverridability"},"_locales":{"description":"Array of locales which have data defined on the composition. If empty, the current default locale implicitly has data","type":"array","items":{"type":"string","maxLength":32}},"_optedInQueryStrings":{"description":"Names of opt-in global query strings surfaced in the Canvas editor for this composition or pattern.\nOpt-ins coming from a resolved pattern move to _patternOptedInQueryStrings, so this always\nholds only what was authored here. Omitted whenever overrides are resolved.\n","type":"array","maxItems":50,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":50}}},"additionalProperties":false},"ComponentOverride":{"type":"object","description":"Defines how to override a specific component.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","properties":{"parameters":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ComponentParameter"}},"slots":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/ComponentInstance"}}},"variant":{"type":"string","maxLength":100},"dataResources":{"type":"object","description":"Overrides data resource definitions for a pattern component.\nObject keys defined under this property override the corresponding keys in the pattern's data resources.\nOverrides defined here replace values in either _dataResources or _patternDataResources on the target component.\n","additionalProperties":{"$ref":"#/components/schemas/DataResourceDefinition"}}}},"ComponentOverridability":{"description":"Defines how a component on a pattern may have its values overridden.\nNOTE: Data resources' overridability is defined in the data resource definition, not here.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","type":"object","properties":{"parameters":{"type":"object","description":"Defines component parameter value overrides. Keys are the parameter public ID","additionalProperties":{"$ref":"#/components/schemas/OverrideOptions"}},"variants":{"description":"Allows overriding a display variant is allowed if it is defined on the component the pattern is derived from. Default = false","type":"boolean"},"hideLockedParameters":{"description":"If true, parameters that are not overridable will be hidden by default on pattern instances' editors.\nIf false, all parameters will be shown on pattern instances' editors, but locked parameters will be read-only.\nIf not set, the default is false\n","type":"boolean"}}},"OverrideOptions":{"description":"Whether a parameter is overridable\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","type":"string","enum":["yes","no"]},"AlternativeDataSourceData":{"type":"object","description":"Additional set of headers, parameters, variables, etc to be used for data resolving in the context like e.g. Unpublished Data.\n","required":["baseUrl"],"properties":{"baseUrl":{"type":"string","description":"Base resource URL of the data source. No trailing slash","maxLength":256,"minLength":1,"pattern":"^https://.+[^/]$"},"headers":{"type":"array","description":"HTTP headers to pass with requests to the data source","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"},"omitIfEmpty":{"type":"boolean"}}}},"parameters":{"type":"array","description":"Query String parameters to pass with requests to the data type. Merged with parameters from the data source, overriding identical keys","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"},"omitIfEmpty":{"type":"boolean"}}}},"variables":{"type":"object","description":"Variables needed to make calls to the data source","additionalProperties":{"$ref":"#/components/schemas/DataVariableDefinition"}}},"additionalProperties":false},"DataSource":{"type":"object","description":"An instance of a data source (i.e. \"Master environment of the stable space\", \"Yelp API\", \"Sanity dev dataset\").\nThese are created in the UI and shared across a whole project.\nNOTE: If you acquire a list of data sources or do not have manage permissions, you will receive \"SECRET\"\nfor all header, parameter, and variable values to obscure the actual encrypted secret value\n","required":["id","displayName","connectorType","baseUrl"],"properties":{"id":{"type":"string","description":"Public ID of the data source","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9\\-]+$"},"displayName":{"type":"string","description":"Display name of the data source","maxLength":100,"minLength":1},"connectorType":{"type":"string","description":"The type of data connector this connects to (e.g. 'cms-items', provided by an installed integration)","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-]+$"},"baseUrl":{"type":"string","description":"Base resource URL of the data source. No trailing slash","maxLength":256,"minLength":1,"pattern":"^https://.+[^/]$"},"headers":{"type":"array","description":"HTTP headers to pass with requests to the data source","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"parameters":{"type":"array","description":"Query String parameters to pass with requests to the data type. Merged with parameters from the data source, overriding identical keys","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"variables":{"type":"object","description":"Variables needed to make calls to the data source","additionalProperties":{"$ref":"#/components/schemas/DataVariableDefinition"}},"localeMapping":{"type":"object","description":"Mapping of locale codes to data source locale codes. Keys are Uniform locale codes, values are data source locale codes.\nIf a locale is not mapped, it will be passed through to the data source as-is\n","additionalProperties":{"type":"string","maxLength":32}},"enableUnpublishedMode":{"type":"boolean","description":"If true, data source will require additional credentials to access unpublished data.\nIf false, no additional data source credentials are required and data resources of this data source won't be able to access unpublished data.\n"},"customPublic":{"type":"object","additionalProperties":true,"description":"Custom configuration accessible to all data connector UIs (data source, data type, and data resource editors) and custom edgehancers. This data should not contain secrets"},"custom":{"type":"object","additionalProperties":true,"description":"Custom configuration accessible to the data source editor UI and custom edgehancer that may contain secrets. This cannot be read by the data type or data resource editors"},"variants":{"type":"object","description":"Different connector detail variants to use in the different contexts like e.g. Unpublished Data","properties":{"unpublished":{"$ref":"#/components/schemas/AlternativeDataSourceData"}}},"created":{"type":"string","description":"Created date of the data source in ISO 8601 format (ignored for writes)"},"modified":{"type":"string","description":"Last modified date of the data source in ISO 8601 format (ignored for writes)"},"createdBy":{"type":"string","description":"User or API key ID that created the data source (ignored for writes)"},"modifiedBy":{"type":"string","description":"User or API key ID that last modified the data source (ignored for writes)"}},"additionalProperties":false},"DataType":{"type":"object","description":"A specific type of data that a Data Source can provide (i.e. \"Recipe\", \"Recipes List by Tag\", \"Yelp Reviews of My Restaurant\"). These are created in the UI and shared a whole project","required":["id","displayName","path","dataSourceId","method"],"properties":{"id":{"type":"string","description":"Public ID of the data type","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9\\-]+$"},"displayName":{"type":"string","description":"Display name of the data type","maxLength":100,"minLength":1},"dataSourceId":{"type":"string","description":"Public ID of the associated data source","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9\\-]+$"},"archetype":{"type":"string","description":"A connector-specific archetype for this data type; used to select UI as well as perform any\nnecessary post-processing on the response. e.g. 'cms-entry', 'cms-query'. Can be undefined if\nno special UI or processing is required\n","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-]+$"},"allowedOnComponents":{"type":"array","items":{"type":"string","description":"Public ID of a component type that this data type can be used on.\nFor components which are compositions, this allows this data type as resource data.\nFor non-composition components, this allows this data type as a pattern resource data\n","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9\\-]+$"}},"path":{"type":"string","description":"Resource path, appended to the data source's baseUrl (e.g. baseUrl = https://base.url, path = /v1/endpoint -> final URL https://base.url/v1/endpoint). Must have a leading slash","maxLength":1024,"minLength":0},"ttl":{"type":"integer","description":"Time-to-live (in seconds) for the resource data cache"},"purgeKey":{"type":"string","description":"A key for the resource data cache purging","minLength":36,"maxLength":36},"badgeIconUrl":{"description":"URL to a custom badge icon for the Uniform dashboard for this data type. If not set falls back to the data connector or integration icons","type":"string","minLength":6,"maxLength":256},"headers":{"description":"HTTP headers to pass with requests to the data type. Merged with headers from the data source, overriding identical keys","type":"array","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"},"omitIfEmpty":{"type":"boolean"}}}},"parameters":{"description":"Query String parameters to pass with requests to the data type. Merged with parameters from the data source, overriding identical keys","type":"array","items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"},"omitIfEmpty":{"type":"boolean"}}}},"body":{"type":"string","description":"Body to pass with requests to the data type (ignored unless the method is POST)","maxLength":8192},"method":{"type":"string","description":"HTTP method to use with requests to the data type","default":"GET","enum":["GET","POST","HEAD"]},"variables":{"type":"object","description":"Variables needed to make calls to the data type. Merged with variables from the data source, overriding identical keys","additionalProperties":{"$ref":"#/components/schemas/DataVariableDefinition"}},"custom":{"type":"object","additionalProperties":true,"description":"Custom configuration specific to the data source being defined"},"created":{"type":"string","description":"Created date of the data type in ISO 8601 format (ignored for writes)"},"modified":{"type":"string","description":"Last modified date of the data type in ISO 8601 format (ignored for writes)"},"createdBy":{"type":"string","description":"User or API key ID that created the data type (ignored for writes)"},"modifiedBy":{"type":"string","description":"User or API key ID that last modified the data type (ignored for writes)"}},"additionalProperties":false},"DataVariableDefinition":{"type":"object","description":"Defines the shape of a data variable on a Data Source or Data Type","required":["default"],"properties":{"displayName":{"type":"string","description":"Display name of the data variable","maxLength":100,"minLength":1},"helpText":{"type":"string","description":"Explanatory text that is provided to the data resource editor to explain what this variable does","maxLength":256,"minLength":1},"type":{"type":"string","description":"Type of the data variable. Optionally used as a point of reference for custom integrations to decide how to render an editor for a variable","default":"text","maxLength":36,"minLength":1,"pattern":"^[A-Za-z0-9\\-]+$"},"default":{"type":"string","description":"Default value of the data variable"},"order":{"type":"number","description":"Sets the order of the variable when displayed in a list with other variables. If not set, the order defaults to alphabetical with any explicitly set orders first in the list"},"source":{"type":"string","description":"An optional arbitrary human readable source identifier to describe where this variable is from.\nSome user interfaces may group variables by source value, for example 'From URL' or 'My Integration'\n"}},"additionalProperties":false},"DataResourceDefinitions":{"type":"object","description":"Data definitions attached to this component. The property name is the key of the data in the data document.\nNote: data definitions are inherited from ancestors at runtime (and may be overridden by descendants that use the same key)\n","additionalProperties":{"$ref":"#/components/schemas/DataResourceDefinition"}},"DataResourceDefinition":{"type":"object","description":"Defines a data resource, which is a named JSON document, usually from an API response, which may be projected onto parameters","required":["type"],"properties":{"type":{"type":"string","description":"Public ID of the data type that provides this data","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9\\-]+$"},"isPatternParameter":{"type":"boolean","description":"Whether this data is a pattern data resource that can be overridden when a pattern is referenced on another composition. If this is not a pattern composition, this has no meaning and should not be used. If unspecified, the default is false"},"ignorePatternParameterDefault":{"type":"boolean","description":"When true, the default data resource of a pattern data parameter (isPatternParameter=true) will be ignored when the pattern is referenced.\nUnless specifically overridden, the pattern data parameter will be provided with a null default value - leaving any data connections to it unresolvable.\nIf isPatternParameter is false or undefined, this has no meaning\n"},"optionalPatternParameter":{"type":"boolean","description":"When true, the data resource does not create an error forcing the choosing of override value when there is no default.\nIf isPatternParameter is false or undefined, or if ignorePatternParameterDefault is false, this has no meaning\n"},"variables":{"$ref":"#/components/schemas/DataResourceVariables"}},"additionalProperties":false},"DataResourceVariables":{"type":"object","description":"Variable values for a data resource","additionalProperties":{"type":"string"}},"PatternError":{"type":"string","description":"Describes why the pattern could not be resolved, if a pattern could not be resolved. For PUTs, this is allowed but ignored.\nCYCLIC: A cyclic pattern graph was detected, which could not be resolved because it would cause an infinite loop.\nNOTFOUND: The pattern ID referenced could not be found. It may have been deleted, en published yet.\nMeans nothing for PUTs; it will be ignored\n","enum":["NOTFOUND","CYCLIC"]},"HistoryApiResponse":{"type":"object","properties":{"cursor":{"description":"If there are more results, this will be populated with a token to pass in the next request to get the next page of results.\nIf this is undefined then no more results are available\n","type":"string","maxLength":1024},"truncated":{"description":"If more history is available than your plan allows, and additional entries are available by upgrading, this will be true","type":"boolean"},"results":{"description":"Version history entries","type":"array","items":{"$ref":"#/components/schemas/HistoryEntry"}}}},"HistoryEntry":{"type":"object","additionalProperties":false,"required":["versionId","timestamp","authorName","authorIsApiKey","state"],"properties":{"versionId":{"description":"The version ID of the entity. This can be used to fetch the version's data via the entity API","type":"string"},"timestamp":{"description":"The timestamp when the version was created in epoch milliseconds","type":"number"},"authorName":{"description":"The name (full name) of the user who created the version, or \"Unknown user\" if the author can no longer be resolved","type":"string"},"authorIsApiKey":{"type":"boolean"},"authorSubject":{"description":"The identity who created the version; absent on old history entries.\n","type":"string"},"state":{"description":"The state of the entity when the history entry was made","type":"number"}}},"Category":{"type":"object","description":"Category for tagging canvas entities","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for the category"},"name":{"type":"string","description":"Display name of the category","maxLength":100,"minLength":1},"order":{"default":0,"type":"number","description":"Sets the order of the category when displayed in a list with other categories. If not set, the order defaults to alphabetical with any explicitly set orders first in the list"}}},"CompositionProjectMapNodeInfo":{"type":"object","description":"Project map node information related to a component","required":["id","path","projectMapId"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for the project map node"},"path":{"type":"string","description":"Fallback path of the project map node.\nNote that the node may have matched via a locale-specific path which is in the `locales` object\n","minLength":1,"maxLength":2048},"projectMapId":{"type":"string","format":"uuid","description":"Unique identifier for the project map that this node belongs to"},"data":{"$ref":"#/components/schemas/ProjectMapNodeData"},"locales":{"type":"object","description":"Locale-specific paths of the project map node.\nKeys are locale codes\n","additionalProperties":{"type":"object","required":["path","inherited"],"properties":{"path":{"type":"string","description":"Locale-specific path of the project map node","minLength":1,"maxLength":2048},"inherited":{"type":"boolean","description":"Whether the path is inherited from a parent node which defined a path segment in this locale\n"}}}}},"additionalProperties":false},"Prompt":{"type":"object","description":"AI Prompt definition","required":["id","integrationType"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for the prompt"},"integrationType":{"type":"string","nullable":false,"description":"Unique identifier for the integration that this prompt belongs to"},"name":{"type":"string","nullable":true,"description":"Name for the prompt"},"text":{"type":"string","nullable":true,"description":"Text for the prompt"},"data":{"type":"object","additionalProperties":true,"nullable":true,"description":"Data for the prompt"},"enabled":{"type":"boolean","nullable":true,"description":"Turn off/on prompt"},"builtIn":{"type":"boolean","nullable":true,"description":"Integration default prompt"},"parameterTypes":{"type":"array","items":{"type":"string"},"nullable":true,"description":"Supported parameter types"}}},"WorkflowDefinition":{"type":"object","additionalProperties":false,"description":"Definition of a workflow that can be assigned to entities","required":["id","name","initialStage","stages"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the workflow definition"},"name":{"type":"string","description":"Workflow name","maxLength":32,"minLength":1,"pattern":"^[^<>]*$"},"initialStage":{"type":"string","format":"uuid","description":"The ID of the initial stage in the stages object."},"stages":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/WorkflowStage"},"description":"All stages of the workflow","minProperties":2},"modified":{"type":"string","description":"Last modified ISO date string for this definition (ignored for writes)","maxLength":50},"created":{"type":"string","description":"Created ISO date string for this definition (ignored for writes)","maxLength":50},"createdBy":{"type":"string","description":"Name of the original creator of the workflow.\nIf undefined, the user has been removed from the team.\nIgnored for writes\n","maxLength":256},"modifiedBy":{"type":"string","description":"Name of the last modifier of the workflow.\nIf undefined, the user has been removed from the team.\nIgnored for writes\n","maxLength":256}}},"WorkflowStage":{"type":"object","description":"Definition of a stage in a workflow","additionalProperties":false,"required":["name","permissions","transitions"],"properties":{"name":{"type":"string","description":"Name of the stage","minLength":1,"maxLength":32,"pattern":"^[^<>]*$"},"permissions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/WorkflowStagePermission"},"description":"Defines roles which have permissions to this workflow stage\nNOTE: Being able to write or publish to entities in a workflow stage requires both core write or publish permissions,\nas well as membership in a role which grants the explicit rights to the stage. If a user is not a member of any role\nlisted here, the stage is read-only and publishing is disabled\n"},"autoPublish":{"type":"boolean","description":"When true, transitioning into this stage from a different stage will automatically publish the entity.\nIf the user making the transition does not have publish permissions to the stage as well as publish permission on the entity, the action will not run.\nSetting this to true is equivalent to setting requireValidity to true, as publishing cannot be performed with validation errors.\nNOTE: This is not executed by direct API calls. Only the Uniform UI performs this action\n"},"requireValidity":{"type":"boolean","description":"When true, transitioning into this stage from a different stage will require the entity to have no validation errors.\nIf the entity is not valid, the transition will not be allowed.\nNOTE: This is not executed by direct API calls. Only the Uniform UI performs this action\n"},"transitions":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStageTransition"},"description":"Defines transitions to other stages\nEvery stage must define at least one transition, to avoid creating a workflow that\nhas a stage that can never be escaped\n","minItems":1},"icon":{"type":"string","description":"Icon name for the stage (e.g. 'chevron-double-right-o')","default":"chevron-double-right-o","maxLength":64},"order":{"type":"number","description":"Sets the order of the stage when displayed in a list with other stages. If not set, the order defaults to alphabetical with any explicitly set orders first in the list"}}},"WorkflowStageTransition":{"type":"object","description":"Definition of a transition from one stage to another in a workflow","additionalProperties":false,"required":["name","to","permissions"],"properties":{"to":{"type":"string","format":"uuid","description":"The target stage to transition to"},"name":{"type":"string","description":"Name shown to the user when they execute this transition.\nIf not provided, a default name will be assigned automatically based on the target stage\n","maxLength":32,"minLength":1,"pattern":"^[^<>]*$"},"permissions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/WorkflowStageTransitionPermission"},"description":"Permissions for the stage transition.\nNOTE: Users without membership in any role listed here will be unable to execute the transition unless they are team admins\n"}}},"WorkflowStagePermission":{"type":"object","description":"Permissions for a workflow stage","additionalProperties":false,"properties":{"write":{"type":"boolean","description":"Allows writing to entities assigned to this stage. When false or unspecified the data is read-only"},"publish":{"type":"boolean","description":"Allows publishing entities assigned to this stage. When false or unspecified publishing is disabled"}}},"WorkflowStageTransitionPermission":{"type":"object","description":"Permissions for a workflow stage transition","additionalProperties":false,"properties":{"execute":{"type":"boolean","description":"Allows executing the transition for a role. Note that write permissions to the destination stage are NOT required to execute a transition to it"}}},"ReleaseState":{"type":"string","enum":["open","locked","queued","launching","launched","deleting"]},"ReleaseScheduleState":{"type":"string","enum":["scheduled","unscheduled"]},"EnrichmentCategory":{"type":"object","required":["cap"],"properties":{"cap":{"description":"The maximum visitor score allowed for enrichment keys in this category","type":"integer","minimum":1,"maximum":2147483647}}},"PreviewSignal":{"allOf":[{"$ref":"#/components/schemas/Signal"},{"type":"object","required":["name"],"properties":{"name":{"description":"Friendly name of the signal","type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]*$"},"description":{"description":"Description of the signal","type":"string","maxLength":512,"pattern":"^[^<>]*$"}}}]},"Signal":{"type":"object","required":["crit","str","cap","dur"],"properties":{"str":{"description":"The signal strength per activation (each time its criteria are true, this score is added)","type":"integer","minimum":1,"maximum":2147483647},"cap":{"description":"The maximum visitor score allowed for this signal","type":"integer","minimum":1,"maximum":2147483647},"dur":{"description":"How long the signal's score should persist\n's' = current session (expires after a period of inactivity)\n'p' = permanent (expires as far in the future as possible, may be limited by browser security settings)\n't' = transient (score tracks the current state of the criteria every time scores are updated)\n","type":"string","enum":["s","p","t"]},"crit":{"$ref":"#/components/schemas/RootSignalCriteriaGroup"},"conversion":{"oneOf":[{"$ref":"#/components/schemas/Conversion"},{"enum":[null]}]}}},"RootSignalCriteriaGroup":{"type":"object","required":["clauses","type"],"properties":{"type":{"description":"Criteria type (Group of other criteria)","type":"string","enum":["G"]},"op":{"type":"string","description":"The logical operator to apply to the criteria groups\n& = AND\n| = OR\n\nDefault is `&` if unspecified\n","default":"&","enum":["&","|"]},"clauses":{"description":"The criteria clauses that make up this grouping of criteria","type":"array","minItems":1,"items":{"oneOf":[{"$ref":"#/components/schemas/SignalCriteriaGroup"},{"$ref":"#/components/schemas/SignalCriteria"}]}}},"additionalProperties":false},"Conversion":{"type":"object","required":["freq"],"properties":{"freq":{"description":"The frequency of the conversion event","type":"string","enum":["O"]}}},"SignalCriteriaGroup":{"type":"object","required":["clauses","type"],"properties":{"type":{"description":"Criteria type (Group of other criteria)","type":"string","enum":["G"]},"op":{"type":"string","description":"The logical operator to apply to the criteria groups\n& = AND\n| = OR\n\nDefault is `&` if unspecified\n","enum":["&","|"]},"clauses":{"description":"The criteria clauses that make up this grouping of criteria","type":"array","minItems":1,"items":{"oneOf":[{"$ref":"#/components/schemas/SignalCriteriaGroup"},{"$ref":"#/components/schemas/SignalCriteria"}]}}},"additionalProperties":false},"SignalCriteria":{"oneOf":[{"$ref":"#/components/schemas/CookieCriteria"},{"$ref":"#/components/schemas/QueryStringCriteria"},{"$ref":"#/components/schemas/QuirkCriteria"},{"$ref":"#/components/schemas/EventCriteria"},{"$ref":"#/components/schemas/CurrentPageCriteria"},{"$ref":"#/components/schemas/PageViewCountCriteria"}]},"QueryStringCriteria":{"description":"Matches a URL query string parameter value","type":"object","required":["type","queryName","match"],"properties":{"type":{"type":"string","enum":["QS"]},"queryName":{"description":"The name of the query string parameter to match","type":"string","minLength":1},"match":{"description":"The value to match the query string parameter against","$ref":"#/components/schemas/StringMatch"}}},"CookieCriteria":{"description":"Matches a web cookie value","type":"object","required":["type","cookieName","match"],"properties":{"type":{"type":"string","enum":["CK"]},"cookieName":{"description":"The name of the cookie to match","type":"string","minLength":1},"match":{"description":"The value to match the cookie against","$ref":"#/components/schemas/StringMatch"}}},"QuirkCriteria":{"description":"Matches a visitor quirk key and value","type":"object","required":["type","key","match"],"properties":{"type":{"type":"string","enum":["QK"]},"key":{"description":"The name of the quirk key to match","type":"string","minLength":1},"match":{"description":"The quirk value to match against","$ref":"#/components/schemas/StringMatch"}}},"EventCriteria":{"description":"Matches an analytics event name being fired","type":"object","required":["type","event"],"properties":{"type":{"type":"string","enum":["EVT"]},"event":{"description":"How to match the event name","$ref":"#/components/schemas/StringMatch"}}},"CurrentPageCriteria":{"description":"Matches the current page's absolute path (i.e. /path/to/page.html)\nDoes not include the query string or protocol and hostname (i.e. NOT https://foo.com/path/to/page.html?query=something)\n","type":"object","required":["type","path"],"properties":{"type":{"type":"string","enum":["PV"]},"path":{"description":"The page/route path to match as a page that has been visited","$ref":"#/components/schemas/StringMatch"}}},"PageViewCountCriteria":{"type":"object","required":["type","match"],"properties":{"type":{"type":"string","enum":["PVC"]},"match":{"description":"The expression to match the page view count against","$ref":"#/components/schemas/NumberMatch"}}},"StringMatch":{"description":"Describes a match expression on a string","type":"object","oneOf":[{"type":"object","required":["op","rhs"],"properties":{"rhs":{"description":"The right-hand side of the match expression","type":"string","minLength":1},"op":{"description":"The match operator\n'=' = exact match\n'~' = contains match\n'//' = regular expression match\n\nAny of the above can be prefixed with '!' to invert the match (i.e. != for 'not an exact match')\n","type":"string","enum":["=","~","//","!=","!~","!//"]},"cs":{"description":"The case sensitivity of the match. Defaults to false if unspecified","type":"boolean"}}},{"type":"object","required":["op"],"properties":{"op":{"description":"The type of match to perform\n'*' = exists with any value\n'!*' = does not exist\n","type":"string","enum":["*","!*"]}}}],"discriminator":{"propertyName":"op"}},"NumberMatch":{"description":"Describes a match expression on a number","type":"object","required":["op","rhs"],"properties":{"rhs":{"description":"The right-hand side of the match expression","type":"number"},"op":{"description":"The type of match to perform\n'=' = exact match\n'!=' = not an exact match\n'<' = less than match expression\n'>' = greater than match expression\n","type":"string","enum":["=","<",">","!="]}}},"AggregateDimension":{"description":"Defines an aggregate dimension that is a grouping of other dimensions' scores; an intent or audience","type":"object","required":["inputs"],"properties":{"inputs":{"description":"Input dimensions to the aggregate dimension","type":"array","items":{"$ref":"#/components/schemas/AggregateDimensionInput"}}},"additionalProperties":false},"AggregateDimensionInput":{"description":"Defines an input dimension to an aggregate dimension","type":"object","required":["dim"],"properties":{"dim":{"description":"Dimension name to reference as an input.\nFor enrichment inputs, use CATEGORY_KEY as the dimension.\nEnrichments, signals, and other aggregate dimensions may be referenced.\n\nNote that creating a cycle of aggregate dimensions is allowed, however\nthe final score will _ignore_ the cycled aggregate dimension in the result.\nThis can be used to create mutually exclusive aggregates\n","type":"string","minLength":1},"sign":{"description":"The sign of the input dimension controls how it affects the aggregate dimension's final score.\n\n'+' = add to the final score\n'-' = subtract from the final score\n'c' = clear the final score (if the input dimension has any score at all, this aggregate will have no score regardless of other inputs)\n\nDefault if unspecified: '+'\n","type":"string","enum":["+","-","c"],"default":"+"}},"additionalProperties":false},"Test":{"type":"object","properties":{"wv":{"description":"Winning variation ID - if set, the test will not run and this variation is shown to all visitors (the test is closed)","type":"string"}},"additionalProperties":false},"Entry":{"type":"object","description":"Defines the shape of the entry","required":["type","_id"],"properties":{"type":{"type":"string","description":"Content type public ID of the entry","maxLength":100,"minLength":1},"_id":{"type":"string","description":"The ID of the entry","format":"uuid"},"_name":{"type":"string","description":"The name of the entry","minLength":1,"maxLength":255},"_thumbnail":{"type":"string","description":"The thumbnail URL of the entry","minLength":1},"_slug":{"type":"string","description":"The slug of the entry","minLength":1,"maxLength":255},"_author":{"type":"string","description":"Name of the author of the most recent change","minLength":1,"maxLength":255},"_authorSubject":{"type":"string","description":"Identity subject of the author of the most recent change","minLength":1,"maxLength":255},"_creator":{"type":"string","description":"Name of the original creator","minLength":1,"maxLength":255},"_creatorSubject":{"type":"string","description":"Identity subject of the original creator","minLength":1,"maxLength":255},"_pattern":{"type":"string","pattern":"^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$","description":"Indicates this content entry should be sourced from a pattern library pattern"},"_locales":{"description":"Array of locales that have data defined on the entry. If empty, the current default locale implicitly has data","type":"array","items":{"type":"string","maxLength":32}},"fields":{"type":"object","description":"Entry field values","additionalProperties":{"$ref":"#/components/schemas/ComponentParameter"}},"_dataResources":{"$ref":"#/components/schemas/DataResourceDefinitions"},"_patternDataResources":{"type":"object","description":"Data definitions coming from a pattern resolved for this component. Merged with _dataResources during resolution.\nMeans nothing for PUTs; it will be ignored\n","additionalProperties":{"$ref":"#/components/schemas/DataResourceDefinition"}},"_patternError":{"type":"string","description":"Describes why the pattern could not be resolved, if a pattern could not be resolved. For PUTs, this is allowed but ignored.\nCYCLIC: A cyclic pattern graph was detected, which could not be resolved because it would cause an infinite loop.\nNOTFOUND: The pattern ID referenced could not be found. It may have been deleted, or not been published yet.\nMeans nothing for PUTs; it will be ignored\n","enum":["NOTFOUND","CYCLIC"]},"_overrides":{"type":"object","description":"Defines patch overrides to component IDs that live in the composition.\nThis can be used to override parameters that are defined on patterns,\nincluding nested patterns, with values that are specific to this composition.\nThe keys in this object are component IDs.\nOverrides are applied from the top down, so for example if both the composition\nand a pattern on the composition define an override on a nested pattern,\nthe composition's override replaces the pattern's.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","additionalProperties":{"$ref":"#/components/schemas/ComponentOverride"}},"_overridability":{"description":"When used on a pattern, defines how the pattern's parameters may be overridden\nby consumers of the pattern.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","$ref":"#/components/schemas/ComponentOverridability"}},"additionalProperties":false},"EntryInput":{"type":"object","description":"Defines the shape of the entry input","required":["type"],"properties":{"type":{"type":"string","description":"Content type of the entry","maxLength":100,"minLength":1},"_id":{"type":"string","description":"The public UUID of the entry","format":"uuid"},"_name":{"type":"string","description":"The name of the entry","minLength":0,"maxLength":255},"_slug":{"type":"string","description":"The slug of the entry","minLength":0,"maxLength":255},"_thumbnail":{"type":"string","description":"The thumbnail URL of the entry","maxLength":2024},"_author":{"type":"string","description":"Name of the author of the most recent change","minLength":1,"maxLength":255},"_authorSubject":{"type":"string","description":"Identity subject of the author of the most recent change","minLength":1,"maxLength":255},"_creator":{"type":"string","description":"Name of the original creator","minLength":1,"maxLength":255},"_creatorSubject":{"type":"string","description":"Identity subject of the original creator","minLength":1,"maxLength":255},"fields":{"type":"object","description":"Entry field values","additionalProperties":{"$ref":"#/components/schemas/ComponentParameter"}},"_dataResources":{"$ref":"#/components/schemas/DataResourceDefinitions"},"_pattern":{"type":"string","pattern":"^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$","description":"Indicates this content entry should be sourced from a pattern library pattern"},"_patternDataResources":{"type":"object","description":"Data definitions coming from a pattern resolved for this component. Merged with _dataResources during resolution.\nMeans nothing for PUTs; it will be ignored\n","additionalProperties":{"$ref":"#/components/schemas/DataResourceDefinition"}},"_patternError":{"type":"string","description":"Describes why the pattern could not be resolved, if a pattern could not be resolved. For PUTs, this is allowed but ignored.\nCYCLIC: A cyclic pattern graph was detected, which could not be resolved because it would cause an infinite loop.\nNOTFOUND: The pattern ID referenced could not be found. It may have been deleted, or not been published yet.\nMeans nothing for PUTs; it will be ignored\n","enum":["NOTFOUND","CYCLIC"]},"_overrides":{"type":"object","description":"Defines patch overrides for the content entry fields.\nThis can be used to override fields that are defined on patterns.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","additionalProperties":{"$ref":"#/components/schemas/ComponentOverride"}},"_overridability":{"description":"When used on a pattern, defines how the pattern's fields may be overridden\nby consumers of the pattern.\n\nNOTE: This is considered an internal data structure and is not guaranteed to be stable.\nFuture updates that do not break the overrides-applied state of a composition may be made without notice\n","$ref":"#/components/schemas/ComponentOverridability"},"_locales":{"description":"Array of locales which have data defined on the entry. If empty, the current default locale implicitly has data","type":"array","items":{"type":"string","maxLength":32}}},"additionalProperties":false},"EntryApiResponse":{"type":"object","required":["state","projectId","entry","created","modified"],"properties":{"state":{"type":"integer","description":"Publishing state to fetch. 0 = draft, 64 = published","minimum":0,"maximum":64},"releaseId":{"type":"string","format":"uuid","description":"The release this entry belongs to. If not set, the entry belongs to the base"},"uiStatus":{"type":"string","deprecated":true,"description":"UI status value. Subject to change without notice; do not rely on this value. Only present when `withUIStatus` option is true","enum":["Draft","Modified","Published","Orphan","Previous"]},"projectId":{"type":"string","description":"The project ID that this layout data is part of","format":"uuid"},"created":{"type":"string","description":"Created date string for this definition","format":"date-time,"},"modified":{"type":"string","description":"Modified date string for this definition","format":"date-time,"},"deletedAt":{"type":"string","description":"Timestamp when the item was moved to trash. Omitted if not in trash.","format":"date-time"},"pattern":{"description":"True if the entry is a pattern (which can be referenced on other entries)","type":"boolean","default":false},"entry":{"$ref":"#/components/schemas/Entry"},"workflowId":{"type":"string","format":"uuid","description":"The workflow ID that this entry is assigned. Normally comes from the content type"},"workflowStageId":{"type":"string","format":"uuid","description":"The stage ID the entry is in on its assigned workflow. When undefined, it is implicitly in the initial stage of the workflow"},"workflowDefinition":{"description":"The full definition of the assigned workflow, if any, including stages, permissions, etc. Only returned when `withWorkflowDefinition` is true","$ref":"#/components/schemas/WorkflowDefinition"},"stubType":{"type":"string","enum":["missing","tooDeep"],"description":"Only present if an incomplete entry is returned; indicates reason for stubbing"},"editionId":{"type":"string","format":"uuid","description":"The edition ID. When set, this is a child edition of the entry in _id.\n"},"editionName":{"type":"string","maxLength":100,"description":"The name of the entry or edition as shown in the editions listing.\nDescribes the purpose of an edition.\n"},"editionPriority":{"type":"integer","description":"The priority of the edition or entry. Higher numbers are higher priority.\nWhen multiple editions enable the same locale, the highest priority edition is used.\n"}}},"EntryListResponse":{"type":"object","required":["entries"],"properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/EntryApiResponse"}},"totalCount":{"type":"integer","description":"Total number of entries that match the query. Only present when `withTotalCount` option is true"},"facets":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"description":"Per-field counts for distinct values"}}},"ProjectMapNodeDefinition":{"type":"object","required":["id","name","path","type"],"properties":{"id":{"description":"The id of the projectMap entry","type":"string","format":"uuid"},"path":{"description":"Path representing the path to the current node","type":"string"},"order":{"description":"Ordering of the node, higher numbers go after lower numbers","type":"integer"},"data":{"$ref":"#/components/schemas/ProjectMapNodeData"},"name":{"description":"The name of the projectMap entry","type":"string","minLength":1},"type":{"description":"The type of the projectMap entry","type":"string","enum":["composition","placeholder"]},"compositionId":{"description":"The composition id related to the projectMap entry","type":"string","format":"uuid"},"description":{"description":"Description of the projectMap node","type":"string","maxLength":300},"parentPath":{"description":"Parent path of the current node, only included if requested with the expanded flag","type":"string"},"pathSegment":{"description":"Last segment of the url","type":"string"},"isLeaf":{"description":"returns true if the node is a leaf node, meaning having no children, only included if requested with the expanded flag","type":"boolean"},"compositionData":{"$ref":"#/components/schemas/ProjectMapNodeCompositionData"},"sourceRedirects":{"$ref":"#/components/schemas/ProjectMapSourceRedirectData"},"targetRedirects":{"$ref":"#/components/schemas/ProjectMapTargetRedirectData"},"locales":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ProjectMapNodeLocale"}}},"additionalProperties":false},"ProjectMapNodeLocale":{"type":"object","required":["pathSegment"],"properties":{"name":{"description":"Name of node in the locale","type":"string"},"path":{"description":"Full path to the current node in this locale, only included if requested with the expanded flag","type":"string"},"pathSegment":{"description":"Last segment of the url in this locale","type":"string"},"inherited":{"description":"When false, the node explicitly defines a locale-specific path segment.\n\nWhen true, an ancestor defines a locale-specific path segment,\nwhich makes its descendants resolvable using that segment.\nThis node does not define a locale-specific path segment.\n\nOnly included if requested with the expanded flag. Without the expanded flag, inherited locales are not included in the response\n","type":"boolean"}},"additionalProperties":false},"ProjectMapSourceRedirectData":{"type":"array","items":{"type":"object","properties":{"id":{"description":"The public UUID of the source redirect","type":"string","format":"uuid"}}}},"ProjectMapTargetRedirectData":{"type":"array","items":{"type":"object","properties":{"id":{"description":"The public UUID of the target redirect","type":"string","format":"uuid"}}}},"ProjectMapNodeCompositionData":{"type":"object","required":["id","type","name","locales"],"description":"Basic information about the linked composition from the context of a project map node.\nIf the linked composition has editions, the editions are included in the `editions` property.\n","properties":{"type":{"type":"string","description":"Type of the linked composition (id of its definition)","maxLength":100,"minLength":1},"id":{"type":"string","description":"The UUID of the linked composition","format":"uuid"},"editionId":{"type":"string","description":"The edition UUID underneath the linked composition\nThis is only present if the composition has not been published, but an edition has\n","format":"uuid"},"slug":{"type":"string","description":"Slug pattern of the linked composition or edition","nullable":true,"maxLength":512},"name":{"type":"string","description":"Friendly name of this composition or edition","maxLength":100,"minLength":1},"uiStatus":{"type":"string","deprecated":true,"description":"UI status value. Subject to change without notice; do not rely on this value. Only present when `withCompositionUIStatus` option is true","enum":["Draft","Modified","Published","Orphan"]},"icon":{"type":"string","description":"Icon name or URL for the composition definition (e.g. 'screen' or 'https://s3/my-component.jpg')","default":"screen","maxLength":2024},"typeName":{"type":"string","description":"Friendly name of this Composition's Definition","maxLength":100,"minLength":1},"locales":{"type":"array","description":"List of locales that the composition _or any of its editions_ is available in.\nIf empty, available in all locales.\n","items":{"type":"string"}},"editionPriority":{"type":"integer","description":"Priority of the composition relative to any editions"},"editionName":{"type":"string","description":"Friendly name of the edition"},"editions":{"type":"array","description":"List of editions available for this composition. The composition is included in the list, it is the edition\nwhere the editionID equals the node's compositionID. NOTE: this is not sent if only one edition is available\n","items":{"$ref":"#/components/schemas/ProjectMapNodeCompositionEditionData"}},"modified":{"type":"string","format":"date-time","description":"Date and time the composition was last modified (or created if never modified).\nUses ISO-8859-1 formatting and UTC timezone.\nIMPORTANT: if the composition has more than one edition, this is the modified date of the default edition. Each edition has its own modified date in the `editions` array.\n"}}},"ProjectMapNodeCompositionEditionData":{"type":"object","required":["id","type","name","locales"],"description":"Basic information about a composition edition from the context of a project map node","properties":{"id":{"type":"string","description":"The UUID of the linked composition","format":"uuid"},"type":{"type":"string","description":"Type of the edition instance (public_id of its definition)","maxLength":100,"minLength":1},"editionId":{"type":"string","description":"The edition UUID underneath the linked composition","format":"uuid"},"slug":{"type":"string","description":"Slug pattern of this edition","nullable":true},"name":{"type":"string","description":"Friendly name of the linked composition"},"editionName":{"type":"string","description":"Friendly name of the edition"},"editionPriority":{"type":"integer","description":"Priority of the edition"},"uiStatus":{"type":"string","deprecated":true,"description":"UI status value. Subject to change without notice; do not rely on this value. Only present when `withCompositionUIStatus` option is true","enum":["Draft","Modified","Published","Orphan"]},"icon":{"type":"string","description":"Icon name or URL for the composition edition (e.g. 'screen' or 'https://s3/my-component.jpg')","default":"screen","maxLength":2024},"typeName":{"type":"string","description":"Friendly name of this edition's definition","maxLength":100,"minLength":1},"locales":{"type":"array","description":"List of locales that the edition is available in. If empty, available in all locales","items":{"type":"string"}},"modified":{"type":"string","format":"date-time","description":"Date and time the edition was last modified (or created if never modified). Uses ISO-8859-1 formatting and UTC timezone."}}},"ProjectMapNodeUpdate":{"type":"object","required":["name","path","type"],"properties":{"id":{"description":"The id of the projectMap entry","type":"string","format":"uuid"},"path":{"description":"Path representing the path to the current node","pattern":"^\\/$|^(\\/[^\\/]+)+$","type":"string"},"order":{"description":"Ordering of the node, higher numbers go after lower numbers","type":"integer"},"data":{"$ref":"#/components/schemas/ProjectMapNodeData"},"name":{"description":"The name of the projectMap entry","type":"string","minLength":1},"type":{"description":"The type of the projectMap entry","type":"string","enum":["composition","placeholder"]},"compositionId":{"description":"The composition id related to the projectMap entry","type":"string","format":"uuid"},"description":{"description":"Description of the projectMap node","type":"string","maxLength":300},"locales":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ProjectMapNodeLocaleUpdate"}}},"additionalProperties":false},"ProjectMapNodeLocaleUpdate":{"required":["pathSegment"],"properties":{"name":{"description":"Name of node in the locale","type":"string"},"pathSegment":{"description":"Locale specific path segment for this node (not a full path)","type":"string","minLength":1}},"additionalProperties":false},"ProjectMapNodeData":{"type":"object","properties":{"isSearchHit":{"description":"While performing a search if a node is a hit, this property will return true.  If it's supporting structure, like a parent of a search hit, it will return false","type":"boolean"},"queryStrings":{"description":"Query strings that are allowed to be passed to the node","type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/ProjectMapNodeAllowedQueryString"}},"previewValue":{"description":"For dynamic nodes, this is the preview value for the dynamic value.\nThe preview value is used when editing a connected composition, and is the default\ndynamic node value unless the author has explicitly chosen a different value\n","type":"string","maxLength":512}},"additionalProperties":false},"ProjectMapNodeAllowedQueryString":{"type":"object","required":["name"],"properties":{"name":{"description":"The name of the query string parameter","type":"string","minLength":1,"maxLength":50},"value":{"description":"The default value of the query string if it is not provided by an incoming route path","type":"string","minLength":0,"maxLength":2048},"helpText":{"description":"Help text for authors who might be setting up a preview value for this query string","type":"string","minLength":0,"maxLength":256},"editorVisibility":{"description":"Controls whether a global query string is always shown in Canvas or must be opted into.\nThis property is ignored on node-level query strings. When omitted, the query string is always shown.\n","type":"string","enum":["opt-in"]},"optionsSource":{"description":"Configuration for providing a list of allowed values for this query string","type":"object","properties":{"source":{"type":"string","enum":["static"],"description":"The source type for the options"},"options":{"type":"array","items":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string","description":"Display name for the option","pattern":"^[^<>]+$","minLength":1,"maxLength":50},"value":{"type":"string","description":"The actual value to be used","pattern":"^[^<>]+$","minLength":0,"maxLength":500}}},"minItems":1,"maxItems":100}},"required":["source","options"]}},"additionalProperties":false},"RouteResponse":{"oneOf":[{"$ref":"#/components/schemas/RouteResponseRedirect"},{"$ref":"#/components/schemas/RouteResponseComposition"},{"$ref":"#/components/schemas/RouteResponseNotFound"}]},"RouteResponseRedirect":{"description":"The route matches a redirection configured in Uniform\n","type":"object","required":["type","matchedRoute","redirect"],"properties":{"matchedRoute":{"type":"string","description":"The route that was matched in the redirects"},"dynamicInputs":{"$ref":"#/components/schemas/RouteDynamicInputs"},"type":{"type":"string","enum":["redirect"]},"redirect":{"$ref":"#/components/schemas/Redirect"}}},"RouteResponseComposition":{"description":"The route matches a composition.\nIf any dynamic segments or query parameters are present in the route, they will be returned as dynamic inputs in the response\n","type":"object","required":["type","matchedRoute","compositionApiResponse"],"properties":{"matchedRoute":{"type":"string","description":"The route that was matched in the project map"},"dynamicInputs":{"$ref":"#/components/schemas/RouteDynamicInputs"},"dataResourcesVariant":{"type":"string","enum":["unpublished"],"description":"Indicates the data variant that was fetched for data resources.\nundefined: Data resources were resolved using published data from their data source\nunpublished: Data resources which support unpublished data retrieved unpublished data from their data source. Data resources that did not support unpublished data retrieved published data instead.\n"},"type":{"type":"string","enum":["composition"]},"compositionApiResponse":{"$ref":"#/components/schemas/CompositionApiResponse"}}},"RouteResponseNotFound":{"description":"The route does not match any configured redirections or compositions.\nNOTE: This response differs from a HTTP 404, which indicates that the project map or project ID was not found.\nReceiving this response with HTTP 200 means that the project was found, but the route did not match anything\n","type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["notFound"]}}},"RouteDynamicInputs":{"type":"object","additionalProperties":{"type":"string"}},"TaxonomyValue":{"type":"object","description":"One of taxonomy possible values","required":["id","name","value"],"properties":{"id":{"type":"string","format":"uuid","description":"The ID (UUID) of the taxonomy value"},"name":{"type":"string","description":"Friendly name of the value","maxLength":100,"minLength":1},"value":{"type":"string","description":"Actual value of the value","maxLength":100,"minLength":1}},"additionalProperties":false},"Taxonomy":{"type":"object","description":"A core building block of the link configuration","required":["id","name","display_name","required","value_length","values","values_sort"],"properties":{"id":{"type":"string","format":"uuid","description":"The ID (UUID) of the taxonomy"},"name":{"type":"string","description":"Name of the taxonomy","maxLength":100,"minLength":1},"display_name":{"type":"string","description":"A short, UI-friendly name of the taxonomy","maxLength":100,"minLength":1},"default_value":{"type":"string","description":"The default value of the taxonomy, empty if required is true","maxLength":100,"minLength":1},"required":{"type":"boolean","description":"Whether the taxonomy is required or not"},"value_length":{"type":"integer","description":"The required length of the taxonomy values value","minimum":1,"maximum":100},"values":{"type":"array","description":"Possible values of the taxonomy","items":{"$ref":"#/components/schemas/TaxonomyValue"}},"values_sort":{"type":"array","description":"The order of the values in the taxonomy","items":{"type":"string","format":"uuid","description":"The ID (UUID) of the taxonomy value"}}},"additionalProperties":false},"NamingConvention":{"type":"object","description":"Composition of multiple taxonomies","required":["id","delimiter","name","query_parameter","taxonomies","taxonomies_sort"],"properties":{"id":{"type":"string","format":"uuid","description":"The ID (UUID) of the naming convention"},"delimiter":{"type":"string","description":"The delimiter to use between taxonomies","maxLength":1,"minLength":1},"name":{"type":"string","description":"The name of the naming convention","maxLength":100,"minLength":1},"query_parameter":{"type":"string","description":"The query parameter to use for the naming convention","maxLength":100,"minLength":1},"taxonomies":{"type":"array","description":"The taxonomies to use in the naming convention","items":{"$ref":"#/components/schemas/Taxonomy"}},"taxonomies_sort":{"type":"array","description":"The order of the taxonomies in the naming convention","items":{"type":"string","format":"uuid","description":"The ID (UUID) of the taxonomy"}}},"additionalProperties":false},"LinkConfigurationPart":{"type":"object","description":"A part of a link configuration","required":["id"],"properties":{"id":{"type":"string","format":"uuid","description":"The ID (UUID) of the link configuration part"},"naming_convention":{"$ref":"#/components/schemas/NamingConvention"},"naming_convention_id":{"type":"string","format":"uuid","description":"The ID (UUID) of the naming convention to use for the link configuration part"},"query_parameter":{"type":"string","description":"The query parameter to use for the link configuration part, only not null if this is a taxonomy type of part","maxLength":100,"minLength":1},"taxonomy":{"$ref":"#/components/schemas/Taxonomy"},"taxonomy_id":{"type":"string","format":"uuid","description":"The ID (UUID) of the taxonomy to use for the link configuration part"}},"additionalProperties":false},"LinkConfiguration":{"type":"object","description":"A link configuration","required":["id","parts","template_sort"],"properties":{"id":{"type":"string","format":"uuid","description":"The ID (UUID) of the link configuration"},"parts":{"type":"array","description":"The parts of the link configuration","items":{"$ref":"#/components/schemas/LinkConfigurationPart"}},"template_sort":{"type":"array","description":"The order of the parts in the link configuration","items":{"type":"string","format":"uuid","description":"The ID (UUID) of the link configuration part"}}},"additionalProperties":false},"Asset":{"type":"object","description":"Defines the shape of the asset","required":["type","_id","_name"],"properties":{"type":{"type":"string","description":"Asset type of the asset","maxLength":100,"minLength":1},"_id":{"type":"string","description":"The public UUID of the asset","format":"uuid"},"_name":{"type":"string","description":"The name of the asset","maxLength":100},"_author":{"type":"string","description":"Name of the author of the most recent change","minLength":1,"maxLength":255},"_authorSubject":{"type":"string","description":"Identity subject of the author of the most recent change","minLength":1,"maxLength":255},"_creator":{"type":"string","description":"Name of the original creator","minLength":1,"maxLength":255},"_creatorSubject":{"type":"string","description":"Identity subject of the original creator","minLength":1,"maxLength":255},"fields":{"type":"object","properties":{"title":{"type":"object","required":["value","type"],"properties":{"value":{"type":"string"},"type":{"const":"text"}}},"description":{"type":"object","required":["value","type"],"properties":{"value":{"type":"string"},"type":{"const":"text"}}},"file":{"type":"object","description":"An asset can reference at most one file. A file can be attached to only one asset.","required":["value","type"],"properties":{"value":{"type":"string","format":"uuid","description":"File ID to attach. A trashed file cannot be attached to an active asset."},"type":{"const":"file"}}},"mediaType":{"type":"object","required":["value","type"],"properties":{"value":{"type":"string"},"type":{"const":"text"}}},"url":{"type":"object","required":["value","type"],"properties":{"value":{"type":"string"},"type":{"const":"text"}}},"size":{"type":"object","required":["value","type"],"properties":{"value":{"type":"integer"},"type":{"const":"number"}}},"width":{"type":"object","required":["value","type"],"properties":{"value":{"type":"integer"},"type":{"const":"number"}}},"height":{"type":"object","required":["value","type"],"properties":{"value":{"type":"integer"},"type":{"const":"number"}}},"focalPoint":{"type":"object","required":["value","type"],"properties":{"value":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"type":{"const":"focalPoint"}}},"custom":{"type":"object","description":"Asset field values","additionalProperties":{"$ref":"#/components/schemas/ComponentParameter"}}},"additionalProperties":false},"_dataResources":{"$ref":"#/components/schemas/DataResourceDefinitions"},"labels":{"type":"array","items":{"type":"string","pattern":"^[a-z0-9_-]{1,40}$"},"description":"Array of label public IDs assigned to this asset (max 30)","maxItems":30}},"additionalProperties":false},"AssetInput":{"type":"object","description":"Defines the shape of the asset input","properties":{"type":{"type":"string","description":"Content type of the asset","maxLength":100,"minLength":1},"_id":{"type":"string","description":"The public UUID of the asset","format":"uuid"},"_name":{"type":"string","description":"The internal name of the asset","maxLength":100,"pattern":"^[^<>]*$"},"fields":{"type":"object","properties":{"title":{"type":"object","required":["value","type"],"properties":{"value":{"type":"string"},"type":{"const":"text"}}},"description":{"type":"object","required":["value","type"],"properties":{"value":{"type":"string"},"type":{"const":"text"}}},"file":{"type":"object","description":"An asset can reference at most one file. A file can be attached to only one asset.","required":["value","type"],"properties":{"value":{"type":"string","format":"uuid","description":"File ID to attach. A trashed file cannot be attached to an active asset."},"type":{"const":"file"}}},"focalPoint":{"type":"object","required":["value","type"],"properties":{"value":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"type":{"const":"focalPoint"}}}},"additionalProperties":false},"_dataResources":{"$ref":"#/components/schemas/DataResourceDefinitions"},"labels":{"type":"array","items":{"type":"string","pattern":"^[a-z0-9_-]{1,40}$"},"description":"Array of label public IDs assigned to this asset (max 30)","maxItems":30}},"additionalProperties":false},"AssetApiResponse":{"type":"object","required":["projectId","asset","created","modified"],"properties":{"projectId":{"type":"string","description":"The project ID that this layout data is part of","format":"uuid"},"created":{"type":"string","description":"Created date string for this definition","format":"date-time"},"modified":{"type":"string","description":"Modified date string for this definition","format":"date-time"},"deletedAt":{"type":"string","description":"Timestamp when the item was moved to trash. Omitted if not in trash.","format":"date-time"},"releaseId":{"type":"string","format":"uuid","description":"The release this asset belongs to. If not set, the asset belongs to the base"},"asset":{"$ref":"#/components/schemas/Asset"},"assignedLabels":{"type":"object","description":"Full label entities for UI rendering (only present when withAssignedLabels=true). Read-only.","additionalProperties":{"type":"object","required":["projectId","label","created","modified"],"properties":{"projectId":{"type":"string","format":"uuid"},"label":{"type":"object","required":["publicId","displayName","isGroup","color","scope"],"properties":{"publicId":{"type":"string","pattern":"^[a-z0-9_-]{1,40}$","description":"Public ID of the label (cannot be changed after creation)"},"displayName":{"type":"string","maxLength":80,"description":"Human readable name of the label"},"isGroup":{"type":"boolean","description":"Whether this label is a group label (cannot be changed after creation)"},"parent":{"type":"string","pattern":"^[a-z0-9_-]{1,40}$","description":"Public ID of the parent group label"},"color":{"type":"string","description":"Human readable color identifier"},"description":{"type":"string","description":"Short description of what the label is about"},"scope":{"type":"array","items":{"type":"string"},"description":"Scope of the label (currently unused)"}},"additionalProperties":false},"created":{"type":"string","format":"date-time"},"modified":{"type":"string","format":"date-time"},"createdBy":{"type":"string"},"modifiedBy":{"type":"string"}},"additionalProperties":false}}}},"AssetListResponse":{"type":"object","required":["assets"],"properties":{"assets":{"type":"array","items":{"$ref":"#/components/schemas/AssetApiResponse"}},"totalCount":{"type":"integer","description":"Total number of assets that match the query. Only present when `withTotalCount` option is true"},"facets":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"description":"Per-field counts for distinct values"}}},"CompositionApiResponse":{"type":"object","required":["state","projectId","composition","created","modified","pattern"],"properties":{"state":{"type":"integer","description":"Publishing state to fetch. 0 = draft, 64 = published","minimum":0,"maximum":64},"uiStatus":{"type":"string","deprecated":true,"description":"UI status value. Subject to change without notice; do not rely on this value. Present only when `withUIStatus` is true","enum":["Draft","Modified","Published","Orphan","Previous","Unknown"]},"projectId":{"type":"string","description":"The project ID this composition is part of","format":"uuid"},"created":{"type":"string","description":"Created date string for this composition","format":"date-time"},"modified":{"type":"string","description":"Modified date string for this composition","format":"date-time"},"deletedAt":{"type":"string","description":"Timestamp when the item was moved to trash. Omitted if not in trash.","format":"date-time"},"creator":{"type":"string","description":"User name of the creator of this composition","minLength":1,"maxLength":255},"author":{"type":"string","description":"User name of the last editor of this composition","minLength":1,"maxLength":255},"categoryId":{"type":"string","format":"uuid","description":"Reference to the category this component definition belongs to"},"description":{"type":"string","description":"A description of the component definition","maxLength":2024},"previewImageUrl":{"type":"string","description":"A preview image URL of the component definition","maxLength":2024},"pattern":{"type":"boolean","description":"Indicates if the composition is a pattern that can be referenced in other compositions"},"patternType":{"description":"If the instance is a pattern, this indicates if it's a component pattern or a composition pattern","type":"string","enum":["component","composition"]},"releaseId":{"type":"string","format":"uuid","description":"The release this composition belongs to. If not set, it belongs to the base"},"composition":{"$ref":"#/components/schemas/RootComponentInstance"},"workflowId":{"type":"string","format":"uuid","description":"The workflow ID assigned to this composition, if any. Normally comes from the component definition"},"workflowStageId":{"type":"string","format":"uuid","description":"The stage ID the composition is in within its assigned workflow. If undefined, it is implicitly in the initial stage of the workflow"},"workflowDefinition":{"description":"The full definition of the assigned workflow, if any, including stages, permissions, etc. Returned only when `withWorkflowDefinition` is true","$ref":"#/components/schemas/WorkflowDefinition"},"editionId":{"type":"string","format":"uuid","description":"The edition ID. When set, this is a child edition of the composition in _id.\n"},"editionName":{"type":"string","maxLength":100,"description":"The name of the composition or edition as shown in the editions listing.\nDescribes the purpose of an edition.\n"},"editionPriority":{"type":"integer","description":"The priority of the edition or composition. Higher numbers are higher priority.\nWhen multiple editions enable the same locale, the highest priority edition is used.\n"}}},"CompositionListResponse":{"type":"object","required":["compositions"],"properties":{"compositions":{"type":"array","items":{"$ref":"#/components/schemas/CompositionApiResponse"}},"totalCount":{"type":"integer","description":"Total number of compositions that match the query. Present only when `withTotalCount` option is true"},"facets":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"description":"Per-field counts for distinct values"}}},"EnrichmentCategory1":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","description":"Public ID of the enrichment category","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-\\$]+$"},"name":{"type":"string","description":"Display name of the enrichment category","maxLength":100,"pattern":"^[^<>]*$"},"sortOrder":{"type":"integer","description":"Optional sort order of the enrichment category (if not set, sorts by name)","nullable":true,"maximum":2147483647},"cap":{"type":"integer","description":"The maximum visitor score allowed for enrichment keys in this category","minimum":1,"default":99999999,"maximum":2147483647}}},"EnrichmentCategoryWithValues":{"type":"object","allOf":[{"$ref":"#/components/schemas/EnrichmentCategory1"},{"type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/EnrichmentValue"}}}}]},"EnrichmentValue":{"type":"object","required":["id","value"],"properties":{"id":{"type":"string","description":"Public ID of the enrichment value","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-\\$]+$"},"value":{"type":"string","description":"Display name of the enrichment value","maxLength":100,"minLength":1,"pattern":"^[^<>]{1,100}$"},"sortOrder":{"type":"integer","description":"Optional sort order of the enrichment value (if not set, sorts by name)","nullable":true,"maximum":2147483647,"minimum":-2147483648}},"additionalProperties":false},"EntityInRelease":{"type":"object","required":["name","tombstone"],"properties":{"name":{"type":"string","description":"Friendly name of the entity"},"releaseId":{"type":"string","description":"Represents a base value if not present\n"},"tombstone":{"type":"boolean","description":"If true, the entity has been deleted on the release\n"}}},"InsightDefinition":{"type":"object","required":["data","integrationKey"],"properties":{"data":{"description":"Data retrieved for the requested insights type","type":"string"},"integrationKey":{"description":"The integration key (id) associated with the retrieved insights data","type":"string"}},"additionalProperties":false},"Locale":{"type":"object","required":["locale","displayName"],"properties":{"locale":{"type":"string","description":"The locale code","example":"en-US","maxLength":32,"pattern":"^[^<>]+$"},"displayName":{"type":"string","description":"The locale's display name in the UI","example":"English (United States)","maxLength":255,"pattern":"^[^<>]+$"},"isDefault":{"type":"boolean","description":"Whether this is the default locale","example":true},"group":{"type":"string","description":"Primary grouping to place the locale in, i.e. region or other business-specific grouping type.\nWhen not set, the locale is not placed in any grouping.\nUsed only for display purposes.\n","example":"EMEA, Belgium, North America, etc.","maxLength":32,"pattern":"^[^<>]+$"},"tags":{"type":"array","items":{"type":"string","maxLength":32,"pattern":"^[^<>]+$"},"description":"Arbitrary tags to associate with the locale. Used to create locale selection presets.\n","example":["all-english","english-emea","core"]},"order":{"type":"integer","description":"Order in which the locale should be displayed in the UI.\nLower numbers are displayed first.\n"}},"additionalProperties":false},"LocalePutBody":{"type":"object","required":["locale","projectId"],"properties":{"locale":{"$ref":"#/components/schemas/Locale"},"projectId":{"type":"string","format":"uuid","description":"The project ID"}},"additionalProperties":false},"LocaleDeleteBody":{"type":"object","required":["locale","projectId"],"properties":{"locale":{"type":"string","maxLength":32,"pattern":"^[^<>]+$"},"projectId":{"type":"string","format":"uuid","description":"The project ID"}},"additionalProperties":false},"ProjectMapTreeNodeDefinition":{"allOf":[{"$ref":"#/components/schemas/ProjectMapNodeDefinition"}],"type":"object","required":["name"],"properties":{"children":{"description":"Children of the node","type":"array","items":{"$ref":"#/components/schemas/ProjectMapTreeNodeDefinition"}}},"additionalProperties":false},"ProjectMapDefinition":{"type":"object","required":["name"],"properties":{"id":{"description":"The id of the projectMap node","type":"string","minLength":1},"name":{"description":"The name of the projectMap node","type":"string","minLength":1},"description":{"description":"Description of the projectMap node","type":"string","maxLength":300},"baseUrl":{"pattern":"^http.?:\\/\\/.*$","description":"The prefix of the url generated by this projectMap","type":"string","maxLength":300},"default":{"type":"boolean"},"globalQueryStrings":{"description":"Global query strings that are allowed on all nodes in this project map","type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/ProjectMapNodeAllowedQueryString"}}}},"GetProject":{"type":"object","required":["id","createdAt","name","previewUrl","teamId","teamName","projectTypeId","uiVersion","searchIndexVersion","searchIndexStatus","relationshipsIndexStatus"],"properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"type":"string"},"name":{"type":"string"},"guidance":{"type":"string","description":"Context provided to AI when generating content for this project","maxLength":3000},"guidanceAssets":{"type":"object","properties":{"title":{"type":"string","maxLength":1000},"description":{"type":"string","maxLength":1000},"labels":{"type":"string","maxLength":1000}}},"teamId":{"type":"string","format":"uuid"},"teamName":{"type":"string"},"projectTypeId":{"type":"string","format":"uuid"},"previewUrl":{"type":"string"},"uiVersion":{"type":"number"},"sampleSize":{"type":"number"},"searchIndexVersion":{"type":"string"},"searchIndexStatus":{"type":"string","enum":["absent","present","unavailable","unknown"]},"searchIndexNextVersion":{"type":"string","deprecated":true,"description":"**Experimental / internal.** Subject to change or removal without notice.\n"},"searchIndexNextVersionCreated":{"type":"string","deprecated":true,"description":"**Experimental / internal.** Subject to change or removal without notice.\n"},"searchIndexQueuedVersion":{"type":"string","deprecated":true,"description":"**Experimental / internal.** Subject to change or removal without notice.\n"},"searchIndexQueuedVersionCreated":{"type":"string","deprecated":true,"description":"**Experimental / internal.** Subject to change or removal without notice.\n"},"relationshipsIndexStatus":{"type":"string","enum":["absent","outdated","indexing","indexed","failed"]}}},"PostProject":{"type":"object","required":["name","organization_id"],"properties":{"name":{"type":"string"},"organization_id":{"type":"string","format":"uuid"},"url":{"type":"string"},"preview_url":{"type":"string"},"site_type_id":{"type":"string","format":"uuid"},"ui_version":{"type":"number"}},"additionalProperties":false},"PutProjectBody":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"guidance":{"type":"string","description":"Context provided to AI when generating content for this project","maxLength":3000},"guidanceAssets":{"type":"object","properties":{"title":{"type":"string","maxLength":1000},"description":{"type":"string","maxLength":1000},"labels":{"type":"string","maxLength":1000}}},"teamId":{"type":"string","format":"uuid"},"previewUrl":{"type":"string"},"projectTypeId":{"type":"string","format":"uuid"},"uiVersion":{"type":"number"},"sampleSize":{"type":"number"},"createdAt":{"type":"string"},"teamName":{"type":"string"},"searchIndexVersion":{"type":"string"},"searchIndexStatus":{"type":"string","enum":["absent","present","unavailable","unknown"]},"searchIndexNextVersion":{"type":"string","deprecated":true,"description":"**Experimental / internal.** Subject to change or removal without notice.\nWhen set, a reindex is currently in flight; the dashboard can present\nthis project as \"reindexing\". Cleared when the rebuild swap completes.\n"},"searchIndexNextVersionCreated":{"type":"string","deprecated":true,"description":"**Experimental / internal.** Subject to change or removal without notice.\n"},"searchIndexQueuedVersion":{"type":"string","deprecated":true,"description":"**Experimental / internal.** Subject to change or removal without notice.\n"},"searchIndexQueuedVersionCreated":{"type":"string","deprecated":true,"description":"**Experimental / internal.** Subject to change or removal without notice.\n"},"dependencyInvalidationHookUrl":{"type":"string","deprecated":true}},"additionalProperties":false},"PatchProject":{"type":"object","required":["id"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"organization_id":{"type":"string","format":"uuid"},"url":{"type":"string"},"preview_url":{"type":"string"},"site_type_id":{"type":"string","format":"uuid"},"ui_version":{"type":"number"}},"additionalProperties":false},"RedirectGetResponse":{"type":"array","items":{"type":"object","required":["redirect","metadata"],"properties":{"redirect":{"$ref":"#/components/schemas/Redirect"},"metadata":{"$ref":"#/components/schemas/RedirectMetadata"}}}},"RedirectMetadata":{"type":"object","properties":{"updatedAt":{"type":"string","maxLength":100,"description":"The last time the redirect was modified in UTC"},"updatedBy":{"type":"string","maxLength":100,"description":"The last user who modified this redirect"},"createdAt":{"type":"string","maxLength":100,"description":"The time the redirect was created in UTC"},"createdBy":{"type":"string","maxLength":100,"description":"The user who created this redirect"},"createdByName":{"type":"string","maxLength":200,"description":"The user who created this redirect's name"}}},"Redirect":{"additionalProperties":false,"type":"object","required":["sourceUrl","targetStatusCode","targetUrl"],"properties":{"id":{"type":"string","format":"uuid","description":"Id of the redirect"},"sourceUrl":{"type":"string","maxLength":500,"description":"Source meant to match a url that needs to be redirected"},"targetUrl":{"type":"string","maxLength":500,"description":"Target meant to be redirected to"},"targetStatusCode":{"type":"integer","description":"Redirect type to occur from this redirect"},"sourceProjectMapNodeId":{"type":"string","format":"uuid","description":"Project map node related to the source this redirect"},"targetProjectMapNodeId":{"type":"string","format":"uuid","description":"Project map node related to the target this redirect"},"projectMapId":{"type":"string","format":"uuid","description":"Project map related to this redirect"},"sourceRetainQuerystring":{"type":"boolean","description":"Signals the redirect engine to retain query string parameters to the target url"},"sourceMustMatchDomain":{"type":"boolean","description":"Incoming requests must match the domain that's defined in the redirection source"},"targetPreserveIncomingProtocol":{"type":"boolean","description":"Rewritten url should match the protocol (http / https) of the incoming request instead of whatever is defined in the redirection target"},"targetPreserveIncomingDomain":{"type":"boolean","description":"Rewritten url should match the domain of the incoming request regardless of what is defined in the redirection target"},"targetMergeQuerystring":{"type":"boolean","description":"Merge incoming querystring with the querystring defined on the redirection target, taking the incoming querystring parameter where a merge is not possible"},"labelAsSystem":{"type":"boolean","description":"Label as system generated or user generated"}}},"ReleaseContent":{"type":"object","required":["name","publicId","definitionType","type","pattern","uiStatusRelease","releaseCreatedAt","releaseUpdatedAt","tombstone"],"properties":{"name":{"type":"string","description":"Friendly name of the entity"},"publicId":{"$ref":"#/components/schemas/PublicIdProperty"},"editionId":{"type":"string","format":"uuid","description":"The edition ID of the release content underneath its public ID\nNOTE: This is only set when the release content references an edition.\n"},"editionName":{"type":"string","description":"The edition name the release content belongs to, if any.\nNOTE: This may be set even when the release content refers to a composition/entry.\n"},"definitionType":{"type":"string","description":"Entity type (i.e. composition, entry, asset, ...).\nNOTE: New values may be added to this list without being considered a breaking API change\n"},"type":{"type":"string","description":"definition public ID, i.e. hero, page, product"},"pattern":{"type":"boolean","description":"If true, the entity is a pattern\n"},"uiStatusBase":{"type":"string","deprecated":true,"enum":["Draft","Modified","Published","Orphan"],"description":"Base UI status of the entity.\nNOTE: If this is undefined, there is no base entity and the entity is new in the release.\nNOTE: Values may be added or removed from this list without being considered a breaking API change\n"},"uiStatusRelease":{"type":"string","deprecated":true,"enum":["Draft","Modified","Published","Orphan","Deleted"],"description":"UI status of the entity in the release.\nNOTE: Values may be added or removed from this list without being considered a breaking API change\n"},"baseCreatedAt":{"type":"string","description":"Created date string for the base entity. If there is no base entity this is undefined"},"baseUpdatedAt":{"type":"string","description":"Updated date string for the base entity. If there is no base entity this is undefined"},"releaseCreatedAt":{"type":"string","description":"Created date string for the release entity"},"releaseUpdatedAt":{"type":"string","description":"Updated date string for the release entity"},"tombstone":{"type":"boolean","description":"If true, the entity has been deleted on the release\n"}}},"ReleaseContentsDeleteBody":{"type":"object","required":["releaseId","projectId","publicId","definitionType"],"properties":{"releaseId":{"type":"string","format":"uuid"},"projectId":{"type":"string","format":"uuid","description":"The project ID"},"publicId":{"$ref":"#/components/schemas/PublicIdProperty"},"editionId":{"type":"string","format":"uuid","description":"The edition ID of the release content underneath its public ID\nNOTE: This is only required if the release content has an edition ID\n"},"definitionType":{"type":"string","description":"Entity type (i.e. composition, entry, asset, ...).\nNOTE: New values may be added to this list without being considered a breaking API change.\n","enum":["composition","entry","asset"]}}},"Release":{"type":"object","required":["id","name","state"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","description":"The release's display name in the UI","maxLength":255,"pattern":"^[^<>]+$"},"description":{"type":"string","description":"Optional release description shown in the UI","maxLength":2024},"state":{"$ref":"#/components/schemas/ReleaseState"},"autoLaunchSchedule":{"$ref":"#/components/schemas/autoLaunchSchedule"},"autoLaunchScheduleTimeZone":{"$ref":"#/components/schemas/autoLaunchScheduleTimeZone"},"launched":{"type":"string","description":"Date string when the release was launched","format":"date-time,"}},"additionalProperties":false},"ReleasePutBody":{"type":"object","required":["releaseId","name","projectId"],"properties":{"releaseId":{"type":"string","format":"uuid"},"name":{"type":"string","description":"The release's display name in the UI","maxLength":255,"pattern":"^[^<>]+$"},"description":{"type":"string","description":"Optional release description shown in the UI","maxLength":2024},"projectId":{"type":"string","format":"uuid","description":"The project ID"},"autoLaunchSchedule":{"$ref":"#/components/schemas/autoLaunchSchedule"},"autoLaunchScheduleTimeZone":{"$ref":"#/components/schemas/autoLaunchScheduleTimeZone"}},"additionalProperties":false},"ReleasePatchBody":{"type":"object","required":["releaseId","projectId","action"],"properties":{"releaseId":{"type":"string","format":"uuid"},"projectId":{"type":"string","format":"uuid","description":"The project ID"},"action":{"type":"string","enum":["lock","unlock","launch"],"description":"The action to perform on the release.\n'lock' marks a scheduled release as being ready to launch when the scheduled time is reached.\n'unlock' returns an already scheduled to launch release to a non-locked state, enabling editing the contents.\n'launch' immediately launches a release that is in a pending state (locked or unlocked)\n"},"autoLaunchSchedule":{"$ref":"#/components/schemas/autoLaunchSchedule"},"autoLaunchScheduleTimeZone":{"$ref":"#/components/schemas/autoLaunchScheduleTimeZone"}},"additionalProperties":false},"ReleaseDeleteBody":{"type":"object","required":["releaseId","projectId"],"properties":{"releaseId":{"type":"string","format":"uuid"},"projectId":{"type":"string","format":"uuid","description":"The project ID"}},"additionalProperties":false},"autoLaunchSchedule":{"type":"number","description":"The schedule for automatically launching the release.\nIf unspecified, the release will not be automatically launched.\nIf specified, the release will be automatically launched at the specified time.\nThe time is specified in epoch milliseconds (UTC)\n"},"autoLaunchScheduleTimeZone":{"type":"string","description":"The IANA time zone identifier to display the autoLaunchSchedule with.\nNote that the schedule is always specified as UTC; this is a display timezone only\n"},"AggregateData":{"type":"object","required":["id","name","type","inputs"],"properties":{"id":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-\\$]+$"},"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]{1,100}$"},"description":{"type":"string","maxLength":1000,"pattern":"^[^<>]{0,1000}$"},"type":{"description":"The type of aggregate\n0: Audience\n1: Intent\n","type":"number","enum":[0,1]},"inputs":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/AggregateDimensionInput"}}},"additionalProperties":false},"DimensionDefinition":{"type":"object","required":["dim","category","name","cap","min"],"properties":{"dim":{"description":"The dimension name (score key)","type":"string","minLength":1},"category":{"description":"The dimension type\nAGG: Aggregation (intent or audience)\nENR: Enrichment\nSIG: Signal\n","type":"string","enum":["AGG","ENR","SIG"]},"subcategory":{"description":"Subtype of the dimension\nAGG:0: Audience\nAGG:1: Intent\nENR: Enrichment Category name\nSIG: null\n","type":"string"},"name":{"description":"The dimension's name (without category)","type":"string","minLength":1},"description":{"description":"Optional description of the dimension","type":"string"},"min":{"description":"The minimum score possible for the dimension","type":"integer"},"cap":{"description":"The maximum score possible for the dimension","type":"integer"}},"additionalProperties":false},"ManifestV2":{"type":"object","required":["project"],"properties":{"project":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"is not present unless getting a preview manifest"},"name":{"type":"string","description":"is not present unless getting a preview manifest"},"ui_version":{"type":"number","description":"is not present unless getting a preview manifest"},"pz":{"$ref":"#/components/schemas/PersonalizationManifest"},"test":{"description":"A/B test settings","type":"object","additionalProperties":{"$ref":"#/components/schemas/Test"}}},"additionalProperties":false}},"additionalProperties":false},"PersonalizationManifest":{"type":"object","properties":{"sig":{"description":"Map of all signals defined for personalization criteria","type":"object","additionalProperties":{"$ref":"#/components/schemas/Signal"}},"enr":{"description":"Map of all enrichment categories defined for personalization criteria","type":"object","additionalProperties":{"$ref":"#/components/schemas/EnrichmentCategory"}},"agg":{"description":"Map of all aggregate dimensions (intents or audiences) defined for personalization criteria","type":"object","additionalProperties":{"$ref":"#/components/schemas/AggregateDimension"}},"control":{"description":"Percentage of visitors that will be used as a personalization control group (not shown any personalization)","type":"number","minimum":0,"maximum":100}},"additionalProperties":false},"Quirk":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-]+$"},"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]+$"},"description":{"type":"string","maxLength":512,"pattern":"^[^<>]*$","nullable":true},"options":{"type":"array","items":{"$ref":"#/components/schemas/QuirkOptions"}},"source":{"$ref":"#/components/schemas/QuirkSource"}},"additionalProperties":false},"QuirkOptions":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]+$"},"value":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[^<>]+$"}},"additionalProperties":false},"QuirkSource":{"type":"object","description":"The source of this quirk. When not defined, it is user specified.","required":["name","id"],"properties":{"name":{"type":"string","maxLength":100},"id":{"type":"string","maxLength":100}}},"SignalWithId":{"type":"object","allOf":[{"type":"object","required":["id"],"properties":{"id":{"type":"string","minLength":1,"maxLength":36,"pattern":"^[A-Za-z0-9\\-\\$]+$"}}},{"$ref":"#/components/schemas/PreviewSignal"}]},"Test1":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]+$"},"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]+$"},"winning_variant_id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]+$"},"default_variant_id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[^<>]+$"},"closed":{"type":"boolean","default":false}},"additionalProperties":false}},"responses":{"BadRequestError":{"description":"Request input validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"UnauthorizedError":{"description":"API key or token was not valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ForbiddenError":{"description":"Permission was denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFoundError":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimitError":{"description":"Too many requests in allowed time period"},"InternalServerError":{"description":"Execution error occurred"}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key"},"BearerAuth":{"type":"http","scheme":"bearer"}},"parameters":{"projectId":{"in":"query","name":"projectId","description":"The project the entry/entries are on","required":true,"schema":{"type":"string","format":"uuid"}},"entryIDs":{"in":"query","name":"entryIDs","description":"Specify one or more entry IDs to fetch.\nWhen `editions=raw`, this matches on edition IDs or entry IDs and edition resolution is disabled.\nWhen `versionId` is passed, this parameter is required and must contain only one entry ID.\n","style":"form","schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"versionId":{"in":"query","name":"versionId","description":"Specify a historical entry version ID to fetch (retrieved from the entries-history API).\nMust be used with the `entryIDs` parameter, and there must be only one entryID passed\n","schema":{"type":"string","maxLength":1024}},"slug":{"in":"query","name":"slug","description":"Specify a single entry to fetch by slug","schema":{"type":"string"}},"type":{"in":"query","name":"type","description":"The content type ID to filter by","style":"form","schema":{"type":"array","items":{"type":"string"}}},"state":{"in":"query","name":"state","description":"Publishing state to fetch. 0 = draft, 64 = published","schema":{"default":64,"type":"number","minimum":0,"maximum":64}},"offset":{"in":"query","name":"offset","description":"Number of records to skip","schema":{"type":"integer","minimum":0}},"limit":{"in":"query","name":"limit","description":"Max number of records to return","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},"orderBy":{"in":"query","name":"orderBy","description":"Sets the sorting of the results. If unspecified, results are sorted by modification date descending.\nAllowed values are: updated_at_DESC, updated_at_ASC, created_at_DESC, created_at_ASC, name_DESC, name_ASC, slug_DESC, slug_ASC\n","style":"form","schema":{"type":"array","items":{"type":"string"}}},"facetBy":{"in":"query","name":"facetBy","deprecated":true,"description":"Returns counts for distinct values of the specified field or fields (provided as comma-separated IDs).","style":"form","schema":{"type":"string"}},"withUIStatus":{"in":"query","name":"withUIStatus","deprecated":true,"description":"Returns the UI status string of the entry.\nThis internal status is subject to change without notice, and is thus marked deprecated to discourage use of internal data\n","schema":{"type":"boolean","default":false}},"withWorkflowDefinition":{"in":"query","name":"withWorkflowDefinition","description":"Returns the definition of any attached workflow along with the entry data\n","schema":{"type":"boolean","default":false}},"withComponentIDs":{"in":"query","name":"withComponentIDs","description":"If true the `_id` unique identifier of blocks will be part of the response data.\nIf false, the `_id` will not be present in the API response.\nNote: the default value depends on the `format`: true for editor or canonical, false for delivery or when no format is specified.\nPrefer selecting a `format` rather than using this option.\n","schema":{"type":"boolean"}},"uiStatus":{"in":"query","name":"uiStatus","deprecated":true,"style":"form","description":"Filters entries lists by the UI status of the entry.\nThis internal status is subject to change without notice, and is thus marked deprecated to discourage use of internal data\n","schema":{"type":"array","items":{"type":"string","enum":["Draft","Modified","Published","Orphan"]}}},"createdBy":{"in":"query","name":"createdBy","description":"Filters entry lists by the user who created them. The user is specified by their identity subject\n","schema":{"type":"string"}},"updatedBy":{"in":"query","name":"updatedBy","description":"Filters entry lists by the user who last updated them. The user is specified by their identity subject\n","schema":{"type":"string"}},"withTotalCount":{"in":"query","name":"withTotalCount","description":"Controls whether the total count of results will be returned along with the current results page in a list.\nHas no effect when not fetching a list. This does impact performance when enabled\n","schema":{"type":"boolean"}},"keyword":{"in":"query","name":"keyword","description":"Performs keyword search on the entries","schema":{"type":"string","maxLength":256}},"format":{"in":"query","name":"format","description":"Specify a format you want the results in. Any explicit shaping flag (skipPatternResolution,\nskipOverridesResolution, withComponentIDs, skipContentTypeResolution) overrides this alias.\n  - `canonical`: PUT-safe structure — patterns and overrides left\n    unresolved and component `_id`s included. This is the format the Uniform CLI uses when syncing.\n    (skipPatternResolution=true, skipOverridesResolution=true,\n    withComponentIDs=true, skipContentTypeResolution=false).\n  - `editor`: For loading into a Uniform editor - same as canonical, but with patterns expanded (skipPatternResolution=false). Still PUT-safe — the PUT ignores\n    the expanded pattern nodes.\n  - `delivery`: default structure for serving to a frontend — patterns and overrides resolved,\n    component `_id`s removed, and each entry returned as stored\n    (skipContentTypeResolution=true).\n","schema":{"type":"string","enum":["canonical","editor","delivery"]}},"skipContentTypeResolution":{"in":"query","name":"skipContentTypeResolution","description":"Improves performance by skipping dynamic data revalidations; appropriate for content delivery.\nDefault: true when `format` is delivery. False otherwise.\nPrefer selecting a `format` rather than using this option.\n","schema":{"type":"boolean"}},"skipPatternResolution":{"in":"query","name":"skipPatternResolution","description":"If true, any pattern references in the composition will be left unresolved.\nThis is appropriate if you intend to serialize the composition without patterns\nembedded into it, and serialize the pattern data separately.\nDefault: true when `format` is canonical. False otherwise\nPrefer selecting a `format` rather than using this option.\n","schema":{"type":"boolean"}},"skipOverridesResolution":{"in":"query","name":"skipOverridesResolution","description":"If true, any pattern override data is not resolved by the API.\nThis is intended for internal use in the Canvas editor, and should not be used.\nPassing this parameter automatically implies withComponentIDs to be true.\nDefault: true when `format` is canonical or editor. False otherwise.\nPrefer selecting a `format` rather than using this option.\n","schema":{"type":"boolean"}},"skipParameterResolution":{"in":"query","name":"skipParameterResolution","deprecated":true,"description":"This parameter is unused and has no effect. Passing this parameter will become an error in the future\n","schema":{"type":"boolean","default":false}},"pattern":{"in":"query","name":"pattern","description":"Matches entries based on whether they are pattern entries or regular entries.\nIf true, only pattern entries will be returned.\nIf false (default), only regular entries will be returned.\nIf 'any', both pattern and regular entries will be returned (useful for ID lookups).\n","schema":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["any"]}]}},"locale":{"in":"query","name":"locale","description":"One or more locales to filter and localize by.\nOnly entries that enable one of the specified locales _or enable no locales_ will be returned.\nThe response will be localized to include only the first matching locale's data.\n\nThis parameter accepts a single value, a comma-delimited list of values, or the Accept-Language header syntax. Examples:\nen-US\nfr-CA,fr\nde-AT;q=0.9,de-DE;q=0.8,en;q=0.7\n\nWhen this parameter is not passed, all locales' data will be returned\n","schema":{"type":"string","maxLength":128}},"releaseId":{"in":"query","name":"releaseId","description":"The ID of a release to fetch the content for.\n\n- When unspecified, all release content is excluded from the result(s).\n- When specified, all content is returned as it would appear in the release if it was released now. This includes both content copied to the release and changed, as well as content that is not part of the release.\n\nContent copied to a release can be differentiated from base content by the `releaseId` property on the content. If the content is not copied to the release, this property will be null\n","schema":{"type":"string","format":"uuid"}},"search":{"description":"Search on textual fields of an entry.\nMatches against fully rendered content including resolved pattern content.\nUse this for \"where does this content appear\" queries.\nNote: For long text fields, the tail of the text is not guaranteed to be searchable.\nExample: ?search=hello\n","in":"query","name":"search","schema":{"type":"string"}},"searchSemantic":{"deprecated":true,"description":"BETA: Semantic search using vector similarity to find content by meaning.\nMatches against source content only - pattern base content matches the pattern itself, not consumers.\nUse this for \"where is this content defined\" queries.\nRequires AI credits.\n","in":"query","name":"searchSemantic","schema":{"type":"string"}},"editions":{"in":"query","name":"editions","description":"Controls the edition resolution behavior.\n\nauto: (default) Editions are evaluated automatically and the best matching edition is returned.\n    When a locale is provided, the edition with the highest priority that enables that locale matches\n    Without a locale, the default edition is matched\n\nall: Every edition is returned as a separate row.\n\nraw: the entryIDs parameter targets exact edition/entry IDs and no edition resolution is performed.\n    entryIDs MUST be provided with this option.\n    If versionId is passed, this is always enabled.\n","schema":{"type":"string","enum":["auto","all","raw"],"default":"auto"}},"deleted":{"in":"query","name":"deleted","description":"Controls filtering of trashed items.\n\nexclude: (default) Only return items not in trash.\nonly: Only return trashed items (for trash view).\ninclude: Return both trashed and non-trashed items.\n","schema":{"type":"string","enum":["exclude","only","include"],"default":"exclude"}},"projectId1":{"in":"query","name":"projectId","description":"The project to fetch a route from","required":true,"schema":{"type":"string","format":"uuid"}},"path":{"in":"query","name":"path","description":"The path to resolve. Dynamic project map nodes and redirects can be resolved when a matching path is passed.\nQuery string parameters may be passed with the path. They are ignored for route matching.\nIf the route matches a composition and the project map node allows passed query string parameters, query parameters will\nbe returned as as dynamic inputs to the composition.\n\nExamples:\n* route \"/company/about-us\" would match \"/company/about-us\" in project map or redirects\n* route \"/products/123\" would match \"/products/:productId\" in project map or \"/products/*\" in redirects\n* route \"/products/123?color=red\" would match \"/products/:productId\" in project map, and provde productId=123 and color=red as dynamic inputs to the composition\n\nConflict resolution:\nIf a route matches multiple possible project map or redirect nodes, the resulting action will use the following logic:\n* If a redirect matches, it wins over project map nodes in all cases\n* If multiple redirects or project map nodes match the route, the one with the most specific path wins:\n    * The route with the most path segments wins\n    * If several matches have the same number of segments, the one with the fewest dynamic segments wins\n    * If still ambiguous, the first matching route arbitrarily wins\n\nInvalid paths:\nThe request fails with HTTP 400 when the path, ignoring its query string and trailing slashes:\n* contains consecutive slashes (for example \"/en//about\" or \"//en/about\")\n* has a path segment that is too long to match any route. The limit depends on the characters used,\n  and is generally 150-220 characters per segment.\n\nProbe paths:\nOn uniform.global, paths ending in an archive, backup or database file extension (for example \"/site.zip\",\n\"/config.php.bak\" or \"/db.sql\") return `{ \"type\": \"notFound\" }` without being matched, even where a dynamic\nproject map node or redirect would match them.\n","required":true,"schema":{"type":"string","maxLength":8000,"minLength":1}},"projectMapId":{"in":"query","name":"projectMapId","description":"Specify a project map ID to fetch route from. If not specified, the default project map for the projectId is used","schema":{"type":"string","format":"uuid"}},"withComponentIDs1":{"in":"query","name":"withComponentIDs","description":"If true the `_id` unique identifier of each non-root component will be part of the response data.\nIf false, the `_id` will not be present in the API response\n","schema":{"type":"boolean","default":false}},"withContentSourceMap":{"in":"query","name":"withContentSourceMap","deprecated":true,"description":"Has no effect.","schema":{"type":"boolean","default":false}},"locale1":{"in":"query","name":"locale","description":"One or more locales to localize the response to.\nWhen the result is a composition, it includes only the first matching locale's data.\nIf no matching locale is found, the response will be a not-found result.\n\nThis parameter accepts a single value, a comma-delimited list of values, or the Accept-Language header syntax. Examples:\nen-US\nfr-CA,fr\nde-AT;q=0.9,de-DE;q=0.8,en;q=0.7\n\nWhen this parameter is not passed:\n- If a dynamic :locale path segment is defined on a project map ancestor node, then it will be used as the locale. If the path segment and this parameter are provided, the parameter takes precedence.\n- Otherwise, all locales' data is returned.\n\nWhen the result is a redirect, this parameter has no effect\n","schema":{"type":"string","maxLength":128}},"dataSourceVariant":{"in":"query","name":"dataSourceVariant","description":"Indicates the data variant that was fetched for data resources.\nundefined: Data resources were resolved using published data from their data source\nunpublished: Data resources which support unpublished data retrieved unpublished data from their data source. Data resources that did not support unpublished data retrieved published data instead.\n","schema":{"type":"string","enum":["unpublished"]}},"ignoreRedirects":{"in":"query","name":"ignoreRedirects","description":"When true, redirects are not evaluated for the route matching; the result will be either a composition or not found.\nNote: this is always true when state=63 (internal RSC editor state) to allow contextual editing of compositions\nthat have redirects configured on their paths.\n","schema":{"type":"boolean","default":false}},"projectId2":{"in":"query","name":"projectId","description":"The project the asset/assets are on","required":true,"schema":{"type":"string","format":"uuid"}},"assetId":{"in":"query","name":"assetId","description":"Specify a single asset ID to fetch","schema":{"type":"string","format":"uuid"}},"assetIDs":{"in":"query","name":"assetIDs","description":"Specify multiple asset IDs to fetch. Response type will be a list","style":"form","schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"type1":{"in":"query","name":"type","description":"The asset type ID to filter by","style":"form","schema":{"type":"array","items":{"type":"string","enum":["image","video","audio","other"]}}},"keyword1":{"in":"query","name":"keyword","description":"Matches assets where their name or description contains the specified keyword.\nThis is a list query parameter, and cannot be used with any primary query parameters\n","schema":{"type":"string","maxLength":256}},"searchSemantic1":{"deprecated":true,"description":"BETA: Semantic search using vector similarity to find assets by meaning.\nUse this for \"images of mountains\" style queries.\nRequires AI credits.\n","in":"query","name":"searchSemantic","schema":{"type":"string"}},"orderBy1":{"in":"query","name":"orderBy","description":"Sets the sorting of the results. If unspecified, results are sorted by creation date ascending.\nAllowed values are: updated_at_DESC, updated_at_ASC, created_at_DESC, created_at_ASC, name_DESC, name_ASC, slug_DESC, slug_ASC, relevance_DESC (when searching).\n","style":"form","schema":{"type":"array","items":{"type":"string"},"default":["created_at_ASC"]}},"createdBy1":{"in":"query","name":"createdBy","description":"Filters asset lists by the user who created them. The user is specified by their identity subject\n","schema":{"type":"string"}},"updatedBy1":{"in":"query","name":"updatedBy","description":"Filters asset lists by the user who last updated them. The user is specified by their identity subject\n","schema":{"type":"string"}},"releaseId1":{"in":"query","name":"releaseId","description":"The ID of a release to fetch the content for.\n\n- When unspecified, all release content is excluded from the result(s).\n- When specified, all content is returned as it would appear in the release if it was released now. This includes both content copied to the release and changed, as well as content that is not part of the release.\n\nContent copied to a release can be differentiated from base content by the `releaseId` property on the content. If the content is not copied to the release, this property will be undefined\n","schema":{"type":"string","format":"uuid"}},"withAssignedLabels":{"in":"query","name":"withAssignedLabels","description":"When true, includes full label entities in the response for UI rendering.\nThe assignedLabels array includes the label and its parent group (if any).\nThis parameter is not supported with uniform.global.\n","schema":{"type":"boolean"}},"withUIStatus1":{"in":"query","name":"withUIStatus","deprecated":true,"description":"Returns additional author and creator metadata for the asset.\nThis internal status is subject to change without notice and is thus marked deprecated to discourage use of internal data\n","schema":{"type":"boolean","default":false}},"projectId3":{"in":"query","name":"projectId","description":"The project the composition(s) belong to","required":true,"schema":{"type":"string","format":"uuid"}},"compositionId":{"in":"query","name":"compositionId","description":"Specify a single composition ID to fetch. The response will be a single composition.\nThis is a primary query parameter and cannot be used with any other primary query parameters.\nWhen `editions=raw`, this parameter matches on composition or edition IDs and edition resolution is disabled.\n","schema":{"type":"string","format":"uuid"}},"componentId":{"in":"query","name":"componentId","description":"Specify a single component ID to fetch the component's composition defaults. The response will be a single composition.\nThis is a primary query parameter and cannot be used with any other primary query parameters\n","schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9-_]+$"}},"compositionIDs":{"in":"query","name":"compositionIDs","description":"Specify multiple composition IDs to fetch. The response type will be a list.\nThis is a primary query parameter and cannot be used with any other primary query parameters.\nWhen `editions=raw`, this parameter matches on composition or edition IDs and edition resolution is disabled.\n","style":"form","schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"versionId1":{"in":"query","name":"versionId","description":"Specify a historical composition version ID to fetch (retrieved from the canvas-history API).\nMust be used with the `compositionId` parameter\n","schema":{"type":"string","maxLength":1024}},"slug1":{"in":"query","name":"slug","description":"Specify a single composition to fetch by slug. The response will be a single composition.\nThis is a primary query parameter and cannot be used with any other primary query parameters\n","schema":{"type":"string"}},"projectMapNodeId":{"in":"query","name":"projectMapNodeId","description":"Specify a single composition to fetch by associated project map node ID. The response will be a single composition.\nThis is a primary query parameter and cannot be used with any other primary query parameters\n","schema":{"type":"string","format":"uuid"}},"projectMapNodePath":{"in":"query","name":"projectMapNodePath","description":"Specify a single composition to fetch by associated project map node path. The response will be a single composition.\nThis is a primary query parameter and cannot be used with any other primary query parameters\n","schema":{"type":"string"}},"projectMapId1":{"in":"query","name":"projectMapId","description":"Specify a project map ID to fetch by path or node ID from.\nIf not specified, the default project map for the projectId is used.\nOnly used when fetching by projectMapNodeId or projectMapNodePath\n","schema":{"type":"string","format":"uuid"}},"type2":{"in":"query","name":"type","description":"The component type (by public ID) to filter by. Note that this filters the root composition type only; components in slots are not matched by this filter.\nThis is a list query parameter and cannot be used with any primary query parameters\n","style":"form","schema":{"type":"array","items":{"type":"string"}}},"state1":{"in":"query","name":"state","description":"Publishing state to fetch. 0 = draft, 64 = published.\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"default":64,"type":"number","minimum":0,"maximum":64}},"offset1":{"in":"query","name":"offset","description":"Number of records to skip\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"type":"integer","minimum":0}},"limit1":{"in":"query","name":"limit","description":"Maximum number of records to return\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},"categories":{"in":"query","name":"categories","description":"Filtration by category ID. An empty string can be used to include records without a category.","schema":{"type":"array","items":{"type":"string"}}},"skipEnhance":{"in":"query","name":"skipEnhance","deprecated":true,"description":"Signals an enhancer proxy to skip processing enhancements to the data and return raw data only.\nThis improves performance if you do not require enhanced component data.\nIf calling the Canvas API directly with no enhancer proxy, this has no effect\n","schema":{"type":"boolean","default":false}},"format1":{"in":"query","name":"format","description":"Specify a format you want the results in. Any explicit shaping flag (skipPatternResolution,\nskipOverridesResolution, withComponentIDs) overrides this alias.\n  - `canonical`: PUT-safe structure — patterns and overrides left\n    unresolved and component `_id`s included. This is the format the Uniform CLI uses when syncing.\n    (skipPatternResolution=true, skipOverridesResolution=true,\n    withComponentIDs=true).\n  - `editor`: For loading into a Uniform editor - same as canonical, but with patterns expanded (skipPatternResolution=false). Still PUT-safe — the PUT ignores\n    the expanded pattern nodes.\n  - `delivery`: default structure for serving to a frontend — patterns and overrides resolved\n    and component `_id`s removed.\n","schema":{"type":"string","enum":["canonical","editor","delivery"]}},"skipPatternResolution1":{"in":"query","name":"skipPatternResolution","description":"If true, any pattern references in the composition will be left unresolved.\nThis is appropriate if you intend to serialize the composition without patterns\nembedded into it, and serialize the pattern data separately.\nDefault: true when `format` is canonical. False otherwise.\nPrefer selecting a `format` rather than using this option.\n","schema":{"type":"boolean"}},"skipOverridesResolution1":{"in":"query","name":"skipOverridesResolution","description":"If true, any pattern override data is not resolved by the API.\nThis is intended for internal use in the Canvas editor and should not be used.\nPassing this parameter automatically implies `withComponentIDs` is true.\nDefault: true when `format` is canonical or editor. False otherwise.\nPrefer selecting a `format` rather than using this option.\n","schema":{"type":"boolean"}},"withComponentIDs2":{"in":"query","name":"withComponentIDs","description":"If true, the `_id` unique identifier of each non-root component will be part of the response data.\nIf false, the `_id` will not be present in the API response.\nNote: the default value depends on the `format`: true for editor or canonical, false for delivery or when no format is specified.\nPrefer selecting a `format` rather than using this option.\n","schema":{"type":"boolean"}},"keyword2":{"in":"query","name":"keyword","description":"Matches compositions where their name, slug, or definition name contains the specified keyword.\nNOT a full-text search; does not match composition contents.\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"type":"string","maxLength":256}},"pattern1":{"in":"query","name":"pattern","description":"Matches compositions based on whether they are a pattern composition or a regular composition.\nIf true, only pattern compositions will be returned.\nIf false, only regular compositions will be returned.\nIf omitted or 'any', both pattern and regular compositions will be returned.\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"oneOf":[{"type":"boolean"},{"type":"string","enum":["any"]}]}},"patternType":{"in":"query","name":"patternType","description":"This specifies which type of patterns to return. This query parameter has no effect when `pattern` is false.\n* `all` - Returns all pattern instances\n* `component` - Returns only component patterns\n* `composition` - Returns only composition patterns\n","schema":{"type":"string","enum":["all","component","composition"],"default":"all"}},"withPatternType":{"in":"query","deprecated":true,"name":"withPatternType","description":"Includes the `patternType` attribute in the response","schema":{"type":"boolean","default":false}},"orderBy2":{"in":"query","name":"orderBy","description":"Sets the sorting of the results. If unspecified, results are sorted by name ascending.\nAllowed values are: updated_at_DESC, updated_at_ASC, created_at_DESC, created_at_ASC,\nname_DESC, name_ASC, slug_DESC, slug_ASC.\nWhen using primary query parameters, this parameter is ignored\n","style":"form","schema":{"type":"array","items":{"type":"string"}}},"withUIStatus2":{"in":"query","name":"withUIStatus","deprecated":true,"description":"Returns the UI status string of the composition.\nThis internal status is subject to change without notice and is thus marked deprecated to discourage use of internal data\n","schema":{"type":"boolean","default":false}},"withWorkflowDefinition1":{"in":"query","name":"withWorkflowDefinition","description":"Returns the definition of any attached workflow along with the composition data\n","schema":{"type":"boolean","default":false}},"uiStatus1":{"in":"query","name":"uiStatus","deprecated":true,"style":"form","description":"Filters composition lists by the UI status of the composition.\nThis internal status is subject to change without notice and is thus marked deprecated to discourage use of internal data.\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"type":"array","items":{"type":"string","enum":["Draft","Modified","Published","Orphan"]}}},"attachedToProjectMap":{"in":"query","name":"attachedToProjectMap","style":"form","description":"Filters out compositions without attached node or filters out compositions with attached nodes\nif set to false. If not specified, no filtration is applied.\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"type":"boolean"}},"withProjectMapNodes":{"in":"query","name":"withProjectMapNodes","description":"Includes project map node information in the composition results","schema":{"type":"boolean","default":false}},"createdBy2":{"in":"query","name":"createdBy","description":"Filters composition lists by the user who created them. The user is specified by their identity subject.\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"type":"string"}},"updatedBy2":{"in":"query","name":"updatedBy","description":"Filters composition lists by the user who last updated them. The user is specified by their identity subject.\nThis is a list query parameter and cannot be used with any primary query parameters\n","schema":{"type":"string"}},"locale2":{"in":"query","name":"locale","description":"One or more locales to filter and localize by.\nFor list responses, only compositions that enable one of the specified locales _or enable no locales_ will be returned. When more than one locale is passed, the list matches with an OR on each locale.\nFor all types of response, the response will be localized to include only the first matching locale's data.\n\nThis parameter accepts a single value, a comma-delimited list of values, or the Accept-Language header syntax. Examples:\nen-US\nfr-CA,fr\nde-AT;q=0.9,de-DE;q=0.8,en;q=0.7\n\nWhen this parameter is not passed, all locales' data will be returned.\nIf a composition is requested by ID and does not possess any of the specified locales, HTTP 404 will be returned\n","schema":{"type":"string","maxLength":128}},"search1":{"description":"Search on textual fields of a composition.\nMatches against fully rendered content including resolved pattern content.\nUse this for \"where does this content appear\" queries.\nNote: For long text fields, the tail of the text is not guaranteed to be searchable.\nExample: ?search=hello\n","in":"query","name":"search","schema":{"type":"string"}},"editions1":{"in":"query","name":"editions","description":"Controls the edition resolution behavior.\n\nauto: (default) Editions are evaluated automatically and the best matching edition is returned.\n    When a locale is provided, the edition with the highest priority that enables that locale matches\n    Without a locale, the default edition is matched\n\nall: Every edition is returned as a separate row.\n    Note: this has no effect when used with compositionId which always returns a single result.\n\nraw: the compositionId and compositionIDs parameters target exact edition/composition IDs and no edition resolution is performed.\n    compositionId or compositionIDs MUST be provided with this option.\n    If versionId is passed, this is always enabled.\n","schema":{"type":"string","enum":["auto","all","raw"],"default":"auto"}}}},"servers":[{"url":"https://uniform.app","description":"US region"},{"url":"https://eu.uniform.app","description":"EU region"}],"externalDocs":{"url":"https://docs.uniform.app/docs/api","description":"Uniform API docs"}}