{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 402,
"title": "You need to upgrade your plan to access this feature",
"type": "payment_required"
}
{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 403,
"title": "You don't have the permissions to perform this action",
"type": "forbidden"
}
Changes published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects//publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/ for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects//publish. To take the app offline, use DELETE /v1/projects//publish.
{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 402,
"title": "You need to upgrade your plan to access this feature",
"type": "payment_required"
}
{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 403,
"title": "You don't have the permissions to perform this action",
"type": "forbidden"
}
Who can open the published app; project reads report this value as publish_audience. A custom audience can include existing grants managed in the UI. Omit to leave the audience unchanged, including while the app is unpublished.
Groups who can open the app; allowed only when the supplied or current audience is custom. Providing a list replaces all group and user grants and removes workspace-wide access; an empty list removes those grants. Existing organization access and email invitations managed in the UI are preserved. Omit to preserve saved targets across audience changes. Targets are inactive outside custom mode. Null is not accepted.
Saved groups and users, including while the app is offline or the audience is not custom. These targets grant access only in custom mode. Users granted through invitations or organization membership are included; organization-wide access and pending email invitations are not listed. This read projection is not a writable target list; only groups can be supplied in audience_targets.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Lovable Documentation","description":"Lovable Documentation — Build full-stack websites with AI using natural language. Explore Lovable features, integrations, tutorials, and best practices.","colors":{"primary":"#0095FF","light":"#1AA3FF","dark":"#0084E6"},"logo":{"light":"https://mintcdn.com/lovable-f9060f1e/lZT1ihBcprll2Agr/assets/logo/logoblack.svg?fit=max\u0026auto=format\u0026n=lZT1ihBcprll2Agr\u0026q=85\u0026s=8d9eafaf19f94e27f0d13ac160d54f54","dark":"https://mintcdn.com/lovable-f9060f1e/lZT1ihBcprll2Agr/assets/logo/logowhite.svg?fit=max\u0026auto=format\u0026n=lZT1ihBcprll2Agr\u0026q=85\u0026s=fed1a7a9be6502f49d06a55cec77288c","href":"https://lovable.dev/"},"favicon":"https://mintcdn.com/lovable-f9060f1e/b_1_IEcMDh-0NUDG/assets/logo/favicon.svg?fit=max\u0026auto=format\u0026n=b_1_IEcMDh-0NUDG\u0026q=85\u0026s=a439abba3defb47beabd3f6e7d318cb5","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl"],"prefill":true,"autogenerate":true},"url":"full"},"navbar":{"links":[{"icon":"message","href":"https://lovable.dev/support","label":"Support"},{"icon":"blog","href":"https://lovable.dev/blog","label":"Blog"}],"primary":{"type":"button","label":"Start building for free","href":"https://lovable.dev/signup?utm_source=lovable_docs\u0026utm_medium=navigation"}},"footer":{"socials":{"x":"https://x.com/Lovable","github":"https://github.com/lovablelabs","linkedin":"https://linkedin.com/company/lovable-dev","youtube":"https://youtube.com/@lovable","discord":"https://discord.gg/lovable-dev","reddit":"https://www.reddit.com/r/lovable"}},"seo":{"metatags":{"og:image":"/assets/logo/opengraph-image.png","canonical":"https://docs.lovable.dev"},"indexing":"all"},"contextual":{"options":["copy","assistant","download-pdf","download-spec"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lovable-f9060f1e","hasAudioNarration":false,"actualSubdomain":"lovable-f9060f1e","customDomains":["docs.lovable.dev"],"gitSource":{"type":"github","owner":"lovablelabs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae26a764f7bcbb8db4d1dd6","collectionId":"d305deef-c12c-45ea-971f-dc7e80bb91a1","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae26a764f7bcbb8db4d1dd6"},"feedback":{"thumbs":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae26a764f7bcbb8db4d1dd6","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Documentation","count":272},{"language":"default","tag":"Connect","count":125},{"language":"default","tag":"Connector catalog","count":113},{"language":"default","tag":"Build","count":68},{"language":"default","tag":"API Reference","count":33},{"language":"default","tag":"Workspace \u0026 account","count":29},{"language":"default","tag":"Lovable API","count":27},{"language":"default","tag":"Endpoints","count":25},{"language":"default","tag":"Data \u0026 databases","count":21},{"language":"default","tag":"Backend","count":19}]},"assistantConfig":{"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"deflection":{"enabled":true,"type":"link","email":"support@lovable.dev","url":"https://lovable.dev/support"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"instinct-self-updating-docs","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"assets/css/styles.css","content":".supabase{color:#59cf8c}"}],"page":{"pagePath":"api-reference/deploy-domains/update-publish-settings","slug":"/api-reference/deploy-domains/update-publish-settings","pageMetadata":{"title":"Update publish settings","description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:write`\n\nChanges published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/{project_id}/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/{project_id} for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/{project_id}/publish. To take the app offline, use DELETE /v1/projects/{project_id}/publish.","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest patch /v1/projects/{project_id}/publish","href":"/api-reference/deploy-domains/update-publish-settings","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: [_jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Plan:\"\n }), \" \", _jsx(_components.code, {\n children: \"Business or higher\"\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Scope:\"\n }), \" \", _jsx(_components.code, {\n children: \"projects:write\"\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Changes published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/\", \"/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/\", \" for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/\", \"/publish. To take the app offline, use DELETE /v1/projects/\", \"/publish.\"]\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 publish settings","description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:write`\n\nChanges published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/{project_id}/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/{project_id} for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/{project_id}/publish. To take the app offline, use DELETE /v1/projects/{project_id}/publish.","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest patch /v1/projects/{project_id}/publish","href":"/api-reference/deploy-domains/update-publish-settings","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/lovable-f9060f1e/84f62c0d01f1469d/sign-in-with-lovable-demo.js"],"openApiReferenceData":{"operation":{"description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:write`\n\nChanges published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/{project_id}/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/{project_id} for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/{project_id}/publish. To take the app offline, use DELETE /v1/projects/{project_id}/publish.","operationId":"updatePublishSettings","parameters":["98ee3074-0972-4c12-ac64-882dc7737d3c","5f03087c-e70c-43e9-930b-f78af7d39c0d","acda07cd-46fb-4f44-b6d2-3409dfc289d9"],"requestBody":"5930219b-6ace-4e67-bb1b-b709c60f5f42","responses":{"200":"64675956-f397-4c45-ade2-47947a1e5ecd","400":"bf646bc6-097d-4107-840c-3c388a7ee2e1","401":"064abeee-abba-4723-a830-5fadb486c7f6","402":"81686909-1b11-43f3-8a4e-4bd7cdfa2bb6","403":"cccdb0cc-1a95-4227-9b1c-0e652234e2e3","404":"729d8ad4-22b0-47ce-8a72-7b5781b2c7ec","406":"bf9f1589-246b-47e3-8196-f6bf85ee94cf","429":"91628676-28f4-4c00-922e-2ee7c55d3f3d","503":"8fc47907-2013-45e7-b1c9-0b492d5b0903","default":"8805d936-c3c9-4b5b-ae78-b2edea99e89c"},"security":["696666bb-656b-487b-880b-6d04fea34dce","fefc798c-52cf-40e4-a619-ef1bd6fa5e53"],"summary":"Update publish settings","tags":["deploy-domains"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"curl --request PATCH \\\n --url 'https://api.lovable.dev/v1/projects/project-id/publish' \\\n --header 'Lovable-API-Key: lov_your-api-key' \\\n --header 'Lovable-Version: 2026-09-11' \\\n --header 'Content-Type: application/json' \\\n --data '{}'"},{"label":"JavaScript","lang":"javascript","source":"const response = await fetch(\"https://api.lovable.dev/v1/projects/project-id/publish\", {\n method: \"PATCH\",\n headers: {\n \"Lovable-API-Key\": process.env.LOVABLE_API_KEY ?? \"lov_your-api-key\",\n \"Lovable-Version\": \"2026-09-11\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({}),\n});\nif (!response.ok) {\n throw new Error(`Lovable API ${response.status}: ${await response.text()}`);\n}\nconsole.log(await response.json());"}],"x-rateLimit":{"app_limiters":[{"class":"general","default_limits":[{"condition":"API key auth","limit":12000,"scope":"api_key","window_seconds":1800},{"condition":"Session or OAuth auth","limit":12000,"scope":"authenticated_user","window_seconds":1800}],"description":"General request limit: one bucket per API key, or the user's bucket shared with Lovable sessions for session and OAuth callers."}],"class":"general","default_limits":[{"condition":"API key auth","limit":12000,"scope":"api_key","window_seconds":1800},{"condition":"Session or OAuth auth","limit":12000,"scope":"authenticated_user","window_seconds":1800}]},"method":"patch","type":"path","servers":["d46911fb-5480-4a8c-8d9c-9fa4a467e1fa"],"path":"/v1/projects/{project_id}/publish","baseUrlOptions":["https://api.lovable.dev"],"title":"Update publish settings","codeSamples":[{"label":"cURL","lang":"bash","source":"curl --request PATCH \\\n --url 'https://api.lovable.dev/v1/projects/project-id/publish' \\\n --header 'Lovable-API-Key: lov_your-api-key' \\\n --header 'Lovable-Version: 2026-09-11' \\\n --header 'Content-Type: application/json' \\\n --data '{}'"},{"label":"JavaScript","lang":"javascript","source":"const response = await fetch(\"https://api.lovable.dev/v1/projects/project-id/publish\", {\n method: \"PATCH\",\n headers: {\n \"Lovable-API-Key\": process.env.LOVABLE_API_KEY ?? \"lov_your-api-key\",\n \"Lovable-Version\": \"2026-09-11\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({}),\n});\nif (!response.ok) {\n throw new Error(`Lovable API ${response.status}: ${await response.text()}`);\n}\nconsole.log(await response.json());"}],"requestExampleLanguages":["bash"],"requiredOnlyExamples":true,"requestExampleType":"codeSamples","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.audience":"custom","body.audience_targets.items.0.id":"grp_01jw3k9m2xq8r5v0c7d4e6f2gh","body.audience_targets.items.0.type":"group"}],"urlDisplay":"full"},"dependencies":{"parameters":{"98ee3074-0972-4c12-ac64-882dc7737d3c":{"description":"Project ID.","example":"prj_01jw3k9m2xq8r5v0c7d4e6f2gh","in":"path","name":"project_id","required":true,"schema":{"description":"Project ID.","examples":["prj_01jw3k9m2xq8r5v0c7d4e6f2gh"],"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}},"5f03087c-e70c-43e9-930b-f78af7d39c0d":{"description":"Stable API version to serve, as a YYYY-MM-DD date. Omit for the oldest supported stable version, currently 2026-09-11.","example":"2026-09-11","in":"header","name":"Lovable-Version","schema":{"type":"string","description":"Stable API version to serve, as a YYYY-MM-DD date. Omit for the oldest supported stable version, currently 2026-09-11.","uniqueKey":"","typeLabel":"string"}},"acda07cd-46fb-4f44-b6d2-3409dfc289d9":{"description":"Comma-separated beta revision strings to enable on top of the stable version.","in":"header","name":"Lovable-Beta","schema":{"type":"string","description":"Comma-separated beta revision strings to enable on top of the stable version.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"audience":{"description":"Who can open the published app; project reads report this value as publish_audience. A custom audience can include existing grants managed in the UI. Omit to leave the audience unchanged, including while the app is unpublished.","enum":["public","workspace","custom"],"examples":["custom"],"type":"string","uniqueKey":"audience","typeLabel":"enum\u003cstring>"},"audience_targets":{"description":"Groups who can open the app; allowed only when the supplied or current audience is custom. Providing a list replaces all group and user grants and removes workspace-wide access; an empty list removes those grants. Existing organization access and email invitations managed in the UI are preserved. Omit to preserve saved targets across audience changes. Targets are inactive outside custom mode. Null is not accepted.","examples":[[{"id":"grp_01jw3k9m2xq8r5v0c7d4e6f2gh","type":"group"}]],"items":{"additionalProperties":false,"properties":{"id":{"description":"Group ID, as returned by GET /v1/workspaces/{workspace_id}/groups.","examples":["grp_01jw3k9m2xq8r5v0c7d4e6f2gh"],"minLength":1,"type":"string","isRequired":true,"uniqueKey":"audience_targets.items.[INDEX].id","typeLabel":"string"},"type":{"description":"Audience target type. Only group targets are supported.","enum":["group"],"examples":["group"],"type":"string","isRequired":true,"uniqueKey":"audience_targets.items.[INDEX].type","typeLabel":"enum\u003cstring>"}},"required":["type","id"],"type":"object","uniqueKey":"audience_targets.items.[INDEX]","typeLabel":"object"},"maxItems":100,"type":"array","uniqueKey":"audience_targets","typeLabel":"object[]"}},"type":"object","description":"Provide audience, audience_targets, or both. An empty object leaves settings unchanged.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"audience":"custom","audience_targets":[{"id":"grp_01jw3k9m2xq8r5v0c7d4e6f2gh","type":"group"}]}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"64675956-f397-4c45-ade2-47947a1e5ecd":{"content":{"application/json":{"schema":{"properties":{"audience":{"description":"Who can open the published app; project reads report this value as publish_audience. More values may be added; clients must tolerate unknown values.","enum":["public","workspace","custom"],"examples":["custom"],"type":"string","isRequired":true,"uniqueKey":"audience","typeLabel":"enum\u003cstring>"},"audience_targets":{"description":"Saved groups and users, including while the app is offline or the audience is not custom. These targets grant access only in custom mode. Users granted through invitations or organization membership are included; organization-wide access and pending email invitations are not listed. This read projection is not a writable target list; only groups can be supplied in audience_targets.","examples":[[{"id":"grp_01jw3k9m2xq8r5v0c7d4e6f2gh","type":"group"}]],"items":{"properties":{"id":{"description":"Group ID as returned by GET /v1/workspaces/{workspace_id}/groups, or the user's UUID as other responses report it.","examples":["grp_01jw3k9m2xq8r5v0c7d4e6f2gh"],"type":"string","isRequired":true,"uniqueKey":"audience_targets.items.[INDEX].id","typeLabel":"string"},"type":{"description":"Target type. Users are reported but cannot yet be set through audience_targets.","enum":["group","user"],"examples":["group"],"type":"string","isRequired":true,"uniqueKey":"audience_targets.items.[INDEX].type","typeLabel":"enum\u003cstring>"}},"required":["type","id"],"type":"object","uniqueKey":"audience_targets.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"audience_targets","typeLabel":"object[]"}},"required":["audience_targets","audience"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"audience":"custom","audience_targets":[{"id":"grp_01jw3k9m2xq8r5v0c7d4e6f2gh","type":"group"}]}}},"exampleType":"generated"}},"description":"OK","headers":{"Lovable-Beta":{"description":"Beta revisions applied to the request, comma-separated. Present only when the request selected beta revisions.","schema":{"type":"string"}},"Lovable-Version":{"description":"Stable API version that served the request. Absent when the request was rejected before version selection or when selection itself failed.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"generated"},"bf646bc6-097d-4107-840c-3c388a7ee2e1":{"content":{"application/json":{"example":{"detail":"validation failed","errors":[{"location":"body.members","message":"expected array length >= 1"}],"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":400,"title":"Bad Request","type":"invalid_request"},"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":"validation failed","errors":[{"location":"body.members","message":"expected array length >= 1"}],"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":400,"title":"Bad Request","type":"invalid_request"}}},"exampleType":"examples"}},"description":"The request body or parameters are malformed or fail validation. Each failing field is listed in errors.","headers":{"Lovable-Beta":{"description":"Beta revisions applied to the request, comma-separated. Present only when the request selected beta revisions.","schema":{"type":"string"}},"Lovable-Version":{"description":"Stable API version that served the request. Absent when the request was rejected before version selection or when selection itself failed.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"examples"},"064abeee-abba-4723-a830-5fadb486c7f6":{"content":{"application/json":{"example":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":401,"title":"Authorization header required","type":"unauthorized"},"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":401,"title":"Authorization header required","type":"unauthorized"}}},"exampleType":"examples"}},"description":"Missing or invalid API key, session token, or OAuth access token.","headers":{"WWW-Authenticate":{"description":"Authentication challenge identifying the supported authentication scheme.","example":"Bearer","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"examples"},"81686909-1b11-43f3-8a4e-4bd7cdfa2bb6":{"content":{"application/json":{"example":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":402,"title":"You need to upgrade your plan to access this feature","type":"payment_required"},"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":402,"title":"You need to upgrade your plan to access this feature","type":"payment_required"}}},"exampleType":"examples"}},"description":"Public API access requires Business or higher. Some operations or configurations require an additional feature entitlement.","headers":{"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"examples"},"cccdb0cc-1a95-4227-9b1c-0e652234e2e3":{"content":{"application/json":{"example":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":403,"title":"You don't have the permissions to perform this action","type":"forbidden"},"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":403,"title":"You don't have the permissions to perform this action","type":"forbidden"}}},"exampleType":"examples"}},"description":"The key or caller lacks the required scope or permission. For email_not_verified, verify the account email before retrying.","headers":{"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"examples"},"729d8ad4-22b0-47ce-8a72-7b5781b2c7ec":{"content":{"application/json":{"example":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":404,"title":"Not Found","type":"project_not_found"},"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":404,"title":"Not Found","type":"project_not_found"}}},"exampleType":"examples"}},"description":"The project does not exist, has been deleted, or is not accessible to the authenticated client.","headers":{"Lovable-Beta":{"description":"Beta revisions applied to the request, comma-separated. Present only when the request selected beta revisions.","schema":{"type":"string"}},"Lovable-Version":{"description":"Stable API version that served the request. Absent when the request was rejected before version selection or when selection itself failed.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"examples"},"bf9f1589-246b-47e3-8196-f6bf85ee94cf":{"content":{"application/json":{"example":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":406,"title":"This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.","type":"not_acceptable"},"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":406,"title":"This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.","type":"not_acceptable"}}},"exampleType":"examples"}},"description":"The Accept header excludes every media type this endpoint produces.","headers":{"Lovable-Beta":{"description":"Beta revisions applied to the request, comma-separated. Present only when the request selected beta revisions.","schema":{"type":"string"}},"Lovable-Version":{"description":"Stable API version that served the request. Absent when the request was rejected before version selection or when selection itself failed.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"examples"},"91628676-28f4-4c00-922e-2ee7c55d3f3d":{"content":{"application/json":{"example":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":429,"title":"Too Many Requests","type":"rate_limited"},"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":429,"title":"Too Many Requests","type":"rate_limited"}}},"exampleType":"examples"}},"description":"Too many requests. Retry after the interval in Retry-After when present.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Present when the limiter can compute a retry delay.","schema":{"minimum":1,"type":"integer"}},"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"examples"},"8fc47907-2013-45e7-b1c9-0b492d5b0903":{"content":{"application/json":{"example":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":503,"title":"Request timed out","type":"request_timeout"},"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":null,"errors":null,"props":null,"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":503,"title":"Request timed out","type":"request_timeout"}}},"exampleType":"examples"}},"description":"The service is temporarily unavailable, or the processing deadline expired (request_timeout). A mutation may still complete; check resource state before retrying.","headers":{"Lovable-Beta":{"description":"Beta revisions applied to the request, comma-separated. Present only when the request selected beta revisions.","schema":{"type":"string"}},"Lovable-Version":{"description":"Stable API version that served the request. Absent when the request was rejected before version selection or when selection itself failed.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"examples"},"8805d936-c3c9-4b5b-ae78-b2edea99e89c":{"content":{"application/json":{"schema":{"description":"Common error response. An operation may document a different response body for a specific status code, such as per-member results for a bulk credit-limit update.","properties":{"detail":{"oneOf":[{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"description":"Human-readable guidance for this occurrence, or null when inapplicable. For invalid_request this is validation failed; the actionable field messages are in errors. Other error types may provide guidance such as re-authentication instructions.","example":"validation failed","type":"null","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | null"},"errors":{"oneOf":[{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.0","typeLabel":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].location","typeLabel":"string | null"},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string","isRequired":true,"uniqueKey":"errors.oneOf.0.items.[INDEX].message","typeLabel":"string"}},"required":["location","message"],"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"description":"Field-level error details on validation failures; null when no field-level details apply.","example":[{"location":"body.workspace_id","message":"expected string"}],"items":{"properties":{"location":{"oneOf":[{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"string"},{"description":"Request field that failed validation, such as body.workspace_id or query.limit; null when the failure has no field location.","example":"body.workspace_id","type":"null"}]},"message":{"description":"Explanation of the validation failure for this field.","example":"expected string","type":"string"}},"required":["location","message"],"type":"object"},"type":"null","isRequired":true,"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors","typeLabel":"object[] | null"},"props":{"oneOf":[{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"object","isRequired":true,"uniqueKey":"props.oneOf.0","typeLabel":"object"},{"description":"Error-specific metadata, or null when inapplicable. Keys depend on type: security_critical_findings includes finding_refs (an array of strings); retired_version and retired_beta may include migration_url (a string URL). Ignore unrecognized keys.","example":{"finding_refs":["supabase/finding-1"]},"type":"null","isRequired":true,"uniqueKey":"props.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"props","typeLabel":"object | null"},"request_id":{"description":"Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.","example":"4bf92f3577b34da6a3ce929d0e0e4736","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"status":{"description":"HTTP status code, echoed in the body.","example":429,"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"description":"Human-readable error summary. The wording may change; use type to decide how your application handles the error.","example":"Too Many Requests","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"description":"Stable machine-readable error type: a snake_case token such as rate_limited, not a URI. Clients may switch on it; new types are additive.","example":"rate_limited","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"}},"required":["type","title","status","request_id","detail","props","errors"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":"validation failed","errors":[{"location":"body.workspace_id","message":"expected string"}],"props":{"finding_refs":["supabase/finding-1"]},"request_id":"4bf92f3577b34da6a3ce929d0e0e4736","status":429,"title":"Too Many Requests","type":"rate_limited"}}},"exampleType":"generated"}},"description":"Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.","headers":{"Lovable-Beta":{"description":"Beta revisions applied to the request, comma-separated. Present only when the request selected beta revisions.","schema":{"type":"string"}},"Lovable-Version":{"description":"Stable API version that served the request. Absent when the request was rejected before version selection or when selection itself failed.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params":{"description":"Present only when the request carried query parameters this operation does not declare. Comma-separated, URL-escaped names of the ignored parameters, at most 20.","schema":{"type":"string"}},"X-Lovable-Unknown-Query-Params-Omitted":{"description":"Present with X-Lovable-Unknown-Query-Params when more than 20 unknown parameters were ignored. Number of names left out of that header.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Limit":{"description":"Maximum requests per time window for the rate limit closest to exhaustion. All three X-RateLimit headers describe that same limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests still available under the limit described by X-RateLimit-Limit.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp in seconds when the limit described by X-RateLimit-Limit next regains capacity. Omitted when unknown.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Identifier of this request. Matches request_id in the error envelope; quote it when reporting a failure.","schema":{"type":"string"}}},"exampleType":"generated"}},"security":{"696666bb-656b-487b-880b-6d04fea34dce":{"LovableAPIKey":{"description":"Lovable API key. Send its value in the Lovable-API-Key header.","in":"header","name":"Lovable-API-Key","type":"apiKey","scopes":["projects:write"],"schemeName":"LovableAPIKey"}},"fefc798c-52cf-40e4-a619-ef1bd6fa5e53":{"BearerAuth":{"bearerFormat":"JWT","description":"Lovable session token or OAuth access token. Send it in the Authorization header as Bearer \u003ctoken>.","scheme":"bearer","type":"http","scopes":["projects:write"],"schemeName":"BearerAuth"}}},"servers":{"d46911fb-5480-4a8c-8d9c-9fa4a467e1fa":{"description":"Production","url":"https://api.lovable.dev"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"description":"Lovable API key. Send its value in the Lovable-API-Key header.","in":"header","name":"Lovable-API-Key","type":"apiKey","scopes":["projects:write"],"schemeName":"LovableAPIKey"},"schema":{"title":"Lovable-API-Key","type":"string","description":"Lovable API key. Send its value in the Lovable-API-Key header.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"LovableAPIKey","name":"Lovable-API-Key"}],"title":"LovableAPIKey"},{"schemes":[{"scheme":{"bearerFormat":"JWT","description":"Lovable session token or OAuth access token. Send it in the Authorization header as Bearer \u003ctoken>.","scheme":"bearer","type":"http","scopes":["projects:write"],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Lovable session token or OAuth access token. Send it in the Authorization header as Bearer \u003ctoken>.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"https://api.lovable.dev/v1/openapi.yaml?view=rest"},"subdomain":"lovable-f9060f1e","siteName":"Lovable Documentation","title":"Update publish settings - Lovable Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T20:58:33.985Z","originalFileLocation":"api-reference/deploy-domains/update-publish-settings.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=\"Plan: Business or higher Scope: projects:write Changes published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/{project_id}/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/{project_id} for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/{project_id}/publish. To take the app offline, use DELETE /v1/projects/{project_id}/publish.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Lovable Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_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/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_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/lovable-f9060f1e/AU_uVgnksniw8mje/_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/lovable-f9060f1e/AU_uVgnksniw8mje/_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/lovable-f9060f1e/AU_uVgnksniw8mje/_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/lovable-f9060f1e/AU_uVgnksniw8mje/_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/lovable-f9060f1e/AU_uVgnksniw8mje/_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/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update publish settings - Lovable Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Plan: Business or higher Scope: projects:write Changes published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/{project_id}/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/{project_id} for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/{project_id}/publish. To take the app offline, use DELETE /v1/projects/{project_id}/publish.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Lovable Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lovable-f9060f1e.mintlify.app/assets/logo/opengraph-image.png\">\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 publish settings - Lovable Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Plan: Business or higher Scope: projects:write Changes published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/{project_id}/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/{project_id} for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/{project_id}/publish. To take the app offline, use DELETE /v1/projects/{project_id}/publish.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lovable-f9060f1e.mintlify.app/assets/logo/opengraph-image.png\">\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/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Lovable Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0095FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/deploy-domains/update-publish-settings.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.lovable.dev/#organization\",\"name\":\"Lovable Documentation\",\"url\":\"https://docs.lovable.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/lovable-f9060f1e/lZT1ihBcprll2Agr/assets/logo/logoblack.svg?fit=max\u0026auto=format\u0026n=lZT1ihBcprll2Agr\u0026q=85\u0026s=8d9eafaf19f94e27f0d13ac160d54f54\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.lovable.dev#website\",\"name\":\"Lovable Documentation\",\"url\":\"https://docs.lovable.dev\",\"publisher\":{\"@id\":\"https://docs.lovable.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings#webpage\",\"url\":\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings\",\"name\":\"Update publish settings\",\"description\":\"Plan: Business or higher Scope: projects:write Changes published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/{project_id}/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/{project_id} for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/{project_id}/publish. To take the app offline, use DELETE /v1/projects/{project_id}/publish.\",\"dateModified\":\"2026-10-27T20:58:33.985Z\",\"isPartOf\":{\"@id\":\"https://docs.lovable.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Lovable API\",\"item\":\"https://docs.lovable.dev/api-reference/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Endpoints\",\"item\":\"https://docs.lovable.dev/api-reference/workspaces/list-workspaces\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Deploy \u0026 domains\",\"item\":\"https://docs.lovable.dev/api-reference/deploy-domains/publish-project\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Update publish settings\",\"item\":\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings#apireference\",\"headline\":\"Update publish settings\",\"name\":\"Update publish settings\",\"description\":\"Plan: Business or higher Scope: projects:write Changes published app access without rebuilding the app. Set audience to public, workspace, or custom; project reads report it as publish_audience. With a custom audience, audience_targets replaces group and user grants and removes workspace-wide access; organization access and email invitations managed in the UI are preserved. Changes take effect immediately. Where an enforced workspace publishing policy decides publishes, a published app that is not public becomes public only through a publish, which also ships the latest saved version: set audience public on POST /v1/projects/{project_id}/publish, since this route answers 409 publish_visibility_requires_publish. Returns the resolved audience and its targets. Read GET /v1/projects/{project_id} for is_published, publish_audience, and publish_audience_targets. To build and publish a new version, use POST /v1/projects/{project_id}/publish. To take the app offline, use DELETE /v1/projects/{project_id}/publish.\",\"url\":\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings\",\"mainEntityOfPage\":{\"@id\":\"https://docs.lovable.dev/api-reference/deploy-domains/update-publish-settings#webpage\"},\"image\":\"https://docs.lovable.dev/assets/logo/opengraph-image.png\",\"dateModified\":\"2026-10-27T20:58:33.985Z\",\"publisher\":{\"@id\":\"https://docs.lovable.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.lovable.dev#website\"}}]}\u003c/script>","siteName":"Lovable Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction/welcome"}]},{"tab":"API Reference","groups":[{"group":"Lovable API","pages":[{"title":"API basics","sidebarTitle":"Introduction","href":"/api-reference/introduction"},{"title":"API changelog","href":"/api-reference/changelog"},{"group":"Endpoints","pages":[{"group":"Workspaces","pages":[{"title":"List workspaces","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/workspaces","href":"/api-reference/workspaces/list-workspaces"},{"title":"Get workspace","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/workspaces/{workspace_id}","href":"/api-reference/workspaces/get-workspace"}]},{"group":"Members \u0026 access","pages":[{"title":"List project collaborators","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/collaborators","href":"/api-reference/members-access/list-project-collaborators"},{"title":"List workspace groups","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/workspaces/{workspace_id}/groups","href":"/api-reference/members-access/list-workspace-groups"},{"title":"List workspace members","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/workspaces/{workspace_id}/members","href":"/api-reference/members-access/list-workspace-members"},{"title":"Get workspace member","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/workspaces/{workspace_id}/members/{user_id}","href":"/api-reference/members-access/get-workspace-member"}]},{"group":"Projects","pages":[{"title":"List projects","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects","href":"/api-reference/projects/list-projects"},{"title":"Get project","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}","href":"/api-reference/projects/get-project"},{"title":"Delete project","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest delete /v1/projects/{project_id}","href":"/api-reference/projects/delete-project"},{"title":"Update project","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest patch /v1/projects/{project_id}","href":"/api-reference/projects/update-project"},{"title":"Create embed URL","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest post /v1/projects/{project_id}/embed-url","href":"/api-reference/projects/create-embed-url"}]},{"group":"Deploy \u0026 domains","pages":[{"title":"Publish project","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest post /v1/projects/{project_id}/publish","href":"/api-reference/deploy-domains/publish-project"},{"title":"Unpublish project","description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:write`\n\nTakes the published app offline. Audience and visibility settings are retained and apply again on the next POST /v1/projects/{project_id}/publish. Returns 204 whether or not the app was online, so a repeated call is safe.","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest delete /v1/projects/{project_id}/publish","href":"/api-reference/deploy-domains/unpublish-project"},{"title":"Update publish settings","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest patch /v1/projects/{project_id}/publish","href":"/api-reference/deploy-domains/update-publish-settings"},{"title":"Get publish status","description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:read`\n\nReturns the status of an async publish started with POST /v1/projects/{project_id}/publish, keyed by the id it returned. Poll until deployment succeeds (url is set) or fails (error_message explains the failure). Poll no more than once every 2 seconds and honor Retry-After on 429 responses.\n\nOn failure, use error_class to choose the next action.\n\n| error_class | Action |\n| --- | --- |\n| transient | Retry publishing with backoff and a bounded retry limit. |\n| code | Fix the app code or SQL, then publish again. |\n| configuration | Fix configuration committed in the project, such as an oversized file, then publish again. |\n| data | Review the migration against production data. Obtain human approval before changing data, then publish again. |\n| integration | Repair external credentials, quota, or the connected service, then publish again. |\n| policy | Ask the workspace administrator to lift the blocking policy or approve the publish. |\n| internal | Contact Lovable support with the deployment ID. |\n\nIf error_class is null or unrecognized, show error_message and contact support instead of automatically retrying.","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/publish/{deployment_id}","href":"/api-reference/deploy-domains/get-publish-status"}]},{"group":"Security \u0026 governance","pages":[{"title":"List personal data findings","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/pii-labels","href":"/api-reference/security-governance/list-personal-data-findings"},{"title":"List security scans","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/security-scans","href":"/api-reference/security-governance/list-security-scans"},{"title":"Get security scan","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/security-scans/{scan_id}","href":"/api-reference/security-governance/get-security-scan"},{"title":"List security scan findings","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/security-scans/{scan_id}/findings","href":"/api-reference/security-governance/list-security-scan-findings"},{"title":"Get workspace security insights","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/workspaces/{workspace_id}/security-center/insights","href":"/api-reference/security-governance/get-workspace-security-insights"},{"title":"List workspace security project inventory","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/workspaces/{workspace_id}/security-center/insights/projects","href":"/api-reference/security-governance/list-workspace-security-project-inventory"}]},{"group":"Analytics","pages":[{"title":"Get project analytics","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/analytics","href":"/api-reference/analytics/get-project-analytics"},{"title":"Get project analytics breakdowns","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/analytics/breakdowns","href":"/api-reference/analytics/get-project-analytics-breakdowns"},{"title":"Get project realtime analytics","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/projects/{project_id}/analytics/realtime","href":"/api-reference/analytics/get-project-realtime-analytics"},{"title":"Get workspace analytics","deprecated":null,"version":null,"openapi":"https://api.lovable.dev/v1/openapi.yaml?view=rest get /v1/workspaces/{workspace_id}/analytics","href":"/api-reference/analytics/get-workspace-analytics"}]}]}]},{"group":"Events \u0026 hooks","pages":[{"title":"Events \u0026 hooks","href":"/api-reference/events-and-hooks"},{"group":"Reference","pages":[{"group":"Hooks","pages":[{"title":"Before message submission","version":null,"deprecated":null,"hideApiMarker":true,"playground":"none","openapi":"https://api.lovable.dev/v1/openapi.yaml?view=webhooks webhook message.before_submit.v1","href":"/api-reference/hooks/message-before-submit-v1"}]},{"group":"Events","pages":[{"title":"Project created","version":null,"deprecated":null,"hideApiMarker":true,"playground":"none","openapi":"https://api.lovable.dev/v1/openapi.yaml?view=webhooks webhook project.created.v1","href":"/api-reference/events/project-created-v1"},{"title":"Project deleted","version":null,"deprecated":null,"hideApiMarker":true,"playground":"none","openapi":"https://api.lovable.dev/v1/openapi.yaml?view=webhooks webhook project.deleted.v1","href":"/api-reference/events/project-deleted-v1"},{"title":"Project published","version":null,"deprecated":null,"hideApiMarker":true,"playground":"none","openapi":"https://api.lovable.dev/v1/openapi.yaml?view=webhooks webhook project.published.v1","href":"/api-reference/events/project-published-v1"},{"title":"Project transferred to another workspace","version":null,"deprecated":null,"hideApiMarker":true,"playground":"none","openapi":"https://api.lovable.dev/v1/openapi.yaml?view=webhooks webhook project.workspace_transferred.v1","href":"/api-reference/events/project-workspace-transferred-v1"}]}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"title":"Update publish settings - Lovable Documentation","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}