{
"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"
}
Updates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects//publish for that.
{
"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"
}
Project display name, 1-100 Unicode code points. Must contain a non-whitespace character. Allows Unicode letters, combining marks, numbers, space separators (Zs), punctuation - _ . ' · & ( ) [ ] | , ! : ‘ ’, and the zero-width non-joiner/joiner U+200C/U+200D. Other characters (including 🚀, tabs, and line breaks), links, recognized domain names, and IP addresses are rejected. Leading and trailing spaces are preserved. Omit to keep the current name.
Who can open the project in the Lovable editor. restricted: only the project owner, invited collaborators, and the workspace owner (Business or Enterprise). workspace_edit: every workspace member, at the access level their workspace role grants. workspace_view: every workspace member, with the access their workspace role grants capped at read; explicit project, folder, and group grants still permit editing (Business or Enterprise). Published app access is configured separately via publish_audience. Omit to keep the current setting.
URL of the project's main preview. Serves the latest successful preview build at the same address across commits; it is not pinned to a commit or draft. Uses the workspace's branded hostname unless the project opts out, and may change when branding changes. Null when the environment has no preview host; a URL does not mean a preview build is ready. Contains no authentication token; opening it requires a Lovable login unless the project is publicly remixable. To embed it from a third-party origin, use POST /v1/projects/{project_id}/embed-url.
Who can open the published app: the audience set via POST or PATCH /v1/projects/{project_id}/publish; null while the app is not published. More values may be added; clients must tolerate unknown values.
Groups and users who can open the published app when publish_audience is custom; empty for other audiences and while the app is offline. Users granted through invitations or organization membership are included; organization-wide access and pending email invitations are not listed.
Who can open the project in the Lovable editor. restricted: only the project owner, invited collaborators, and the workspace owner (Business or Enterprise). workspace_edit: every workspace member, at the access level their workspace role grants. workspace_view: every workspace member, with the access their workspace role grants capped at read; explicit project, folder, and group grants still permit editing (Business or Enterprise). Null when no setting is stored. Published app access is configured separately via publish_audience. More values may be added; clients must tolerate unknown values.
{"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":"6ae224d870a310525c1b9c74","collectionId":"aa8a7fa8-9847-406a-b536-6fb6c5d509db","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae224d870a310525c1b9c74"},"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":"6ae224d870a310525c1b9c74","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Documentation","count":271},{"language":"default","tag":"Connect","count":124},{"language":"default","tag":"Connector catalog","count":112},{"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/projects/update-project","slug":"/api-reference/projects/update-project","pageMetadata":{"title":"Update project","description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:write`\n\nUpdates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/{project_id}/publish for that.","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","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: [\"Updates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/\", \"/publish for that.\"]\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 project","description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:write`\n\nUpdates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/{project_id}/publish for that.","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","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\nUpdates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/{project_id}/publish for that.","operationId":"updateProject","parameters":["c80502a4-9753-4cc8-b073-86037164ff30","3507fe75-5e2c-4931-b5c3-901dcfc0bd5c","fdf66121-74c3-4cc7-86b5-213310da4c88"],"requestBody":"2e8e7a60-f06c-42d3-b254-8088c809e670","responses":{"200":"f91c8b7f-94ac-4ecf-820f-ad3da71ce115","400":"318c1757-888c-4a3e-a396-23c5f8dfe640","401":"b179ee06-7e03-483a-9314-9a926f68dba1","402":"55733734-52ae-4225-8faf-9be309d6894d","403":"14b3455b-3d33-44af-b11a-ef6f9a6828f5","404":"4ed3de7e-39d8-4911-9d18-a884d988f1a9","406":"8a8a0db6-669d-40cd-88f1-b1bfc208f879","429":"6befe04a-cf7b-445d-be18-eaacc534707a","503":"268f38dd-576e-4c99-98ff-842c39ea286a","default":"d265b990-6276-44ff-b509-f2da09a73f85"},"security":["063ad6c0-bf51-47a7-b36b-43d772031f82","cef7970a-9722-442d-9a59-31c664dac8df"],"summary":"Update project","tags":["projects"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"curl --request PATCH \\\n --url 'https://api.lovable.dev/v1/projects/project-id' \\\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\", {\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}","baseUrlOptions":["https://api.lovable.dev"],"title":"Update project","codeSamples":[{"label":"cURL","lang":"bash","source":"curl --request PATCH \\\n --url 'https://api.lovable.dev/v1/projects/project-id' \\\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\", {\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.name":"Acme Landing Page","body.visibility":"workspace_edit"}],"urlDisplay":"full"},"dependencies":{"parameters":{"c80502a4-9753-4cc8-b073-86037164ff30":{"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"}},"3507fe75-5e2c-4931-b5c3-901dcfc0bd5c":{"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"}},"fdf66121-74c3-4cc7-86b5-213310da4c88":{"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":{"name":{"description":"Project display name, 1-100 Unicode code points. Must contain a non-whitespace character. Allows Unicode letters, combining marks, numbers, space separators (Zs), punctuation - _ . ' · \u0026 ( ) [ ] | , ! : ‘ ’, and the zero-width non-joiner/joiner U+200C/U+200D. Other characters (including 🚀, tabs, and line breaks), links, recognized domain names, and IP addresses are rejected. Leading and trailing spaces are preserved. Omit to keep the current name.","examples":["Acme Landing Page"],"maxLength":100,"minLength":1,"type":"string","uniqueKey":"name","typeLabel":"string"},"visibility":{"description":"Who can open the project in the Lovable editor. restricted: only the project owner, invited collaborators, and the workspace owner (Business or Enterprise). workspace_edit: every workspace member, at the access level their workspace role grants. workspace_view: every workspace member, with the access their workspace role grants capped at read; explicit project, folder, and group grants still permit editing (Business or Enterprise). Published app access is configured separately via publish_audience. Omit to keep the current setting.","enum":["restricted","workspace_edit","workspace_view"],"examples":["workspace_edit"],"type":"string","uniqueKey":"visibility","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"Acme Landing Page","visibility":"workspace_edit"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"f91c8b7f-94ac-4ecf-820f-ad3da71ce115":{"content":{"application/json":{"schema":{"properties":{"created_at":{"oneOf":[{"description":"When the project was created; null when unavailable.","examples":["2026-01-15T09:30:00Z"],"format":"date-time","type":"string","isRequired":true,"uniqueKey":"created_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"description":"When the project was created; null when unavailable.","examples":["2026-01-15T09:30:00Z"],"format":"date-time","type":"null","isRequired":true,"uniqueKey":"created_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time> | null"},"description":{"oneOf":[{"description":"AI-written summary of what the project does; null until the agent has completed a response for the project.","examples":["A landing page for Acme with a hero, features, and pricing."],"type":"string","isRequired":true,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"description":"AI-written summary of what the project does; null until the agent has completed a response for the project.","examples":["A landing page for Acme with a hero, features, and pricing."],"type":"null","isRequired":true,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"description","typeLabel":"string | null"},"id":{"description":"Project ID.","examples":["prj_01jw3k9m2xq8r5v0c7d4e6f2gh"],"type":"string","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"is_published":{"description":"Whether the project is published.","examples":[true],"type":"boolean","isRequired":true,"uniqueKey":"is_published","typeLabel":"boolean"},"last_edited_at":{"oneOf":[{"description":"When the project last received an edit or a user chat message; null when neither has happened.","examples":["2026-01-15T09:30:00Z"],"format":"date-time","type":"string","isRequired":true,"uniqueKey":"last_edited_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"description":"When the project last received an edit or a user chat message; null when neither has happened.","examples":["2026-01-15T09:30:00Z"],"format":"date-time","type":"null","isRequired":true,"uniqueKey":"last_edited_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"last_edited_at","typeLabel":"string\u003cdate-time> | null"},"latest_commit_sha":{"oneOf":[{"description":"SHA of the latest commit; null before the first commit.","examples":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"],"type":"string","isRequired":true,"uniqueKey":"latest_commit_sha.oneOf.0","typeLabel":"string"},{"description":"SHA of the latest commit; null before the first commit.","examples":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"],"type":"null","isRequired":true,"uniqueKey":"latest_commit_sha.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"latest_commit_sha","typeLabel":"string | null"},"latest_screenshot_url":{"oneOf":[{"description":"URL of the latest screenshot; null until one has been captured.","examples":["https://screenshot2.lovable.dev/acme-landing-page.png"],"type":"string","isRequired":true,"uniqueKey":"latest_screenshot_url.oneOf.0","typeLabel":"string"},{"description":"URL of the latest screenshot; null until one has been captured.","examples":["https://screenshot2.lovable.dev/acme-landing-page.png"],"type":"null","isRequired":true,"uniqueKey":"latest_screenshot_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"latest_screenshot_url","typeLabel":"string | null"},"name":{"oneOf":[{"description":"Human-readable project name; null when none is set.","examples":["Acme Landing Page"],"type":"string","isRequired":true,"uniqueKey":"name.oneOf.0","typeLabel":"string"},{"description":"Human-readable project name; null when none is set.","examples":["Acme Landing Page"],"type":"null","isRequired":true,"uniqueKey":"name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"name","typeLabel":"string | null"},"owner_id":{"oneOf":[{"description":"Project owner user UUID, matching the OAuth subject for clients using derived UUIDs. Null when unavailable.","examples":["404666c6-b533-5d2c-9768-c425bf40559b"],"type":"string","isRequired":true,"uniqueKey":"owner_id.oneOf.0","typeLabel":"string"},{"description":"Project owner user UUID, matching the OAuth subject for clients using derived UUIDs. Null when unavailable.","examples":["404666c6-b533-5d2c-9768-c425bf40559b"],"type":"null","isRequired":true,"uniqueKey":"owner_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"owner_id","typeLabel":"string | null"},"preview_url":{"oneOf":[{"description":"URL of the project's main preview. Serves the latest successful preview build at the same address across commits; it is not pinned to a commit or draft. Uses the workspace's branded hostname unless the project opts out, and may change when branding changes. Null when the environment has no preview host; a URL does not mean a preview build is ready. Contains no authentication token; opening it requires a Lovable login unless the project is publicly remixable. To embed it from a third-party origin, use POST /v1/projects/{project_id}/embed-url.","examples":["https://id-preview--fa8b85cf-b9ff-4f1c-989a-74c32d1326f4.lovable.app"],"type":"string","isRequired":true,"uniqueKey":"preview_url.oneOf.0","typeLabel":"string"},{"description":"URL of the project's main preview. Serves the latest successful preview build at the same address across commits; it is not pinned to a commit or draft. Uses the workspace's branded hostname unless the project opts out, and may change when branding changes. Null when the environment has no preview host; a URL does not mean a preview build is ready. Contains no authentication token; opening it requires a Lovable login unless the project is publicly remixable. To embed it from a third-party origin, use POST /v1/projects/{project_id}/embed-url.","examples":["https://id-preview--fa8b85cf-b9ff-4f1c-989a-74c32d1326f4.lovable.app"],"type":"null","isRequired":true,"uniqueKey":"preview_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"preview_url","typeLabel":"string | null"},"publish_audience":{"oneOf":[{"description":"Who can open the published app: the audience set via POST or PATCH /v1/projects/{project_id}/publish; null while the app is not published. More values may be added; clients must tolerate unknown values.","enum":["public","workspace","custom",null],"examples":["public"],"type":"string","isRequired":true,"uniqueKey":"publish_audience.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Who can open the published app: the audience set via POST or PATCH /v1/projects/{project_id}/publish; null while the app is not published. More values may be added; clients must tolerate unknown values.","enum":["public","workspace","custom",null],"examples":["public"],"type":"null","isRequired":true,"uniqueKey":"publish_audience.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"publish_audience","typeLabel":"enum\u003cstring> | null"},"publish_audience_targets":{"description":"Groups and users who can open the published app when publish_audience is custom; empty for other audiences and while the app is offline. Users granted through invitations or organization membership are included; organization-wide access and pending email invitations are not listed.","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":"publish_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":"publish_audience_targets.items.[INDEX].type","typeLabel":"enum\u003cstring>"}},"required":["type","id"],"type":"object","uniqueKey":"publish_audience_targets.items.[INDEX]","typeLabel":"object"},"type":"array","isRequired":true,"uniqueKey":"publish_audience_targets","typeLabel":"object[]"},"visibility":{"oneOf":[{"description":"Who can open the project in the Lovable editor. restricted: only the project owner, invited collaborators, and the workspace owner (Business or Enterprise). workspace_edit: every workspace member, at the access level their workspace role grants. workspace_view: every workspace member, with the access their workspace role grants capped at read; explicit project, folder, and group grants still permit editing (Business or Enterprise). Null when no setting is stored. Published app access is configured separately via publish_audience. More values may be added; clients must tolerate unknown values.","enum":["restricted","workspace_edit","workspace_view",null],"examples":["workspace_edit"],"type":"string","isRequired":true,"uniqueKey":"visibility.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Who can open the project in the Lovable editor. restricted: only the project owner, invited collaborators, and the workspace owner (Business or Enterprise). workspace_edit: every workspace member, at the access level their workspace role grants. workspace_view: every workspace member, with the access their workspace role grants capped at read; explicit project, folder, and group grants still permit editing (Business or Enterprise). Null when no setting is stored. Published app access is configured separately via publish_audience. More values may be added; clients must tolerate unknown values.","enum":["restricted","workspace_edit","workspace_view",null],"examples":["workspace_edit"],"type":"null","isRequired":true,"uniqueKey":"visibility.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"visibility","typeLabel":"enum\u003cstring> | null"},"workspace_id":{"description":"Workspace the project belongs to.","examples":["workspace_01jw3k9m2xq8r5v0c7d4e6f2gh"],"type":"string","isRequired":true,"uniqueKey":"workspace_id","typeLabel":"string"}},"required":["publish_audience_targets","latest_commit_sha","preview_url","id","workspace_id","owner_id","name","description","visibility","latest_screenshot_url","is_published","publish_audience","created_at","last_edited_at"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"created_at":"2026-01-15T09:30:00Z","description":"A landing page for Acme with a hero, features, and pricing.","id":"prj_01jw3k9m2xq8r5v0c7d4e6f2gh","is_published":true,"last_edited_at":"2026-01-15T09:30:00Z","latest_commit_sha":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0","latest_screenshot_url":"https://screenshot2.lovable.dev/acme-landing-page.png","name":"Acme Landing Page","owner_id":"404666c6-b533-5d2c-9768-c425bf40559b","preview_url":"https://id-preview--fa8b85cf-b9ff-4f1c-989a-74c32d1326f4.lovable.app","publish_audience":"public","publish_audience_targets":[{"id":"grp_01jw3k9m2xq8r5v0c7d4e6f2gh","type":"group"}],"visibility":"workspace_edit","workspace_id":"workspace_01jw3k9m2xq8r5v0c7d4e6f2gh"}}},"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"},"318c1757-888c-4a3e-a396-23c5f8dfe640":{"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"},"b179ee06-7e03-483a-9314-9a926f68dba1":{"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"},"55733734-52ae-4225-8faf-9be309d6894d":{"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"},"14b3455b-3d33-44af-b11a-ef6f9a6828f5":{"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"},"4ed3de7e-39d8-4911-9d18-a884d988f1a9":{"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"},"8a8a0db6-669d-40cd-88f1-b1bfc208f879":{"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"},"6befe04a-cf7b-445d-be18-eaacc534707a":{"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"},"268f38dd-576e-4c99-98ff-842c39ea286a":{"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"},"d265b990-6276-44ff-b509-f2da09a73f85":{"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":{"063ad6c0-bf51-47a7-b36b-43d772031f82":{"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"}},"cef7970a-9722-442d-9a59-31c664dac8df":{"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 project - Lovable Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T20:58:33.941Z","originalFileLocation":"api-reference/projects/update-project.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 Updates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/{project_id}/publish for that.\">\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 project - Lovable Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Plan: Business or higher Scope: projects:write Updates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/{project_id}/publish for that.\">\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/projects/update-project\">\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 project - Lovable Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Plan: Business or higher Scope: projects:write Updates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/{project_id}/publish for that.\">\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/projects/update-project\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/projects/update-project.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/projects/update-project#webpage\",\"url\":\"https://docs.lovable.dev/api-reference/projects/update-project\",\"name\":\"Update project\",\"description\":\"Plan: Business or higher Scope: projects:write Updates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/{project_id}/publish for that.\",\"dateModified\":\"2026-10-27T20:58:33.941Z\",\"isPartOf\":{\"@id\":\"https://docs.lovable.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.lovable.dev/api-reference/projects/update-project#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.lovable.dev/api-reference/projects/update-project#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\":\"Projects\",\"item\":\"https://docs.lovable.dev/api-reference/projects/list-projects\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Update project\",\"item\":\"https://docs.lovable.dev/api-reference/projects/update-project\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.lovable.dev/api-reference/projects/update-project#apireference\",\"headline\":\"Update project\",\"name\":\"Update project\",\"description\":\"Plan: Business or higher Scope: projects:write Updates project sharing or the human-readable name. The description is generated by the agent and cannot be edited through this endpoint. Omitted fields keep their current values. This does not change access to the published app; use PATCH /v1/projects/{project_id}/publish for that.\",\"url\":\"https://docs.lovable.dev/api-reference/projects/update-project\",\"mainEntityOfPage\":{\"@id\":\"https://docs.lovable.dev/api-reference/projects/update-project#webpage\"},\"image\":\"https://docs.lovable.dev/assets/logo/opengraph-image.png\",\"dateModified\":\"2026-10-27T20:58:33.941Z\",\"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","description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:write`\n\nDeletes a project. Where trash is available the project can be restored from the Lovable editor; otherwise the deletion is permanent and custom domains are disconnected immediately. Deleting a project that is already deleted returns 404 with type project_not_found, so a client retrying a delete whose outcome it does not know should treat that 404 as success.","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","description":"**Plan:** `Business or higher`\n\n**Scope:** `projects:write`\n\nCreates a preview URL valid for one hour that can be loaded in an iframe on one exact HTTPS origin. Visitors do not need a Lovable login. It shows the project's built preview; it does not grant access to the editor or the published app.","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","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","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 project - 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"]}