The Idempotency-Key header is required (400 without it). Send the same key when you retry.
An editor session (see createManagedUserEditorSession) can send only name, content, design and
embedSettings, and only for a composition made for its managed user. A body that names any other field
is refused with 403 and EDITOR_SESSION_FIELD_NOT_ALLOWED.
Send databaseSchema to add tables to the composition: the tables that are missing are made, and
the ones that exist are left as they are. A databaseSchema that cannot be used is refused before anything
is saved, with 400 and INVALID_DATABASE_SCHEMA. If the composition is saved but its tables cannot be made
just now, the answer is still 200 and meta.warnings says so.
When several people edit the same composition. A save that carries content can name the content version
it started from in the If-Match header (the contentVersion of the composition you read, or the ETag of an
earlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with 412 and
CONTENT_VERSION_MISMATCH, and error.details.currentVersion is the version to start again from. For a
composition a team shares, error.details also says who got there first: lastEditedBy
({ id, name }, or null when nobody can be named) and lastEditedAt. An editor session, or a call made for
one managed user, is told the version only. A save without If-Match still goes through, and the other
person’s change is replaced, as it always was.
PUT
/
compositions
/
{id}
TypeScript SDK
import { randomUUID } from 'node:crypto';import { Configuration, CompositionsApi } from '@widgetic/api-sdk-ts';const config = new Configuration({ apiKey: 'YOUR_API_KEY'});const compositionsApi = new CompositionsApi(config);try { const composition = await compositionsApi.updateComposition({ id: 'composition_123', // The call needs an idempotency key: reuse the same key if you retry this call. idempotencyKey: randomUUID(), updateComposition: { name: 'Updated Composition', content: { // Updated content object }, embedSettings: { width: '800', height: '600' } } }); console.log('Updated composition:', composition.data);} catch (error) { if (error.response?.status === 404) { console.error('Composition not found'); } else { console.error('Failed to update composition:', error); }}
Required: a call without it is refused with 400. A key of your own that names this one request; a UUID is ideal. It is 8 to 50 characters of letters, digits, - and _. Send the same key again when you retry (after a timeout, a dropped connection or a 5xx) and the call is carried out once: the retry gets the first answer back, marked X-Idempotency-Cached: true. The same key with a different body is refused with 422, and a retry that arrives while the first call is still running with 409 (see Retry-After).
The id Widgetic gave the managed user (POST /managed-users). Makes this call for one of your managed users, so that a mistake in your own code cannot reach another customer's work. Send this header, or the other one, never both. Left out, the call works on your whole account, as it always has. With it, the call reaches only that user's compositions and workflows: a list shows only theirs, a composition or a workflow the call makes is filed under them, and one of another user, or one that does not exist, answers 404 (the same answer, so the call cannot be used to find out what another customer has). A managed user that is not yours answers 404 with MANAGED_USER_NOT_FOUND. An empty, repeated or malformed header is 400 with MANAGED_USER_SCOPE_INVALID; an empty header is never read as no header. A call that is about the whole account, such as the list of your managed users, is refused with 403 and MANAGED_USER_SCOPE_ROUTE_NOT_AVAILABLE: send it without the header. Only your API key can send it. The header is a limit the call asks for: whoever holds the key can leave it out, so for a credential that a customer's browser holds, use an editor session. An Idempotency-Key is kept apart for each managed user.
Your own id for the managed user (its externalId), when you do not keep Widgetic's. Makes this call for one of your managed users, so that a mistake in your own code cannot reach another customer's work. Send this header, or the other one, never both. Left out, the call works on your whole account, as it always has. With it, the call reaches only that user's compositions and workflows: a list shows only theirs, a composition or a workflow the call makes is filed under them, and one of another user, or one that does not exist, answers 404 (the same answer, so the call cannot be used to find out what another customer has). A managed user that is not yours answers 404 with MANAGED_USER_NOT_FOUND. An empty, repeated or malformed header is 400 with MANAGED_USER_SCOPE_INVALID; an empty header is never read as no header. A call that is about the whole account, such as the list of your managed users, is refused with 403 and MANAGED_USER_SCOPE_ROUTE_NOT_AVAILABLE: send it without the header. Only your API key can send it. The header is a limit the call asks for: whoever holds the key can leave it out, so for a credential that a customer's browser holds, use an editor session. An Idempotency-Key is kept apart for each managed user.
Tables to make for the composition, in the shape createComposition takes
({ "tables": [ ... ] }, with the same names, types, defaults and limits). Only the tables that are
missing are made. A table that already exists is never changed or dropped: it keeps its columns, so a
column added to the declaration is not added to it. (Tables made from the widget's own file are the one
exception, brought up to date when the widget is published; see source on createComposition.) A
declaration that cannot be used is refused with
400 and INVALID_DATABASE_SCHEMA. When the composition is saved but its tables cannot be made just
now, meta.warnings says so: send the same databaseSchema again to retry.
Extra information about the answer: where a page sits in a list, the cursor of the next page, or warnings about a call that succeeded with a caveat.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Widgetic","colors":{"primary":"#324E30","light":"#75A568","dark":"#0F210F"},"logo":{"light":"https://mintcdn.com/widgetic/Od-pD6ChvIzhY_fR/brand/logo-light.svg?fit=max\u0026auto=format\u0026n=Od-pD6ChvIzhY_fR\u0026q=85\u0026s=c80ce649cc12d9f206a4ea5d3d2d9d31","dark":"https://mintcdn.com/widgetic/Od-pD6ChvIzhY_fR/brand/logo-dark.svg?fit=max\u0026auto=format\u0026n=Od-pD6ChvIzhY_fR\u0026q=85\u0026s=46708e0c7194a1fa0844613fc8492364"},"favicon":"https://mintcdn.com/widgetic/Od-pD6ChvIzhY_fR/brand/favicon.svg?fit=max\u0026auto=format\u0026n=Od-pD6ChvIzhY_fR\u0026q=85\u0026s=94d26e3e8e9ecd316386c38057803c62","api":{},"footer":{"socials":{"x":"https://x.com/widgetic","github":"https://github.com/widgetic"}},"errors":{"404":{"redirect":false,"title":"Page not found","description":"We couldn't find the page you were looking for.\n\n\u003cCardGroup cols={2}>\n \u003cCard title=\"Documentation\" icon=\"book\" href=\"/docs/introduction\">\n Return to the home page\n \u003c/Card>\n \u003cCard title=\"Quickstart\" icon=\"rocket\" href=\"/docs/quickstart\">\n Get started in minutes\n \u003c/Card>\n \u003cCard title=\"API Reference\" icon=\"code\" href=\"/api-reference/introduction\">\n Explore API endpoints\n \u003c/Card>\n \u003cCard title=\"SDKs\" icon=\"cube\" href=\"/resources/sdks\">\n Explore our SDKs\n \u003c/Card>\n\u003c/CardGroup>\n\n\u003cInfo>\n Think this is a broken link? Email us at [support@widgetic.com](mailto:support@widgetic.com).\n\u003c/Info>"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"widgetic","hasAudioNarration":false,"actualSubdomain":"widgetic","customDomains":["widgetic.com"],"gitSource":{"type":"github","owner":"widgetic","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af081e42ab4a0cc3d7f236c","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API Reference","count":177},{"language":"default","tag":"Documentation","count":42},{"language":"default","tag":"Partners","count":41},{"language":"default","tag":"Compositions","count":39},{"language":"default","tag":"Workflows","count":19},{"language":"default","tag":"Managed Users","count":18},{"language":"default","tag":"CLI","count":16},{"language":"default","tag":"Partner Integration","count":13},{"language":"default","tag":"Users","count":13},{"language":"default","tag":"Resources","count":10}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/compositions/update-composition","slug":"/api-reference/compositions/update-composition","pageMetadata":{"title":"Update Composition","description":"Updates a specific composition.\n\nThe `Idempotency-Key` header is required (`400` without it). Send the same key when you retry.\n\nAn editor session (see `createManagedUserEditorSession`) can send only `name`, `content`, `design` and\n`embedSettings`, and only for a composition made for its managed user. A body that names any other field\nis refused with `403` and `EDITOR_SESSION_FIELD_NOT_ALLOWED`.\n\nSend `databaseSchema` to add tables to the composition: the tables that are missing are made, and\nthe ones that exist are left as they are. A `databaseSchema` that cannot be used is refused before anything\nis saved, with `400` and `INVALID_DATABASE_SCHEMA`. If the composition is saved but its tables cannot be made\njust now, the answer is still `200` and `meta.warnings` says so.\n\n**When several people edit the same composition.** A save that carries `content` can name the content version\nit started from in the `If-Match` header (the `contentVersion` of the composition you read, or the `ETag` of an\nearlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with `412` and\n`CONTENT_VERSION_MISMATCH`, and `error.details.currentVersion` is the version to start again from. For a\ncomposition a team shares, `error.details` also says who got there first: `lastEditedBy`\n(`{ id, name }`, or `null` when nobody can be named) and `lastEditedAt`. An editor session, or a call made for\none managed user, is told the version only. A save without `If-Match` still goes through, and the other\nperson's change is replaced, as it always was.\n","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /compositions/{id}","href":"/api-reference/compositions/update-composition","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Updates a specific composition.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" header is required (\", _jsx(_components.code, {\n children: \"400\"\n }), \" without it). Send the same key when you retry.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"An editor session (see \", _jsx(_components.code, {\n children: \"createManagedUserEditorSession\"\n }), \") can send only \", _jsx(_components.code, {\n children: \"name\"\n }), \", \", _jsx(_components.code, {\n children: \"content\"\n }), \", \", _jsx(_components.code, {\n children: \"design\"\n }), \" and\\n\", _jsx(_components.code, {\n children: \"embedSettings\"\n }), \", and only for a composition made for its managed user. A body that names any other field\\nis refused with \", _jsx(_components.code, {\n children: \"403\"\n }), \" and \", _jsx(_components.code, {\n children: \"EDITOR_SESSION_FIELD_NOT_ALLOWED\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Send \", _jsx(_components.code, {\n children: \"databaseSchema\"\n }), \" to add tables to the composition: the tables that are missing are made, and\\nthe ones that exist are left as they are. A \", _jsx(_components.code, {\n children: \"databaseSchema\"\n }), \" that cannot be used is refused before anything\\nis saved, with \", _jsx(_components.code, {\n children: \"400\"\n }), \" and \", _jsx(_components.code, {\n children: \"INVALID_DATABASE_SCHEMA\"\n }), \". If the composition is saved but its tables cannot be made\\njust now, the answer is still \", _jsx(_components.code, {\n children: \"200\"\n }), \" and \", _jsx(_components.code, {\n children: \"meta.warnings\"\n }), \" says so.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"When several people edit the same composition.\"\n }), \" A save that carries \", _jsx(_components.code, {\n children: \"content\"\n }), \" can name the content version\\nit started from in the \", _jsx(_components.code, {\n children: \"If-Match\"\n }), \" header (the \", _jsx(_components.code, {\n children: \"contentVersion\"\n }), \" of the composition you read, or the \", _jsx(_components.code, {\n children: \"ETag\"\n }), \" of an\\nearlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with \", _jsx(_components.code, {\n children: \"412\"\n }), \" and\\n\", _jsx(_components.code, {\n children: \"CONTENT_VERSION_MISMATCH\"\n }), \", and \", _jsx(_components.code, {\n children: \"error.details.currentVersion\"\n }), \" is the version to start again from. For a\\ncomposition a team shares, \", _jsx(_components.code, {\n children: \"error.details\"\n }), \" also says who got there first: \", _jsx(_components.code, {\n children: \"lastEditedBy\"\n }), \"\\n(\", _jsx(_components.code, {\n children: \"{ id, name }\"\n }), \", or \", _jsx(_components.code, {\n children: \"null\"\n }), \" when nobody can be named) and \", _jsx(_components.code, {\n children: \"lastEditedAt\"\n }), \". An editor session, or a call made for\\none managed user, is told the version only. A save without \", _jsx(_components.code, {\n children: \"If-Match\"\n }), \" still goes through, and the other\\nperson’s change is replaced, as it always was.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Update Composition","description":"Updates a specific composition.\n\nThe `Idempotency-Key` header is required (`400` without it). Send the same key when you retry.\n\nAn editor session (see `createManagedUserEditorSession`) can send only `name`, `content`, `design` and\n`embedSettings`, and only for a composition made for its managed user. A body that names any other field\nis refused with `403` and `EDITOR_SESSION_FIELD_NOT_ALLOWED`.\n\nSend `databaseSchema` to add tables to the composition: the tables that are missing are made, and\nthe ones that exist are left as they are. A `databaseSchema` that cannot be used is refused before anything\nis saved, with `400` and `INVALID_DATABASE_SCHEMA`. If the composition is saved but its tables cannot be made\njust now, the answer is still `200` and `meta.warnings` says so.\n\n**When several people edit the same composition.** A save that carries `content` can name the content version\nit started from in the `If-Match` header (the `contentVersion` of the composition you read, or the `ETag` of an\nearlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with `412` and\n`CONTENT_VERSION_MISMATCH`, and `error.details.currentVersion` is the version to start again from. For a\ncomposition a team shares, `error.details` also says who got there first: `lastEditedBy`\n(`{ id, name }`, or `null` when nobody can be named) and `lastEditedAt`. An editor session, or a call made for\none managed user, is told the version only. A save without `If-Match` still goes through, and the other\nperson's change is replaced, as it always was.\n","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /compositions/{id}","href":"/api-reference/compositions/update-composition","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/widgetic/a06e02caee24c9e4/scripts/check-openapi-drift.js","/_mintlify/custom/widgetic/cfc959b865109f94/scripts/generate-code-samples.js","/_mintlify/custom/widgetic/4108e10153588825/scripts/sync-openapi.js","/_mintlify/custom/widgetic/0b8b2a5de38f31ba/scripts/validate-links.js","/_mintlify/custom/widgetic/f948d1cc9e974f48/scripts/__tests__/agentDocsDrift.test.js","/_mintlify/custom/widgetic/5e269cd2108b7191/scripts/check-agent-docs-drift.js","/_mintlify/custom/widgetic/5905b4748e7acd3e/scripts/lib/agentDocsDrift.js","/_mintlify/custom/widgetic/d772e7a3506ca340/scripts/__tests__/openApiServerAddress.test.js","/_mintlify/custom/widgetic/6a746d19cf42793e/scripts/lib/openApiServerAddress.js"],"openApiReferenceData":{"operation":{"operationId":"updateComposition","summary":"Update Composition","description":"Updates a specific composition.\n\nThe `Idempotency-Key` header is required (`400` without it). Send the same key when you retry.\n\nAn editor session (see `createManagedUserEditorSession`) can send only `name`, `content`, `design` and\n`embedSettings`, and only for a composition made for its managed user. A body that names any other field\nis refused with `403` and `EDITOR_SESSION_FIELD_NOT_ALLOWED`.\n\nSend `databaseSchema` to add tables to the composition: the tables that are missing are made, and\nthe ones that exist are left as they are. A `databaseSchema` that cannot be used is refused before anything\nis saved, with `400` and `INVALID_DATABASE_SCHEMA`. If the composition is saved but its tables cannot be made\njust now, the answer is still `200` and `meta.warnings` says so.\n\n**When several people edit the same composition.** A save that carries `content` can name the content version\nit started from in the `If-Match` header (the `contentVersion` of the composition you read, or the `ETag` of an\nearlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with `412` and\n`CONTENT_VERSION_MISMATCH`, and `error.details.currentVersion` is the version to start again from. For a\ncomposition a team shares, `error.details` also says who got there first: `lastEditedBy`\n(`{ id, name }`, or `null` when nobody can be named) and `lastEditedAt`. An editor session, or a call made for\none managed user, is told the version only. A save without `If-Match` still goes through, and the other\nperson's change is replaced, as it always was.\n","tags":["Compositions"],"security":["1f414d1c-4caa-49b6-ac09-f434709e9389"],"x-access-level":"user","x-visibility":"public","parameters":["6e05deac-8dc7-4ce3-be13-89df9c981c5a","0dc36f17-f132-4e8e-a94c-fad809c42d1e","161f4e67-7a44-4d11-b732-ab4a989f231c","2bff33a7-8b4f-4267-bcb4-d690b98215a2","907b3922-96fb-4bd4-8501-42abec2ffe07"],"requestBody":"e6c19c63-50fe-4b01-8a4b-78ca121651d8","responses":{"200":"9d8b3f4f-279f-4414-aa98-2780b46ad37b","400":"32b7f639-5ad2-4174-8cf9-70aad7d41975","401":"26051a77-fbbe-492e-9f99-9bb3e7694142","403":"6dd20399-4b42-4638-afa5-77a7ba78787c","404":"bb76f68f-9b0b-4935-99c7-287d5aac2c37","412":"f59affe8-1bbf-42a6-a7a9-c4cdfc8e8d58","503":"759d78af-817a-4927-b6d1-5a0034fd2e65"},"x-code-samples":[{"lang":"TypeScript","label":"TypeScript SDK","source":"import { randomUUID } from 'node:crypto';\nimport { Configuration, CompositionsApi } from '@widgetic/api-sdk-ts';\n\nconst config = new Configuration({\n apiKey: 'YOUR_API_KEY'\n});\n\nconst compositionsApi = new CompositionsApi(config);\n\ntry {\n const composition = await compositionsApi.updateComposition({\n id: 'composition_123',\n // The call needs an idempotency key: reuse the same key if you retry this call.\n idempotencyKey: randomUUID(),\n updateComposition: {\n name: 'Updated Composition',\n content: {\n // Updated content object\n },\n embedSettings: {\n width: '800',\n height: '600'\n }\n }\n });\n console.log('Updated composition:', composition.data);\n} catch (error) {\n if (error.response?.status === 404) {\n console.error('Composition not found');\n } else {\n console.error('Failed to update composition:', error);\n }\n}\n"}],"method":"put","type":"path","servers":["8cdad7e2-72d7-448d-a767-c0ce9882d766"],"path":"/compositions/{id}","baseUrlOptions":["https://api.widgetic.com/v1"],"title":"Update Composition","codeSamples":[{"label":"TypeScript SDK","lang":"TypeScript","source":"import { randomUUID } from 'node:crypto';\nimport { Configuration, CompositionsApi } from '@widgetic/api-sdk-ts';\n\nconst config = new Configuration({\n apiKey: 'YOUR_API_KEY'\n});\n\nconst compositionsApi = new CompositionsApi(config);\n\ntry {\n const composition = await compositionsApi.updateComposition({\n id: 'composition_123',\n // The call needs an idempotency key: reuse the same key if you retry this call.\n idempotencyKey: randomUUID(),\n updateComposition: {\n name: 'Updated Composition',\n content: {\n // Updated content object\n },\n embedSettings: {\n width: '800',\n height: '600'\n }\n }\n });\n console.log('Updated composition:', composition.data);\n} catch (error) {\n if (error.response?.status === 404) {\n console.error('Composition not found');\n } else {\n console.error('Failed to update composition:', error);\n }\n}\n"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"6e05deac-8dc7-4ce3-be13-89df9c981c5a":{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"Composition ID","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"Composition ID"},"0dc36f17-f132-4e8e-a94c-fad809c42d1e":{"in":"header","name":"If-Match","schema":{"type":"string","description":"Optional content version from `contentVersion` or an `ETag` (`\"3\"`, `3`, or `*`). Read only when the body has `content`.","uniqueKey":"","typeLabel":"string"},"description":"Optional content version from `contentVersion` or an `ETag` (`\"3\"`, `3`, or `*`). Read only when the body has `content`."},"161f4e67-7a44-4d11-b732-ab4a989f231c":{"in":"header","name":"Idempotency-Key","required":true,"description":"Required: a call without it is refused with `400`. A key of your own that names this one request; a UUID is ideal. It is 8 to 50 characters of letters, digits, `-` and `_`. Send the same key again when you retry (after a timeout, a dropped connection or a `5xx`) and the call is carried out once: the retry gets the first answer back, marked `X-Idempotency-Cached: true`. The same key with a different body is refused with `422`, and a retry that arrives while the first call is still running with `409` (see `Retry-After`).","schema":{"type":"string","minLength":8,"maxLength":50,"pattern":"^[a-zA-Z0-9_-]{8,50}$","example":"9b2d6f0a-3c41-4e5a-8d77-1f2e3a4b5c6d","isRequired":true,"description":"Required: a call without it is refused with `400`. A key of your own that names this one request; a UUID is ideal. It is 8 to 50 characters of letters, digits, `-` and `_`. Send the same key again when you retry (after a timeout, a dropped connection or a `5xx`) and the call is carried out once: the retry gets the first answer back, marked `X-Idempotency-Cached: true`. The same key with a different body is refused with `422`, and a retry that arrives while the first call is still running with `409` (see `Retry-After`).","uniqueKey":"","typeLabel":"string"}},"2bff33a7-8b4f-4267-bcb4-d690b98215a2":{"in":"header","name":"X-Managed-User-Id","required":false,"description":"The id Widgetic gave the managed user (`POST /managed-users`). Makes this call for one of your managed users, so that a mistake in your own code cannot reach another customer's work. Send this header, or the other one, never both. Left out, the call works on your whole account, as it always has. With it, the call reaches only that user's compositions and workflows: a list shows only theirs, a composition or a workflow the call makes is filed under them, and one of another user, or one that does not exist, answers `404` (the same answer, so the call cannot be used to find out what another customer has). A managed user that is not yours answers `404` with `MANAGED_USER_NOT_FOUND`. An empty, repeated or malformed header is `400` with `MANAGED_USER_SCOPE_INVALID`; an empty header is never read as no header. A call that is about the whole account, such as the list of your managed users, is refused with `403` and `MANAGED_USER_SCOPE_ROUTE_NOT_AVAILABLE`: send it without the header. Only your API key can send it. The header is a limit the call asks for: whoever holds the key can leave it out, so for a credential that a customer's browser holds, use an editor session. An `Idempotency-Key` is kept apart for each managed user.","schema":{"type":"string","format":"uuid","example":"3f2b8c1e-7a4d-4e0b-9c55-2d1a6b7e8f90","isRequired":false,"description":"The id Widgetic gave the managed user (`POST /managed-users`). Makes this call for one of your managed users, so that a mistake in your own code cannot reach another customer's work. Send this header, or the other one, never both. Left out, the call works on your whole account, as it always has. With it, the call reaches only that user's compositions and workflows: a list shows only theirs, a composition or a workflow the call makes is filed under them, and one of another user, or one that does not exist, answers `404` (the same answer, so the call cannot be used to find out what another customer has). A managed user that is not yours answers `404` with `MANAGED_USER_NOT_FOUND`. An empty, repeated or malformed header is `400` with `MANAGED_USER_SCOPE_INVALID`; an empty header is never read as no header. A call that is about the whole account, such as the list of your managed users, is refused with `403` and `MANAGED_USER_SCOPE_ROUTE_NOT_AVAILABLE`: send it without the header. Only your API key can send it. The header is a limit the call asks for: whoever holds the key can leave it out, so for a credential that a customer's browser holds, use an editor session. An `Idempotency-Key` is kept apart for each managed user.","uniqueKey":"","typeLabel":"string\u003cuuid>"}},"907b3922-96fb-4bd4-8501-42abec2ffe07":{"in":"header","name":"X-Managed-User-External-Id","required":false,"description":"Your own id for the managed user (its `externalId`), when you do not keep Widgetic's. Makes this call for one of your managed users, so that a mistake in your own code cannot reach another customer's work. Send this header, or the other one, never both. Left out, the call works on your whole account, as it always has. With it, the call reaches only that user's compositions and workflows: a list shows only theirs, a composition or a workflow the call makes is filed under them, and one of another user, or one that does not exist, answers `404` (the same answer, so the call cannot be used to find out what another customer has). A managed user that is not yours answers `404` with `MANAGED_USER_NOT_FOUND`. An empty, repeated or malformed header is `400` with `MANAGED_USER_SCOPE_INVALID`; an empty header is never read as no header. A call that is about the whole account, such as the list of your managed users, is refused with `403` and `MANAGED_USER_SCOPE_ROUTE_NOT_AVAILABLE`: send it without the header. Only your API key can send it. The header is a limit the call asks for: whoever holds the key can leave it out, so for a credential that a customer's browser holds, use an editor session. An `Idempotency-Key` is kept apart for each managed user.","schema":{"type":"string","minLength":1,"maxLength":255,"example":"customer-1042","isRequired":false,"description":"Your own id for the managed user (its `externalId`), when you do not keep Widgetic's. Makes this call for one of your managed users, so that a mistake in your own code cannot reach another customer's work. Send this header, or the other one, never both. Left out, the call works on your whole account, as it always has. With it, the call reaches only that user's compositions and workflows: a list shows only theirs, a composition or a workflow the call makes is filed under them, and one of another user, or one that does not exist, answers `404` (the same answer, so the call cannot be used to find out what another customer has). A managed user that is not yours answers `404` with `MANAGED_USER_NOT_FOUND`. An empty, repeated or malformed header is `400` with `MANAGED_USER_SCOPE_INVALID`; an empty header is never read as no header. A call that is about the whole account, such as the list of your managed users, is refused with `403` and `MANAGED_USER_SCOPE_ROUTE_NOT_AVAILABLE`: send it without the header. Only your API key can send it. The header is a limit the call asks for: whoever holds the key can leave it out, so for a credential that a customer's browser holds, use an editor session. An `Idempotency-Key` is kept apart for each managed user.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Updated name of the composition","example":"Updated Composition Name","uniqueKey":"name","typeLabel":"string"},"widgetId":{"type":"string","format":"uuid","description":"Updated widget ID","example":"123e4567-e89b-12d3-a456-426614174002","uniqueKey":"widgetId","typeLabel":"string\u003cuuid>"},"content":{"type":"object","description":"Updated content data","example":{"key":"new value"},"uniqueKey":"content","typeLabel":"object"},"status":{"type":"string","description":"Updated status","example":"published","uniqueKey":"status","typeLabel":"string"},"embedSettings":{"type":"object","description":"Updated embed settings","example":{"width":"100%","height":"600px"},"uniqueKey":"embedSettings","typeLabel":"object"},"design":{"type":"object","description":"Updated design settings","example":{"theme":"dark","colors":{"primary":"#0044cc"}},"uniqueKey":"design","typeLabel":"object"},"databaseSchema":{"type":"object","description":"Tables to make for the composition, in the shape `createComposition` takes\n(`{ \"tables\": [ ... ] }`, with the same names, types, defaults and limits). Only the tables that are\nmissing are made. A table that already exists is never changed or dropped: it keeps its columns, so a\ncolumn added to the declaration is not added to it. (Tables made from the widget's own file are the one\nexception, brought up to date when the widget is published; see `source` on `createComposition`.) A\ndeclaration that cannot be used is refused with\n`400` and `INVALID_DATABASE_SCHEMA`. When the composition is saved but its tables cannot be made just\nnow, `meta.warnings` says so: send the same `databaseSchema` again to retry.\n","uniqueKey":"databaseSchema","typeLabel":"object"},"projectId":{"type":"string","format":"uuid","description":"Updated project ID","example":"123e4567-e89b-12d3-a456-426614174004","uniqueKey":"projectId","typeLabel":"string\u003cuuid>"}},"example":{"name":"Updated Composition Name","widgetId":"123e4567-e89b-12d3-a456-426614174002","content":{"key":"new value"},"status":"published","embedSettings":{"width":"100%","height":"600px"},"design":{"theme":"dark","colors":{"primary":"#0044cc"}},"databaseSchema":{},"projectId":"123e4567-e89b-12d3-a456-426614174004"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"Updated Composition Name","widgetId":"123e4567-e89b-12d3-a456-426614174002","content":{"key":"new value"},"status":"published","embedSettings":{"width":"100%","height":"600px"},"design":{"theme":"dark","colors":{"primary":"#0044cc"}},"databaseSchema":{},"projectId":"123e4567-e89b-12d3-a456-426614174004"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"9d8b3f4f-279f-4414-aa98-2780b46ad37b":{"description":"Composition updated successfully","headers":{"ETag":{"schema":{"type":"string"},"description":"Quoted content version for the next If-Match"}},"content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","description":"Always `true` on a success.","example":true,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for the composition","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"data.id","typeLabel":"string\u003cuuid>"},"creatorId":{"type":"string","format":"uuid","description":"ID of the user who created the composition","example":"123e4567-e89b-12d3-a456-426614174001","isRequired":true,"uniqueKey":"data.creatorId","typeLabel":"string\u003cuuid>"},"widgetId":{"type":"string","format":"uuid","description":"ID of the widget this composition is based on","example":"123e4567-e89b-12d3-a456-426614174002","isRequired":true,"uniqueKey":"data.widgetId","typeLabel":"string\u003cuuid>"},"name":{"type":"string","description":"Name of the composition","example":"My Composition","isRequired":true,"uniqueKey":"data.name","typeLabel":"string"},"content":{"type":"object","description":"Content data for the composition","example":{"key":"value"},"isRequired":true,"uniqueKey":"data.content","typeLabel":"object"},"status":{"type":"string","description":"Current status of the composition","enum":["draft","published","archived"],"example":"draft","isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"createdAt":{"type":"string","format":"date-time","description":"When the composition was created","example":"2023-01-01T00:00:00Z","isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"When the composition was last updated","example":"2023-01-02T00:00:00Z","isRequired":true,"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time>"},"contentVersion":{"type":"integer","description":"Monotonic content version when the content_version migration is applied","example":3,"uniqueKey":"data.contentVersion","typeLabel":"integer"},"embedSettings":{"type":"object","description":"Settings for embedding the composition","example":{"width":"100%","height":"500px"},"uniqueKey":"data.embedSettings","typeLabel":"object"},"design":{"type":"object","description":"Design settings for the composition","example":{"theme":"light","colors":{"primary":"#0066ff"}},"uniqueKey":"data.design","typeLabel":"object"},"databaseId":{"type":"string","format":"uuid","description":"Legacy. The id of a Neon database that an earlier version made for this composition. A composition now keeps its tables in a schema of its own (named `comp_` followed by its id) in a database shared with other compositions, so new compositions have none.","example":"123e4567-e89b-12d3-a456-426614174003","uniqueKey":"data.databaseId","typeLabel":"string\u003cuuid>"},"projectId":{"type":"string","format":"uuid","description":"ID of the project this composition belongs to","example":"123e4567-e89b-12d3-a456-426614174004","uniqueKey":"data.projectId","typeLabel":"string\u003cuuid>"},"managedUserId":{"oneOf":[{"type":"string","format":"uuid","description":"The managed user the composition was made for, or null when it is your own. List one managed user's compositions with the `managedUserId` or `managedUserExternalId` query parameter of `getAllCompositions`.","example":"b7c8d9e0-1f2a-4b3c-8d4e-5f6a7b8c9d0e","uniqueKey":"data.managedUserId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"The managed user the composition was made for, or null when it is your own. List one managed user's compositions with the `managedUserId` or `managedUserExternalId` query parameter of `getAllCompositions`.","example":"b7c8d9e0-1f2a-4b3c-8d4e-5f6a7b8c9d0e","uniqueKey":"data.managedUserId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.managedUserId","typeLabel":"string\u003cuuid> | null"},"direct":{"oneOf":[{"type":"boolean","description":"Whether the widget the composition is made from is drawn straight into the page, without a frame\n(`true`), or inside a frame (`false`). `null` when the widget has no published version yet. It is a\nfact about the widget's published version, so every composition of one widget answers the same, and it\nchanges when you publish another version. It cannot be set. Only `getCompositionById` returns it:\nthe other calls that return a composition leave it out, and so does that one on the rare occasion the\nanswer could not be worked out just then (ask again).\n","example":true,"uniqueKey":"data.direct.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the widget the composition is made from is drawn straight into the page, without a frame\n(`true`), or inside a frame (`false`). `null` when the widget has no published version yet. It is a\nfact about the widget's published version, so every composition of one widget answers the same, and it\nchanges when you publish another version. It cannot be set. Only `getCompositionById` returns it:\nthe other calls that return a composition leave it out, and so does that one on the rare occasion the\nanswer could not be worked out just then (ask again).\n","example":true,"uniqueKey":"data.direct.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.direct","typeLabel":"boolean | null"},"lastEditedBy":{"oneOf":[{"type":"object","description":"Who made the latest change to a composition a team shares (one filed under a project of an organization,\nor one made in a Shopify store's workspace), so that a teammate who opens it can be told \"Anna changed\nthis at 14:32\" and a save that someone else got ahead of can say who. It is `null` when nobody can be\nnamed: a change made by a Widgetic service, through an editor session, by a partner's call made for one\nmanaged user, or one made before this was recorded.\n\nOnly `getCompositionById` returns it, and only for a composition a team shares, and only to a person (a\nsigned-in member or a key of one): a composition in a personal project leaves it out, and so does every\nanswer given to an editor session or to a call made for one managed user. It is also left out on the rare\noccasion the team could not be worked out just then (ask again). The other calls that return a\ncomposition leave it out.\n\nIt is not the same as `creatorId`, who made the composition, and the account behind a change is never\npart of the composition itself: this is the only place it is told.\n","properties":{"id":{"type":"string","format":"uuid","description":"The account that made the latest change","example":"123e4567-e89b-12d3-a456-426614174001","uniqueKey":"data.lastEditedBy.oneOf.0.id","typeLabel":"string\u003cuuid>"},"name":{"oneOf":[{"type":"string","maxLength":120,"description":"The name on that account, or `null` when it has none or it could not be read just then. Never an email address.","example":"Anna","uniqueKey":"data.lastEditedBy.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":120,"description":"The name on that account, or `null` when it has none or it could not be read just then. Never an email address.","example":"Anna","uniqueKey":"data.lastEditedBy.oneOf.0.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.lastEditedBy.oneOf.0.name","typeLabel":"string | null"}},"uniqueKey":"data.lastEditedBy.oneOf.0","typeLabel":"object"},{"type":"null","description":"Who made the latest change to a composition a team shares (one filed under a project of an organization,\nor one made in a Shopify store's workspace), so that a teammate who opens it can be told \"Anna changed\nthis at 14:32\" and a save that someone else got ahead of can say who. It is `null` when nobody can be\nnamed: a change made by a Widgetic service, through an editor session, by a partner's call made for one\nmanaged user, or one made before this was recorded.\n\nOnly `getCompositionById` returns it, and only for a composition a team shares, and only to a person (a\nsigned-in member or a key of one): a composition in a personal project leaves it out, and so does every\nanswer given to an editor session or to a call made for one managed user. It is also left out on the rare\noccasion the team could not be worked out just then (ask again). The other calls that return a\ncomposition leave it out.\n\nIt is not the same as `creatorId`, who made the composition, and the account behind a change is never\npart of the composition itself: this is the only place it is told.\n","properties":{"id":{"type":"string","format":"uuid","description":"The account that made the latest change","example":"123e4567-e89b-12d3-a456-426614174001"},"name":{"oneOf":[{"type":"string","maxLength":120,"description":"The name on that account, or `null` when it has none or it could not be read just then. Never an email address.","example":"Anna"},{"type":"null","maxLength":120,"description":"The name on that account, or `null` when it has none or it could not be read just then. Never an email address.","example":"Anna"}]}},"uniqueKey":"data.lastEditedBy.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.lastEditedBy","typeLabel":"object | null"},"lastEditedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When that latest change was made. Present whenever `lastEditedBy` is.","example":"2026-10-28T14:32:00Z","uniqueKey":"data.lastEditedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When that latest change was made. Present whenever `lastEditedBy` is.","example":"2026-10-28T14:32:00Z","uniqueKey":"data.lastEditedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.lastEditedAt","typeLabel":"string\u003cdate-time> | null"}},"required":["id","creatorId","widgetId","name","content","status","createdAt","updatedAt"],"example":{"id":"123e4567-e89b-12d3-a456-426614174000","creatorId":"123e4567-e89b-12d3-a456-426614174001","widgetId":"123e4567-e89b-12d3-a456-426614174002","name":"My Composition","content":{"key":"value"},"contentVersion":3,"status":"draft","createdAt":"2023-01-01T00:00:00Z","updatedAt":"2023-01-02T00:00:00Z","embedSettings":{"width":"100%","height":"500px"},"design":{"theme":"light","colors":{"primary":"#0066ff"}},"databaseId":"123e4567-e89b-12d3-a456-426614174003","projectId":"123e4567-e89b-12d3-a456-426614174004","managedUserId":"b7c8d9e0-1f2a-4b3c-8d4e-5f6a7b8c9d0e","direct":true,"lastEditedBy":{},"lastEditedAt":"2026-10-28T14:32:00Z"},"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"meta":{"type":"object","description":"Extra information about the answer: where a page sits in a list, the cursor of the next page, or warnings about a call that succeeded with a caveat.","additionalProperties":true,"properties":{"page":{"type":"integer","description":"The page that was read, counting from 1.","example":1,"uniqueKey":"meta.page","typeLabel":"integer"},"size":{"type":"integer","description":"How many items one page holds.","example":20,"uniqueKey":"meta.size","typeLabel":"integer"},"total":{"type":"integer","description":"How many items the whole list has.","example":135,"uniqueKey":"meta.total","typeLabel":"integer"},"limit":{"type":"integer","description":"The same as `size`.","example":20,"uniqueKey":"meta.limit","typeLabel":"integer"},"offset":{"type":"integer","description":"How many items come before this page.","example":0,"uniqueKey":"meta.offset","typeLabel":"integer"},"hasNextPage":{"type":"boolean","example":true,"uniqueKey":"meta.hasNextPage","typeLabel":"boolean"},"hasPreviousPage":{"type":"boolean","example":false,"uniqueKey":"meta.hasPreviousPage","typeLabel":"boolean"},"nextCursor":{"oneOf":[{"type":"string","description":"Pass this as `cursor` to read the next page of a list that is read by cursor. `null` on the last page.","uniqueKey":"meta.nextCursor.oneOf.0","typeLabel":"string"},{"type":"null","description":"Pass this as `cursor` to read the next page of a list that is read by cursor. `null` on the last page.","uniqueKey":"meta.nextCursor.oneOf.1","typeLabel":"null"}],"uniqueKey":"meta.nextCursor","typeLabel":"string | null"},"warnings":{"type":"array","items":{"type":"string","uniqueKey":"meta.warnings.items.[INDEX]","typeLabel":"string"},"description":"Things the call did not do, though it succeeded (for example a table that could not be created just now).","uniqueKey":"meta.warnings","typeLabel":"string[]"}},"uniqueKey":"meta","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"id":"123e4567-e89b-12d3-a456-426614174000","creatorId":"123e4567-e89b-12d3-a456-426614174001","widgetId":"123e4567-e89b-12d3-a456-426614174002","name":"My Composition","content":{"key":"value"},"contentVersion":3,"status":"draft","createdAt":"2023-01-01T00:00:00Z","updatedAt":"2023-01-02T00:00:00Z","embedSettings":{"width":"100%","height":"500px"},"design":{"theme":"light","colors":{"primary":"#0066ff"}},"databaseId":"123e4567-e89b-12d3-a456-426614174003","projectId":"123e4567-e89b-12d3-a456-426614174004","managedUserId":"b7c8d9e0-1f2a-4b3c-8d4e-5f6a7b8c9d0e","direct":true,"lastEditedBy":{},"lastEditedAt":"2026-10-28T14:32:00Z"},"meta":{"page":1,"size":20,"total":135,"limit":20,"offset":0,"hasNextPage":true,"hasPreviousPage":false,"nextCursor":"\u003cstring>","warnings":["\u003cstring>"]}}}},"exampleType":"generated"}},"exampleType":"generated"},"32b7f639-5ad2-4174-8cf9-70aad7d41975":{"description":"Invalid input (including a `databaseSchema` that cannot be used, `INVALID_DATABASE_SCHEMA`, and an invalid If-Match)","content":{"application/json":{"schema":{"type":"object","required":["success","message","error"],"additionalProperties":true,"properties":{"success":{"type":"boolean","description":"Always `false` on a failure.","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"message":{"type":"string","description":"The same text as `error.message`, for a caller that reads one line.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"object","required":["code","message","timestamp"],"properties":{"code":{"type":"string","description":"Machine-readable error code.","example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","example":"Composition not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"timestamp":{"type":"string","format":"date-time","example":"2026-10-15T10:00:00.000Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"param":{"type":"string","description":"The field that caused the error, when one did.","example":"name","uniqueKey":"error.param","typeLabel":"string"},"docUrl":{"type":"string","description":"Where this error is explained.","uniqueKey":"error.docUrl","typeLabel":"string"},"suggestedAction":{"type":"string","description":"What to do about it.","uniqueKey":"error.suggestedAction","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds to wait before trying again (rate limits). The same number is in the `Retry-After` header.","example":60,"uniqueKey":"error.retryAfter","typeLabel":"integer"},"details":{"type":"object","additionalProperties":true,"description":"More about the error: the fields that failed, a limit that was reached.","uniqueKey":"error.details","typeLabel":"object"},"correlationId":{"type":"string","description":"Quote this when you ask support about the call.","example":"req_123e4567-e89b-12d3-a456-426614174000","uniqueKey":"error.correlationId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"message":"\u003cstring>","error":{"code":"RESOURCE_NOT_FOUND","message":"Composition not found","timestamp":"2026-10-15T10:00:00.000Z","param":"name","docUrl":"\u003cstring>","suggestedAction":"\u003cstring>","retryAfter":60,"details":{},"correlationId":"req_123e4567-e89b-12d3-a456-426614174000"}}}},"exampleType":"generated"}},"exampleType":"generated"},"26051a77-fbbe-492e-9f99-9bb3e7694142":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["success","message","error"],"additionalProperties":true,"properties":{"success":{"type":"boolean","description":"Always `false` on a failure.","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"message":{"type":"string","description":"The same text as `error.message`, for a caller that reads one line.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"object","required":["code","message","timestamp"],"properties":{"code":{"type":"string","description":"Machine-readable error code.","example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","example":"Composition not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"timestamp":{"type":"string","format":"date-time","example":"2026-10-15T10:00:00.000Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"param":{"type":"string","description":"The field that caused the error, when one did.","example":"name","uniqueKey":"error.param","typeLabel":"string"},"docUrl":{"type":"string","description":"Where this error is explained.","uniqueKey":"error.docUrl","typeLabel":"string"},"suggestedAction":{"type":"string","description":"What to do about it.","uniqueKey":"error.suggestedAction","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds to wait before trying again (rate limits). The same number is in the `Retry-After` header.","example":60,"uniqueKey":"error.retryAfter","typeLabel":"integer"},"details":{"type":"object","additionalProperties":true,"description":"More about the error: the fields that failed, a limit that was reached.","uniqueKey":"error.details","typeLabel":"object"},"correlationId":{"type":"string","description":"Quote this when you ask support about the call.","example":"req_123e4567-e89b-12d3-a456-426614174000","uniqueKey":"error.correlationId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"message":"\u003cstring>","error":{"code":"RESOURCE_NOT_FOUND","message":"Composition not found","timestamp":"2026-10-15T10:00:00.000Z","param":"name","docUrl":"\u003cstring>","suggestedAction":"\u003cstring>","retryAfter":60,"details":{},"correlationId":"req_123e4567-e89b-12d3-a456-426614174000"}}}},"exampleType":"generated"}},"exampleType":"generated"},"6dd20399-4b42-4638-afa5-77a7ba78787c":{"description":"Not allowed - an editor session named a field it may not write (`EDITOR_SESSION_FIELD_NOT_ALLOWED`)","content":{"application/json":{"schema":{"type":"object","required":["success","message","error"],"additionalProperties":true,"properties":{"success":{"type":"boolean","description":"Always `false` on a failure.","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"message":{"type":"string","description":"The same text as `error.message`, for a caller that reads one line.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"object","required":["code","message","timestamp"],"properties":{"code":{"type":"string","description":"Machine-readable error code.","example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","example":"Composition not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"timestamp":{"type":"string","format":"date-time","example":"2026-10-15T10:00:00.000Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"param":{"type":"string","description":"The field that caused the error, when one did.","example":"name","uniqueKey":"error.param","typeLabel":"string"},"docUrl":{"type":"string","description":"Where this error is explained.","uniqueKey":"error.docUrl","typeLabel":"string"},"suggestedAction":{"type":"string","description":"What to do about it.","uniqueKey":"error.suggestedAction","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds to wait before trying again (rate limits). The same number is in the `Retry-After` header.","example":60,"uniqueKey":"error.retryAfter","typeLabel":"integer"},"details":{"type":"object","additionalProperties":true,"description":"More about the error: the fields that failed, a limit that was reached.","uniqueKey":"error.details","typeLabel":"object"},"correlationId":{"type":"string","description":"Quote this when you ask support about the call.","example":"req_123e4567-e89b-12d3-a456-426614174000","uniqueKey":"error.correlationId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"message":"\u003cstring>","error":{"code":"RESOURCE_NOT_FOUND","message":"Composition not found","timestamp":"2026-10-15T10:00:00.000Z","param":"name","docUrl":"\u003cstring>","suggestedAction":"\u003cstring>","retryAfter":60,"details":{},"correlationId":"req_123e4567-e89b-12d3-a456-426614174000"}}}},"exampleType":"generated"}},"exampleType":"generated"},"bb76f68f-9b0b-4935-99c7-287d5aac2c37":{"description":"Composition not found","content":{"application/json":{"schema":{"type":"object","required":["success","message","error"],"additionalProperties":true,"properties":{"success":{"type":"boolean","description":"Always `false` on a failure.","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"message":{"type":"string","description":"The same text as `error.message`, for a caller that reads one line.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"object","required":["code","message","timestamp"],"properties":{"code":{"type":"string","description":"Machine-readable error code.","example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","example":"Composition not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"timestamp":{"type":"string","format":"date-time","example":"2026-10-15T10:00:00.000Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"param":{"type":"string","description":"The field that caused the error, when one did.","example":"name","uniqueKey":"error.param","typeLabel":"string"},"docUrl":{"type":"string","description":"Where this error is explained.","uniqueKey":"error.docUrl","typeLabel":"string"},"suggestedAction":{"type":"string","description":"What to do about it.","uniqueKey":"error.suggestedAction","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds to wait before trying again (rate limits). The same number is in the `Retry-After` header.","example":60,"uniqueKey":"error.retryAfter","typeLabel":"integer"},"details":{"type":"object","additionalProperties":true,"description":"More about the error: the fields that failed, a limit that was reached.","uniqueKey":"error.details","typeLabel":"object"},"correlationId":{"type":"string","description":"Quote this when you ask support about the call.","example":"req_123e4567-e89b-12d3-a456-426614174000","uniqueKey":"error.correlationId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"message":"\u003cstring>","error":{"code":"RESOURCE_NOT_FOUND","message":"Composition not found","timestamp":"2026-10-15T10:00:00.000Z","param":"name","docUrl":"\u003cstring>","suggestedAction":"\u003cstring>","retryAfter":60,"details":{},"correlationId":"req_123e4567-e89b-12d3-a456-426614174000"}}}},"exampleType":"generated"}},"exampleType":"generated"},"f59affe8-1bbf-42a6-a7a9-c4cdfc8e8d58":{"description":"The content changed since the version named in `If-Match` (`CONTENT_VERSION_MISMATCH`). The `ETag` header\nis the current version. `error.details.currentVersion` is the version to start again from; for a\ncomposition a team shares `error.details.lastEditedBy` and `error.details.lastEditedAt`\nsay who saved first and when (to a person only).\n","content":{"application/json":{"schema":{"type":"object","required":["success","message","error"],"additionalProperties":true,"properties":{"success":{"type":"boolean","description":"Always `false` on a failure.","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"message":{"type":"string","description":"The same text as `error.message`, for a caller that reads one line.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"object","required":["code","message","timestamp"],"properties":{"code":{"type":"string","description":"Machine-readable error code.","example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","example":"Composition not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"timestamp":{"type":"string","format":"date-time","example":"2026-10-15T10:00:00.000Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"param":{"type":"string","description":"The field that caused the error, when one did.","example":"name","uniqueKey":"error.param","typeLabel":"string"},"docUrl":{"type":"string","description":"Where this error is explained.","uniqueKey":"error.docUrl","typeLabel":"string"},"suggestedAction":{"type":"string","description":"What to do about it.","uniqueKey":"error.suggestedAction","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds to wait before trying again (rate limits). The same number is in the `Retry-After` header.","example":60,"uniqueKey":"error.retryAfter","typeLabel":"integer"},"details":{"type":"object","additionalProperties":true,"description":"More about the error: the fields that failed, a limit that was reached.","uniqueKey":"error.details","typeLabel":"object"},"correlationId":{"type":"string","description":"Quote this when you ask support about the call.","example":"req_123e4567-e89b-12d3-a456-426614174000","uniqueKey":"error.correlationId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"message":"\u003cstring>","error":{"code":"RESOURCE_NOT_FOUND","message":"Composition not found","timestamp":"2026-10-15T10:00:00.000Z","param":"name","docUrl":"\u003cstring>","suggestedAction":"\u003cstring>","retryAfter":60,"details":{},"correlationId":"req_123e4567-e89b-12d3-a456-426614174000"}}}},"exampleType":"generated"}},"exampleType":"generated"},"759d78af-817a-4927-b6d1-5a0034fd2e65":{"description":"The content version cannot be read just now (`CONTENT_VERSION_UNAVAILABLE`). Try again.","content":{"application/json":{"schema":{"type":"object","required":["success","message","error"],"additionalProperties":true,"properties":{"success":{"type":"boolean","description":"Always `false` on a failure.","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"message":{"type":"string","description":"The same text as `error.message`, for a caller that reads one line.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"object","required":["code","message","timestamp"],"properties":{"code":{"type":"string","description":"Machine-readable error code.","example":"RESOURCE_NOT_FOUND","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","example":"Composition not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"timestamp":{"type":"string","format":"date-time","example":"2026-10-15T10:00:00.000Z","isRequired":true,"uniqueKey":"error.timestamp","typeLabel":"string\u003cdate-time>"},"param":{"type":"string","description":"The field that caused the error, when one did.","example":"name","uniqueKey":"error.param","typeLabel":"string"},"docUrl":{"type":"string","description":"Where this error is explained.","uniqueKey":"error.docUrl","typeLabel":"string"},"suggestedAction":{"type":"string","description":"What to do about it.","uniqueKey":"error.suggestedAction","typeLabel":"string"},"retryAfter":{"type":"integer","description":"Seconds to wait before trying again (rate limits). The same number is in the `Retry-After` header.","example":60,"uniqueKey":"error.retryAfter","typeLabel":"integer"},"details":{"type":"object","additionalProperties":true,"description":"More about the error: the fields that failed, a limit that was reached.","uniqueKey":"error.details","typeLabel":"object"},"correlationId":{"type":"string","description":"Quote this when you ask support about the call.","example":"req_123e4567-e89b-12d3-a456-426614174000","uniqueKey":"error.correlationId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"message":"\u003cstring>","error":{"code":"RESOURCE_NOT_FOUND","message":"Composition not found","timestamp":"2026-10-15T10:00:00.000Z","param":"name","docUrl":"\u003cstring>","suggestedAction":"\u003cstring>","retryAfter":60,"details":{},"correlationId":"req_123e4567-e89b-12d3-a456-426614174000"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"1f414d1c-4caa-49b6-ac09-f434709e9389":{"apiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"apiKeyAuth"}}},"servers":{"8cdad7e2-72d7-448d-a767-c0ce9882d766":{"url":"https://api.widgetic.com/v1","description":"Production server","variables":{"env":{"default":"production","description":"Environment"},"apiUrl":{"default":"https://api.widgetic.com","description":"API URL"},"apiVersion":{"default":"/v1","description":"API Version path prefix"}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"apiKeyAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKeyAuth","name":"Authorization"}],"title":"apiKeyAuth"}]},"originalFileLocation":"openapi/widgetic-api-public.json"},"subdomain":"widgetic","siteName":"Widgetic","title":"Update Composition - Widgetic","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-08T14:06:37.335Z","originalFileLocation":"api-reference/compositions/update-composition.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Updates a specific composition. The Idempotency-Key header is required (400 without it). Send the same key when you retry. An editor session (see createManagedUserEditorSession) can send only name, content, design and embedSettings, and only for a composition made for its managed user. A body that names any other field is refused with 403 and EDITOR_SESSION_FIELD_NOT_ALLOWED. Send databaseSchema to add tables to the composition: the tables that are missing are made, and the ones that exist are left as they are. A databaseSchema that cannot be used is refused before anything is saved, with 400 and INVALID_DATABASE_SCHEMA. If the composition is saved but its tables cannot be made just now, the answer is still 200 and meta.warnings says so. When several people edit the same composition. A save that carries content can name the content version it started from in the If-Match header (the contentVersion of the composition you read, or the ETag of an earlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with 412 and CONTENT_VERSION_MISMATCH, and error.details.currentVersion is the version to start again from. For a composition a team shares, error.details also says who got there first: lastEditedBy ({ id, name }, or null when nobody can be named) and lastEditedAt. An editor session, or a call made for one managed user, is told the version only. A save without If-Match still goes through, and the other person\u0026#x27;s change is replaced, as it always was.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Widgetic\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update Composition - Widgetic\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates a specific composition. The Idempotency-Key header is required (400 without it). Send the same key when you retry. An editor session (see createManagedUserEditorSession) can send only name, content, design and embedSettings, and only for a composition made for its managed user. A body that names any other field is refused with 403 and EDITOR_SESSION_FIELD_NOT_ALLOWED. Send databaseSchema to add tables to the composition: the tables that are missing are made, and the ones that exist are left as they are. A databaseSchema that cannot be used is refused before anything is saved, with 400 and INVALID_DATABASE_SCHEMA. If the composition is saved but its tables cannot be made just now, the answer is still 200 and meta.warnings says so. When several people edit the same composition. A save that carries content can name the content version it started from in the If-Match header (the contentVersion of the composition you read, or the ETag of an earlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with 412 and CONTENT_VERSION_MISMATCH, and error.details.currentVersion is the version to start again from. For a composition a team shares, error.details also says who got there first: lastEditedBy ({ id, name }, or null when nobody can be named) and lastEditedAt. An editor session, or a call made for one managed user, is told the version only. A save without If-Match still goes through, and the other person\u0026#x27;s change is replaced, as it always was.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Widgetic\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://widgetic.com/api-reference/compositions/update-composition\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://widgetic.mintlify.site/_mintlify/api/og/v2?division=Compositions\u0026amp;title=Update+Composition\u0026amp;description=Updates+a+specific+composition.%0A%0AThe+%60Idempotency-Key%60+header+is+required+%28%60400%60+without+it%29.+Send+the+same+key+when+you+retry.%0A%0AAn+editor+session+%28see+%60createM\u0026amp;theme=7fb55fb4aca22bb80111c88a\u0026amp;signature=8d4f63b17623e9e7883fc53b840ec832266d154117bb1bedd3a395059d88c6a5\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update Composition - Widgetic\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates a specific composition. The Idempotency-Key header is required (400 without it). Send the same key when you retry. An editor session (see createManagedUserEditorSession) can send only name, content, design and embedSettings, and only for a composition made for its managed user. A body that names any other field is refused with 403 and EDITOR_SESSION_FIELD_NOT_ALLOWED. Send databaseSchema to add tables to the composition: the tables that are missing are made, and the ones that exist are left as they are. A databaseSchema that cannot be used is refused before anything is saved, with 400 and INVALID_DATABASE_SCHEMA. If the composition is saved but its tables cannot be made just now, the answer is still 200 and meta.warnings says so. When several people edit the same composition. A save that carries content can name the content version it started from in the If-Match header (the contentVersion of the composition you read, or the ETag of an earlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with 412 and CONTENT_VERSION_MISMATCH, and error.details.currentVersion is the version to start again from. For a composition a team shares, error.details also says who got there first: lastEditedBy ({ id, name }, or null when nobody can be named) and lastEditedAt. An editor session, or a call made for one managed user, is told the version only. A save without If-Match still goes through, and the other person\u0026#x27;s change is replaced, as it always was.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://widgetic.mintlify.site/_mintlify/api/og/v2?division=Compositions\u0026amp;title=Update+Composition\u0026amp;description=Updates+a+specific+composition.%0A%0AThe+%60Idempotency-Key%60+header+is+required+%28%60400%60+without+it%29.+Send+the+same+key+when+you+retry.%0A%0AAn+editor+session+%28see+%60createM\u0026amp;theme=7fb55fb4aca22bb80111c88a\u0026amp;signature=8d4f63b17623e9e7883fc53b840ec832266d154117bb1bedd3a395059d88c6a5\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/widgetic/U_OgbihBw7xJOURr/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Widgetic\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#324E30\">\u003clink data-mint-head rel=\"canonical\" href=\"https://widgetic.com/api-reference/compositions/update-composition\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/compositions/update-composition.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://widgetic.com/#organization\",\"name\":\"Widgetic\",\"url\":\"https://widgetic.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/widgetic/Od-pD6ChvIzhY_fR/brand/logo-light.svg?fit=max\u0026auto=format\u0026n=Od-pD6ChvIzhY_fR\u0026q=85\u0026s=c80ce649cc12d9f206a4ea5d3d2d9d31\"}},{\"@type\":\"WebSite\",\"@id\":\"https://widgetic.com#website\",\"name\":\"Widgetic\",\"url\":\"https://widgetic.com\",\"publisher\":{\"@id\":\"https://widgetic.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://widgetic.com/api-reference/compositions/update-composition#webpage\",\"url\":\"https://widgetic.com/api-reference/compositions/update-composition\",\"name\":\"Update Composition\",\"description\":\"Updates a specific composition. The Idempotency-Key header is required (400 without it). Send the same key when you retry. An editor session (see createManagedUserEditorSession) can send only name, content, design and embedSettings, and only for a composition made for its managed user. A body that names any other field is refused with 403 and EDITOR_SESSION_FIELD_NOT_ALLOWED. Send databaseSchema to add tables to the composition: the tables that are missing are made, and the ones that exist are left as they are. A databaseSchema that cannot be used is refused before anything is saved, with 400 and INVALID_DATABASE_SCHEMA. If the composition is saved but its tables cannot be made just now, the answer is still 200 and meta.warnings says so. When several people edit the same composition. A save that carries content can name the content version it started from in the If-Match header (the contentVersion of the composition you read, or the ETag of an earlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with 412 and CONTENT_VERSION_MISMATCH, and error.details.currentVersion is the version to start again from. For a composition a team shares, error.details also says who got there first: lastEditedBy ({ id, name }, or null when nobody can be named) and lastEditedAt. An editor session, or a call made for one managed user, is told the version only. A save without If-Match still goes through, and the other person's change is replaced, as it always was.\",\"dateModified\":\"2026-11-08T14:06:37.335Z\",\"isPartOf\":{\"@id\":\"https://widgetic.com#website\"},\"breadcrumb\":{\"@id\":\"https://widgetic.com/api-reference/compositions/update-composition#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://widgetic.com/api-reference/compositions/update-composition#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Compositions\",\"item\":\"https://widgetic.com/api-reference/compositions/get-all-compositions\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update Composition\",\"item\":\"https://widgetic.com/api-reference/compositions/update-composition\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://widgetic.com/api-reference/compositions/update-composition#apireference\",\"headline\":\"Update Composition\",\"name\":\"Update Composition\",\"description\":\"Updates a specific composition. The Idempotency-Key header is required (400 without it). Send the same key when you retry. An editor session (see createManagedUserEditorSession) can send only name, content, design and embedSettings, and only for a composition made for its managed user. A body that names any other field is refused with 403 and EDITOR_SESSION_FIELD_NOT_ALLOWED. Send databaseSchema to add tables to the composition: the tables that are missing are made, and the ones that exist are left as they are. A databaseSchema that cannot be used is refused before anything is saved, with 400 and INVALID_DATABASE_SCHEMA. If the composition is saved but its tables cannot be made just now, the answer is still 200 and meta.warnings says so. When several people edit the same composition. A save that carries content can name the content version it started from in the If-Match header (the contentVersion of the composition you read, or the ETag of an earlier answer). If somebody saved the content since, nothing is overwritten: the save is refused with 412 and CONTENT_VERSION_MISMATCH, and error.details.currentVersion is the version to start again from. For a composition a team shares, error.details also says who got there first: lastEditedBy ({ id, name }, or null when nobody can be named) and lastEditedAt. An editor session, or a call made for one managed user, is told the version only. A save without If-Match still goes through, and the other person's change is replaced, as it always was.\",\"url\":\"https://widgetic.com/api-reference/compositions/update-composition\",\"mainEntityOfPage\":{\"@id\":\"https://widgetic.com/api-reference/compositions/update-composition#webpage\"},\"dateModified\":\"2026-11-08T14:06:37.335Z\",\"publisher\":{\"@id\":\"https://widgetic.com/#organization\"},\"isPartOf\":{\"@id\":\"https://widgetic.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Widgetic\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Widgetic\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/compositions/update-composition.md","siteName":"Widgetic","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/docs/introduction"}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"API Reference Introduction","href":"/api-reference/introduction"},{"title":"Pagination","href":"/api-reference/pagination"},{"title":"Usage Limits","href":"/api-reference/usage-limits"},{"title":"Errors","href":"/api-reference/errors"}]},{"group":"Public Embed","pages":[{"title":"Append a visitor entry through the gateway","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /embed/compositions/{compositionId}/entries/{table}","href":"/api-reference/public-embed/append-a-visitor-entry-through-the-gateway"},{"title":"Read the published Workflow of an embed","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /embed/workflows/{workflowId}","href":"/api-reference/public-embed/read-the-published-workflow-of-an-embed"},{"title":"Read one published version of a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /embed/workflows/{workflowId}/versions/{versionId}","href":"/api-reference/public-embed/read-one-published-version-of-a-workflow"},{"title":"Report what visitors did in a Workflow, as counts","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /embed/workflows/{workflowId}/events","href":"/api-reference/public-embed/report-what-visitors-did-in-a-workflow-as-counts"},{"title":"Show a published Workflow in a page of its own","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /embed/workflows/{workflowId}/frame","href":"/api-reference/public-embed/show-a-published-workflow-in-a-page-of-its-own"},{"title":"Resolve a composition UUID to a published widget URL","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /embed/compositions/{compositionId}","href":"/api-reference/public-embed/resolve-a-composition-uuid-to-a-published-widget-url"},{"title":"Embed a published composition with its saved values","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /embed/compositions/{compositionId}/frame","href":"/api-reference/public-embed/embed-a-published-composition-with-its-saved-values"},{"title":"Batch-check whether compositions are currently served for embed","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /embed/compositions/status","href":"/api-reference/public-embed/batch-check-whether-compositions-are-currently-served-for-embed"},{"title":"Call a gateway operation of an adapter a published widget uses","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /embed/compositions/{compositionId}/adapters/{adapterId}/{operation}","href":"/api-reference/public-embed/call-a-gateway-operation-of-an-adapter-a-published-widget-uses"},{"title":"Send the file a visitor chose through the upload adapter of a published widget","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /embed/compositions/{compositionId}/adapters/upload/files/{ticket}","href":"/api-reference/public-embed/send-the-file-a-visitor-chose-through-the-upload-adapter-of-a-published-widget"}]},{"group":"Workflows","pages":[{"title":"List the compositions a workflow can show, and what each can do","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /workspaces/{workspaceId}/workflows/composition-options","href":"/api-reference/workflows/list-the-compositions-a-workflow-can-show-and-what-each-can-do"},{"title":"List the starting points for a new Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /workspaces/{workspaceId}/workflows/presets","href":"/api-reference/workflows/list-the-starting-points-for-a-new-workflow"},{"title":"Start a Workflow from a starting point","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/from-preset","href":"/api-reference/workflows/start-a-workflow-from-a-starting-point"},{"title":"List the Workflows of a Workspace","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /workspaces/{workspaceId}/workflows","href":"/api-reference/workflows/list-the-workflows-of-a-workspace"},{"title":"Create a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows","href":"/api-reference/workflows/create-a-workflow"},{"title":"Get a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /workspaces/{workspaceId}/workflows/{workflowId}","href":"/api-reference/workflows/get-a-workflow"},{"title":"Save the Draft of a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /workspaces/{workspaceId}/workflows/{workflowId}","href":"/api-reference/workflows/save-the-draft-of-a-workflow"},{"title":"Delete a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /workspaces/{workspaceId}/workflows/{workflowId}","href":"/api-reference/workflows/delete-a-workflow"},{"title":"Duplicate a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/{workflowId}/duplicate","href":"/api-reference/workflows/duplicate-a-workflow"},{"title":"Publish the Draft of a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/{workflowId}/publish","href":"/api-reference/workflows/publish-the-draft-of-a-workflow"},{"title":"Discard the Unpublished Changes of a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/{workflowId}/discard","href":"/api-reference/workflows/discard-the-unpublished-changes-of-a-workflow"},{"title":"List the Published Versions of a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /workspaces/{workspaceId}/workflows/{workflowId}/versions","href":"/api-reference/workflows/list-the-published-versions-of-a-workflow"},{"title":"Get a Published Version of a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /workspaces/{workspaceId}/workflows/{workflowId}/versions/{versionId}","href":"/api-reference/workflows/get-a-published-version-of-a-workflow"},{"title":"Restore a Version of a Workflow into the Draft","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/{workflowId}/versions/{versionId}/restore","href":"/api-reference/workflows/restore-a-version-of-a-workflow-into-the-draft"},{"title":"Pause a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/{workflowId}/pause","href":"/api-reference/workflows/pause-a-workflow"},{"title":"Resume a Paused Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/{workflowId}/resume","href":"/api-reference/workflows/resume-a-paused-workflow"},{"title":"Archive a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/{workflowId}/archive","href":"/api-reference/workflows/archive-a-workflow"},{"title":"Unarchive a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /workspaces/{workspaceId}/workflows/{workflowId}/unarchive","href":"/api-reference/workflows/unarchive-a-workflow"},{"title":"Get what Visitors Did in a Workflow","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /workspaces/{workspaceId}/workflows/{workflowId}/stats","href":"/api-reference/workflows/get-what-visitors-did-in-a-workflow"}]},{"group":"Partners","pages":[{"title":"List the workflows a partner offers as places to start","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/workflow-presets","href":"/api-reference/partners/list-the-workflows-a-partner-offers-as-places-to-start"},{"title":"Offer a workflow as a place to start, or replace what a key offers","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /partners/{partnerId}/workflow-presets/{key}","href":"/api-reference/partners/offer-a-workflow-as-a-place-to-start-or-replace-what-a-key-offers"},{"title":"Stop offering a workflow as a place to start","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /partners/{partnerId}/workflow-presets/{key}","href":"/api-reference/partners/stop-offering-a-workflow-as-a-place-to-start"},{"title":"Find the partner you administer","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/mine","href":"/api-reference/partners/find-the-partner-you-administer"},{"title":"Get partner credit balance","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/credits/balance","href":"/api-reference/partners/get-partner-credit-balance"},{"title":"Get partner credit transaction history","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/credits/transactions","href":"/api-reference/partners/get-partner-credit-transaction-history"},{"title":"Buy extra credits for a partner","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /partners/{partnerId}/credits/extra-invoice","href":"/api-reference/partners/buy-extra-credits-for-a-partner"},{"title":"Get comprehensive partner billing overview","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/billing-overview","href":"/api-reference/partners/get-comprehensive-partner-billing-overview"},{"title":"Get a partner's contract","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/contract","href":"/api-reference/partners/get-a-partners-contract"},{"title":"Get where a partner's uploaded files are stored","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/storage","href":"/api-reference/partners/get-where-a-partners-uploaded-files-are-stored"},{"title":"Set where a partner's uploaded files are stored","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /partners/{partnerId}/storage","href":"/api-reference/partners/set-where-a-partners-uploaded-files-are-stored"},{"title":"Stop storing a partner's uploaded files in its own bucket","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /partners/{partnerId}/storage","href":"/api-reference/partners/stop-storing-a-partners-uploaded-files-in-its-own-bucket"},{"title":"Check that a partner's storage destination still works","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /partners/{partnerId}/storage/verify","href":"/api-reference/partners/check-that-a-partners-storage-destination-still-works"},{"title":"List the widgets a partner offers as presets","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/presets","href":"/api-reference/partners/list-the-widgets-a-partner-offers-as-presets"},{"title":"Make a widget a preset, or replace a preset","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /partners/{partnerId}/presets/{key}","href":"/api-reference/partners/make-a-widget-a-preset-or-replace-a-preset"},{"title":"Take a widget off the partner's presets","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /partners/{partnerId}/presets/{key}","href":"/api-reference/partners/take-a-widget-off-the-partners-presets"},{"title":"Read partner-wide design defaults","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/design-defaults","href":"/api-reference/partners/read-partner-wide-design-defaults"},{"title":"Set or clear partner-wide design defaults","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /partners/{partnerId}/design-defaults","href":"/api-reference/partners/set-or-clear-partner-wide-design-defaults"},{"title":"What a partner's customers store","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/storage/usage","href":"/api-reference/partners/what-a-partners-customers-store"},{"title":"What was done with a partner's published widgets","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/analytics/summary","href":"/api-reference/partners/what-was-done-with-a-partners-published-widgets"},{"title":"What each managed user's widgets did","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/analytics/managed-users","href":"/api-reference/partners/what-each-managed-users-widgets-did"},{"title":"Which widgets were viewed the most","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/analytics/top-widgets","href":"/api-reference/partners/which-widgets-were-viewed-the-most"},{"title":"What was done with a partner's widgets, day by day","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/analytics/timeline","href":"/api-reference/partners/what-was-done-with-a-partners-widgets-day-by-day"},{"title":"What your partner account was told","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/notifications","href":"/api-reference/partners/what-your-partner-account-was-told"},{"title":"How your notifications reached you","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/notifications/deliveries","href":"/api-reference/partners/how-your-notifications-reached-you"},{"title":"Where your notifications go","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/notifications/settings","href":"/api-reference/partners/where-your-notifications-go"},{"title":"Choose where your notifications go","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /partners/{partnerId}/notifications/settings","href":"/api-reference/partners/choose-where-your-notifications-go"},{"title":"Make a new secret for your webhook","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /partners/{partnerId}/notifications/webhook-secret","href":"/api-reference/partners/make-a-new-secret-for-your-webhook"},{"title":"Send a webhook delivery again","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /partners/{partnerId}/notifications/deliveries/{deliveryId}/replay","href":"/api-reference/partners/send-a-webhook-delivery-again"},{"title":"Send a test event to your webhook","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /partners/{partnerId}/notifications/test-event","href":"/api-reference/partners/send-a-test-event-to-your-webhook"},{"title":"See how the context of your embeds is signed","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/entry-context-signing","href":"/api-reference/partners/see-how-the-context-of-your-embeds-is-signed"},{"title":"Require a signed context, or stop requiring it","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /partners/{partnerId}/entry-context-signing","href":"/api-reference/partners/require-a-signed-context-or-stop-requiring-it"},{"title":"Make a secret to sign the context of your embeds","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /partners/{partnerId}/entry-context-signing/secret","href":"/api-reference/partners/make-a-secret-to-sign-the-context-of-your-embeds"},{"title":"See the Neon database a partner keeps the data of its compositions in","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/data-database","href":"/api-reference/partners/see-the-neon-database-a-partner-keeps-the-data-of-its-compositions-in"},{"title":"Keep the data of a partner's compositions in a Neon database of its own","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /partners/{partnerId}/data-database","href":"/api-reference/partners/keep-the-data-of-a-partners-compositions-in-a-neon-database-of-its-own"},{"title":"Stop keeping the data of a partner's compositions in its own database","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /partners/{partnerId}/data-database","href":"/api-reference/partners/stop-keeping-the-data-of-a-partners-compositions-in-its-own-database"},{"title":"Check that a partner's own database still works","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /partners/{partnerId}/data-database/verify","href":"/api-reference/partners/check-that-a-partners-own-database-still-works"},{"title":"See which adapter keys a partner has connected","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /partners/{partnerId}/adapter-connections","href":"/api-reference/partners/see-which-adapter-keys-a-partner-has-connected"},{"title":"Connect an adapter key to a partner","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /partners/{partnerId}/adapter-connections/{adapterId}/{credentialKey}","href":"/api-reference/partners/connect-an-adapter-key-to-a-partner"},{"title":"Remove an adapter key from a partner","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /partners/{partnerId}/adapter-connections/{adapterId}/{credentialKey}","href":"/api-reference/partners/remove-an-adapter-key-from-a-partner"},{"title":"Confirm a partner's adapter address with the code that was emailed to it","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /partners/{partnerId}/adapter-connections/{adapterId}/{credentialKey}/confirm","href":"/api-reference/partners/confirm-a-partners-adapter-address-with-the-code-that-was-emailed-to-it"}]},{"group":"Widgets","pages":[{"title":"List Widgets","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /widgets","href":"/api-reference/widgets/list-widgets"},{"title":"Create Widget","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /widgets","href":"/api-reference/widgets/create-widget"},{"title":"Create a composition for a widget in one call","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /widgets/{id}/composition","href":"/api-reference/widgets/create-a-composition-for-a-widget-in-one-call"},{"title":"Get Widgets Batch","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /widgets/batch","href":"/api-reference/widgets/get-widgets-batch"}]},{"group":"Users","pages":[{"title":"List the websites allowed to show your widgets","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /users/{id}/workspace/domains","href":"/api-reference/users/list-the-websites-allowed-to-show-your-widgets"},{"title":"Allow a website to show your widgets","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /users/{id}/workspace/domains","href":"/api-reference/users/allow-a-website-to-show-your-widgets"},{"title":"Change a website on your list","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /users/{id}/workspace/domains/{domainId}","href":"/api-reference/users/change-a-website-on-your-list"},{"title":"Stop allowing a website to show your widgets","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /users/{id}/workspace/domains/{domainId}","href":"/api-reference/users/stop-allowing-a-website-to-show-your-widgets"},{"title":"List the API keys of an account","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /users/{id}/keys","href":"/api-reference/users/list-the-api-keys-of-an-account"},{"title":"Create an API key","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /users/{id}/keys","href":"/api-reference/users/create-an-api-key"},{"title":"Rename an API key, or switch it off or on","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /users/{id}/keys/{keyId}","href":"/api-reference/users/rename-an-api-key-or-switch-it-off-or-on"},{"title":"Delete an API key","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /users/{id}/keys/{keyId}","href":"/api-reference/users/delete-an-api-key"},{"title":"Read what an API key was used for","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /users/{id}/api-keys/{keyId}/logs","href":"/api-reference/users/read-what-an-api-key-was-used-for"},{"title":"See which adapter keys an account has connected","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /users/{userId}/adapter-connections","href":"/api-reference/users/see-which-adapter-keys-an-account-has-connected"},{"title":"Connect an adapter key to an account","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /users/{userId}/adapter-connections/{adapterId}/{credentialKey}","href":"/api-reference/users/connect-an-adapter-key-to-an-account"},{"title":"Remove an adapter key from an account","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /users/{userId}/adapter-connections/{adapterId}/{credentialKey}","href":"/api-reference/users/remove-an-adapter-key-from-an-account"},{"title":"Confirm an adapter address with the code that was emailed to it","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /users/{userId}/adapter-connections/{adapterId}/{credentialKey}/confirm","href":"/api-reference/users/confirm-an-adapter-address-with-the-code-that-was-emailed-to-it"}]},{"group":"Uploads","pages":[{"title":"List the account's uploads","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /uploads","href":"/api-reference/uploads/list-the-accounts-uploads"},{"title":"Upload a file","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /uploads","href":"/api-reference/uploads/upload-a-file"},{"title":"Upload size limits and accepted file types","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /uploads/limits","href":"/api-reference/uploads/upload-size-limits-and-accepted-file-types"},{"title":"Get an upload by id","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /uploads/{id}","href":"/api-reference/uploads/get-an-upload-by-id"},{"title":"Delete an upload","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /uploads/{id}","href":"/api-reference/uploads/delete-an-upload"}]},{"group":"Tokens","pages":[{"title":"Validate current authentication token","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /tokens/validate","href":"/api-reference/tokens/validate-current-authentication-token"}]},{"group":"Operations","pages":[{"title":"Get operation status","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /operations/{id}","href":"/api-reference/operations/get-operation-status"}]},{"group":"Managed Users","pages":[{"title":"Get Managed Users","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /managed-users","href":"/api-reference/managed-users/get-managed-users"},{"title":"Create Managed User","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /managed-users","href":"/api-reference/managed-users/create-managed-user"},{"title":"Get Managed Users By Manager","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /users/{managerId}/managed-users","href":"/api-reference/managed-users/get-managed-users-by-manager"},{"title":"Get Managed User By ID","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /managed-users/{id}","href":"/api-reference/managed-users/get-managed-user-by-id"},{"title":"Update Managed User","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /managed-users/{id}","href":"/api-reference/managed-users/update-managed-user"},{"title":"Delete Managed User","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /managed-users/{id}","href":"/api-reference/managed-users/delete-managed-user"},{"title":"Create an editor session for a managed user","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /managed-users/{id}/editor-sessions","href":"/api-reference/managed-users/create-an-editor-session-for-a-managed-user"},{"title":"End every editor session of a managed user","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /managed-users/{id}/editor-sessions","href":"/api-reference/managed-users/end-every-editor-session-of-a-managed-user"},{"title":"End one editor session of a managed user","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /managed-users/{id}/editor-sessions/{sessionId}","href":"/api-reference/managed-users/end-one-editor-session-of-a-managed-user"},{"title":"What a managed user's editor sessions spent","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /managed-users/{id}/usage","href":"/api-reference/managed-users/what-a-managed-users-editor-sessions-spent"},{"title":"Give a managed user a copy of one of your presets","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /managed-users/{id}/presets/{key}/copy","href":"/api-reference/managed-users/give-a-managed-user-a-copy-of-one-of-your-presets"},{"title":"Create a composition from one of your presets in one call","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /managed-users/{id}/presets/{key}/composition","href":"/api-reference/managed-users/create-a-composition-from-one-of-your-presets-in-one-call"},{"title":"Read monthly credit cap and usage for one managed user","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /managed-users/{id}/limits","href":"/api-reference/managed-users/read-monthly-credit-cap-and-usage-for-one-managed-user"},{"title":"Set or clear the monthly credit cap for one managed user","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /managed-users/{id}/limits","href":"/api-reference/managed-users/set-or-clear-the-monthly-credit-cap-for-one-managed-user"},{"title":"Storage used by one managed user's uploads","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /managed-users/{id}/storage-usage","href":"/api-reference/managed-users/storage-used-by-one-managed-users-uploads"},{"title":"List entries across a managed user's compositions","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /managed-users/{id}/entries","href":"/api-reference/managed-users/list-entries-across-a-managed-users-compositions"},{"title":"Read design defaults for one managed user","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /managed-users/{id}/design-defaults","href":"/api-reference/managed-users/read-design-defaults-for-one-managed-user"},{"title":"Set or clear design defaults for one managed user","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /managed-users/{id}/design-defaults","href":"/api-reference/managed-users/set-or-clear-design-defaults-for-one-managed-user"}]},{"group":"Invoices","pages":[{"title":"List a partner's invoices","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /invoices/partner/{partnerId}","href":"/api-reference/invoices/list-a-partners-invoices"}]},{"group":"Entitlements","pages":[{"title":"Get partner entitlements","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /entitlements/partners/{partnerId}","href":"/api-reference/entitlements/get-partner-entitlements"},{"title":"Get managed user entitlements","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /entitlements/managed-users/{managedUserId}","href":"/api-reference/entitlements/get-managed-user-entitlements"}]},{"group":"Credits","pages":[{"title":"Get an account's credit balance","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /credits/user/{userId}/balance","href":"/api-reference/credits/get-an-accounts-credit-balance"},{"title":"List an account's credit ledger","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /credits/user/{userId}/transactions","href":"/api-reference/credits/list-an-accounts-credit-ledger"}]},{"group":"Compositions","pages":[{"title":"Get All Compositions","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions","href":"/api-reference/compositions/get-all-compositions"},{"title":"Create Composition","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /compositions","href":"/api-reference/compositions/create-composition"},{"title":"Duplicate Composition","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /compositions/{id}/duplicate","href":"/api-reference/compositions/duplicate-composition"},{"title":"Get Composition Versions","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/versions","href":"/api-reference/compositions/get-composition-versions"},{"title":"Update Composition Status","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /compositions/{id}/status","href":"/api-reference/compositions/update-composition-status"},{"title":"Get Composition","description":"Retrieves a specific composition by its ID.\n\nThe answer carries `direct`, which says whether the widget the composition is made from is drawn straight\ninto your page (`true`) or inside a frame (`false`), or `null` while the widget has no published version.\nRead it before you go live: a widget drawn without a frame writes its entries from your own page, so the\npublic entry route looks at the website that page is on. While the composition's allowed list is empty (you\nhave not restricted the allowed websites), every website may write; once you list websites, only those may,\nbesides Widgetic's own sites, the visitor's own machine and your own platform. A widget in a frame writes from\nWidgetic's own frame and is accepted whatever the list says. The public JSON of the composition stays open to\nevery website.\n\nFor a composition a team shares (one filed under a project of an organization, or made in a Shopify store's\nworkspace) the answer also carries `lastEditedBy` and `lastEditedAt`: who made the latest change and when, so\nthat a teammate who opens it can be told \"Anna changed this at 14:32\". A composition in a personal project\nleaves both out, and so does an answer given to an editor session or to a call made for one managed user: only\na person is told who a teammate is.\n","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}","href":"/api-reference/compositions/get-composition"},{"title":"Update Composition","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /compositions/{id}","href":"/api-reference/compositions/update-composition"},{"title":"Delete Composition","description":"Deletes a specific composition, and the data it keeps (the tables it declared and what visitors left in them).","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /compositions/{id}","href":"/api-reference/compositions/delete-composition"},{"title":"Get Composition Design","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/design","href":"/api-reference/compositions/get-composition-design"},{"title":"Get Current Content","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/content","href":"/api-reference/compositions/get-current-content"},{"title":"Set Dynamic Content","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /compositions/{id}/content","href":"/api-reference/compositions/set-dynamic-content"},{"title":"Get Composition Embed Settings","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/embed-settings","href":"/api-reference/compositions/get-composition-embed-settings"},{"title":"Get Composition Preview","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/preview","href":"/api-reference/compositions/get-composition-preview"},{"title":"Get All Records From Composition Database Table","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/database/{table}","href":"/api-reference/compositions/get-all-records-from-composition-database-table"},{"title":"Create Record In Composition Database","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /compositions/{id}/database/{table}","href":"/api-reference/compositions/create-record-in-composition-database"},{"title":"Get Record From Composition Database","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/database/{table}/{recordId}","href":"/api-reference/compositions/get-record-from-composition-database"},{"title":"Update Record In Composition Database","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /compositions/{id}/database/{table}/{recordId}","href":"/api-reference/compositions/update-record-in-composition-database"},{"title":"Delete Record From Composition Database","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /compositions/{id}/database/{table}/{recordId}","href":"/api-reference/compositions/delete-record-from-composition-database"},{"title":"Describe What a Composition Keeps","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/entries","href":"/api-reference/compositions/describe-what-a-composition-keeps"},{"title":"Read the Entries of a Composition's Table","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/entries/{table}","href":"/api-reference/compositions/read-the-entries-of-a-compositions-table"},{"title":"Add a content list item","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /compositions/{id}/content/{list}/items","href":"/api-reference/compositions/add-a-content-list-item"},{"title":"Delete a content list item","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /compositions/{id}/content/{list}/items/{itemId}","href":"/api-reference/compositions/delete-a-content-list-item"},{"title":"Update a content list item","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json patch /compositions/{id}/content/{list}/items/{itemId}","href":"/api-reference/compositions/update-a-content-list-item"},{"title":"Read the composition data source binding","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/data-source","href":"/api-reference/compositions/read-the-composition-data-source-binding"},{"title":"Bind a public JSON data source for embed refresh","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /compositions/{id}/data-source","href":"/api-reference/compositions/bind-a-public-json-data-source-for-embed-refresh"},{"title":"Remove the composition data source binding","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /compositions/{id}/data-source","href":"/api-reference/compositions/remove-the-composition-data-source-binding"},{"title":"Validate Content","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /compositions/{id}/content/validate","href":"/api-reference/compositions/validate-content"},{"title":"Get Content Schema","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/schema/content","href":"/api-reference/compositions/get-content-schema"},{"title":"Get Design Schema","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/schema/design","href":"/api-reference/compositions/get-design-schema"},{"title":"Get Embed Schema","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/schema/embed","href":"/api-reference/compositions/get-embed-schema"},{"title":"Check Composition Access","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/access","href":"/api-reference/compositions/check-composition-access"},{"title":"Get Compositions Batch","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /compositions/batch","href":"/api-reference/compositions/get-compositions-batch"},{"title":"List composition entry items with paging and filters","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/entries/{table}/items","href":"/api-reference/compositions/list-composition-entry-items-with-paging-and-filters"},{"title":"Delete composition entry items by id or host context","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /compositions/{id}/entries/{table}/items","href":"/api-reference/compositions/delete-composition-entry-items-by-id-or-host-context"},{"title":"Export composition entry items","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/entries/{table}/export","href":"/api-reference/compositions/export-composition-entry-items"},{"title":"See the documents a widget's AI answers from","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /compositions/{id}/adapters/ai-answers/knowledge","href":"/api-reference/compositions/see-the-documents-a-widgets-ai-answers-from"},{"title":"Add a document for a widget's AI to answer from","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /compositions/{id}/adapters/ai-answers/knowledge/documents","href":"/api-reference/compositions/add-a-document-for-a-widgets-ai-to-answer-from"},{"title":"Add a text file or a picture of a document (a PDF once PDFs are read) for a widget's AI to answer from","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /compositions/{id}/adapters/ai-answers/knowledge/documents/file","href":"/api-reference/compositions/add-a-text-file-or-a-picture-of-a-document-a-pdf-once-pdfs-are-read-for-a-widgets-ai-to-answer-from"},{"title":"Remove a document from a widget's knowledge base","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /compositions/{id}/adapters/ai-answers/knowledge/documents/{documentId}","href":"/api-reference/compositions/remove-a-document-from-a-widgets-knowledge-base"}]},{"group":"Canvases","pages":[{"title":"Get All Canvases","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /canvases","href":"/api-reference/canvases/get-all-canvases"},{"title":"Create Canvas","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /canvases","href":"/api-reference/canvases/create-canvas"},{"title":"Get Canvas","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /canvases/{id}","href":"/api-reference/canvases/get-canvas"},{"title":"Update Canvas","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /canvases/{id}","href":"/api-reference/canvases/update-canvas"},{"title":"Delete Canvas","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /canvases/{id}","href":"/api-reference/canvases/delete-canvas"}]},{"group":"Brand Kit","pages":[{"title":"The Brand Kit of the current workspace","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json get /brand-kit","href":"/api-reference/brand-kit/the-brand-kit-of-the-current-workspace"},{"title":"Save Brand Kit tokens","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json put /brand-kit","href":"/api-reference/brand-kit/save-brand-kit-tokens"},{"title":"Reset the Brand Kit to the default","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /brand-kit","href":"/api-reference/brand-kit/reset-the-brand-kit-to-the-default"},{"title":"Change part of the Brand Kit","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json patch /brand-kit","href":"/api-reference/brand-kit/change-part-of-the-brand-kit"},{"title":"Upload a font file to the Brand Kit","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /brand-kit/fonts","href":"/api-reference/brand-kit/upload-a-font-file-to-the-brand-kit"},{"title":"Add a named SVG icon to the Brand Kit","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json post /brand-kit/icons","href":"/api-reference/brand-kit/add-a-named-svg-icon-to-the-brand-kit"},{"title":"Remove a font or icon from the Brand Kit","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json delete /brand-kit/assets/{assetId}","href":"/api-reference/brand-kit/remove-a-font-or-icon-from-the-brand-kit"},{"title":"Rename an icon or relabel a font variant","deprecated":null,"version":null,"openapi":"/openapi/widgetic-api-public.json patch /brand-kit/assets/{assetId}","href":"/api-reference/brand-kit/rename-an-icon-or-relabel-a-font-variant"}]}]},{"tab":"Resources","pages":[{"title":"Resources","href":"/resources/examples"}]}]},"basePath":"","title":"Update Composition - Widgetic","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}