{
"success": false,
"error": "INVALID_SERVICE_AREA",
"message": "Please check the service area settings and ZIP codes before saving.",
"code": "INVALID_SERVICE_AREA",
"errors": [
{
"field": "serviceArea",
"code": "FieldInvalid",
"message": "Please check this and try again."
}
]
}
{
"success": false,
"error": "Unauthorized",
"message": "Please sign in to continue."
}
{
"success": false,
"error": "InsufficientScope",
"message": "This access key does not allow this action. Please ask your account admin to change its permissions.",
"requiredScope": "projects:write"
}
{
"success": false,
"error": "ProjectNotFound",
"message": "We couldn't find that project. Please refresh and try again."
}
{
"success": false,
"error": "SubAccountCapReached",
"message": "Your plan has no room for another active sub-account. Please upgrade, or deactivate one to make room.",
"code": "SubAccountCapReached",
"details": {
"current": 3,
"cap": 3,
"entitlementPlanCode": "BASIC"
}
}
{
"success": false,
"error": "TooManyRequests",
"message": "That's a lot at once. Please wait a moment and try again."
}
{
"success": false,
"error": "Internal",
"message": "Something went wrong on our side. Please try again in a moment.",
"ref": "3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b"
}
Update project
Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: agency_admin.
A project the Free plan’s sub-account limit locks (planLocked: true) accepts only active: false and refuses every other change with 403 PLAN_SUBACCOUNT_LIMIT. On the Free plan, activating a project when 3 are already active returns 409 SubAccountCapReached.
{
"success": false,
"error": "INVALID_SERVICE_AREA",
"message": "Please check the service area settings and ZIP codes before saving.",
"code": "INVALID_SERVICE_AREA",
"errors": [
{
"field": "serviceArea",
"code": "FieldInvalid",
"message": "Please check this and try again."
}
]
}
{
"success": false,
"error": "Unauthorized",
"message": "Please sign in to continue."
}
{
"success": false,
"error": "InsufficientScope",
"message": "This access key does not allow this action. Please ask your account admin to change its permissions.",
"requiredScope": "projects:write"
}
{
"success": false,
"error": "ProjectNotFound",
"message": "We couldn't find that project. Please refresh and try again."
}
{
"success": false,
"error": "SubAccountCapReached",
"message": "Your plan has no room for another active sub-account. Please upgrade, or deactivate one to make room.",
"code": "SubAccountCapReached",
"details": {
"current": 3,
"cap": 3,
"entitlementPlanCode": "BASIC"
}
}
{
"success": false,
"error": "TooManyRequests",
"message": "That's a lot at once. Please wait a moment and try again."
}
{
"success": false,
"error": "Internal",
"message": "Something went wrong on our side. Please try again in a moment.",
"ref": "3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b"
}
Read the calling window in the timezone the window itself declares (tz) rather than the project's own timezone. Off by default, which keeps 9-to-5 meaning 9-to-5 where the lead is. Turn it on when the window describes one fixed clock — a team that answers 9-to-5 Eastern regardless of where it is calling.
This sub-account's own service area. zips reaches every call and chat as {{service_area_zips}} for the Service Area Check skill. A write merges over the stored value, so sending only zips keeps the rest; null clears it.
{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Team Follow Up API Docs","description":"Voice agents for GoHighLevel agencies: call every lead within a minute, book the appointment, and prove what happened. Guides and API reference for agents, campaigns, calls, contacts, phone numbers and analytics.","colors":{"primary":"#1066BC","light":"#1066BC","dark":"#1066BC"},"logo":{"light":"https://mintcdn.com/teamfollowupai/-K3ftiAApBs7M-rV/logo/teamfollowup.png?fit=max\u0026auto=format\u0026n=-K3ftiAApBs7M-rV\u0026q=85\u0026s=39eb7926e7a1140e67ff17d1b49319c6","dark":"https://mintcdn.com/teamfollowupai/-K3ftiAApBs7M-rV/logo/teamfollowup.png?fit=max\u0026auto=format\u0026n=-K3ftiAApBs7M-rV\u0026q=85\u0026s=39eb7926e7a1140e67ff17d1b49319c6","href":"/"},"favicon":"https://mintcdn.com/teamfollowupai/-K3ftiAApBs7M-rV/logo/teamfollowup.png?fit=max\u0026auto=format\u0026n=-K3ftiAApBs7M-rV\u0026q=85\u0026s=39eb7926e7a1140e67ff17d1b49319c6","api":{"params":{"expanded":"closed"},"playground":{"display":"interactive"},"examples":{"defaults":"required","autogenerate":true}},"appearance":{"default":"dark"},"background":{"color":{"light":"#FFFFFF","dark":"#0A0A0A"}},"navbar":{"links":[{"icon":"headset","href":"https://join.slack.com/t/diyteamfollow-oqz3480/shared_invite/zt-3z4e6feuc-jJa8wC_4CXShhA8lChf99A","label":"Support"},{"icon":"chart-line","href":"https://status.teamfollowup.ai","label":"Status"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.teamfollowup.ai"}},"fonts":{"heading":{"family":"Geist","weight":700},"body":{"family":"Geist","weight":400}},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"markdown":{"schema":true,"instructions":["Use the public API base URL: https://api.teamfollowup.ai/api.","Authenticate public API requests with Authorization: Bearer YOUR_API_KEY.","Use product-owned terms: agents, campaigns, projects (GoHighLevel sub-accounts), contacts, calls, outcomes, skills, cadences, phone numbers.","Scope requests by locationId rather than projectName.","Read the guide linked from each API reference group before recommending an endpoint."]},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"teamfollowupai","hasAudioNarration":false,"actualSubdomain":"teamfollowupai","customDomains":["docs.teamfollowup.ai"],"gitSource":{"type":"github","owner":"team-follow-up-ai","repo":"tfuai","deployBranch":"main","contentDirectory":"saas/server/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"99fb9c22-c089-45d3-8eff-d1e02b7b2b91","liveDeploymentHistoryId":"6adbd07900889728b49a0925","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adbd07900889728b49a0925"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6adc1ec47b7e261a0c49a19f","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"API Reference","count":206},{"language":"default","tag":"Documentation","count":87},{"language":"default","tag":"TFU Live","count":67},{"language":"default","tag":"Campaigns","count":44},{"language":"default","tag":"Agents","count":33},{"language":"default","tag":"Native Contacts","count":24},{"language":"default","tag":"Native Calendar","count":22},{"language":"default","tag":"Billing","count":20},{"language":"default","tag":"Power Dialer","count":13},{"language":"default","tag":"In-call Capabilities","count":13}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"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}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--font-inter:\"Geist Variable\", \"Geist\", system-ui, sans-serif;--font-paper-mono:\"Geist Mono\", ui-monospace, monospace;--default-font-family:\"Geist Variable\", \"Geist\", system-ui, sans-serif;--default-mono-font-family:\"Geist Mono\", ui-monospace, monospace;--font-family-headings-custom:\"Geist Variable\", \"Geist\", system-ui, sans-serif;--font-family-body-custom:\"Geist Variable\", \"Geist\", system-ui, sans-serif;--font-family-mono-custom:\"Geist Mono\", ui-monospace, monospace;--twoslash-code-font:\"Geist Mono\", ui-monospace, monospace;--background-light:255 255 255;--background-dark:10 10 10;--gray-50:250 250 250;--gray-100:237 237 237;--gray-200:230 230 230;--gray-300:212 212 212;--gray-400:163 163 163;--gray-500:92 92 92;--gray-600:64 64 64;--gray-700:38 38 38;--gray-800:28 28 28;--gray-900:18 18 18;--gray-950:10 10 10}body,html{font-family:\"Geist Variable\",\"Geist\",system-ui,sans-serif}#header>.prose{font-size:1rem;line-height:1.75}.code-block code,.code-block pre,.font-family-mono,.font-mono,.shiki,.shiki code,:where(code, pre, kbd, samp),[data-component-part=code-block-root]{font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace!important}.dark .code-block [data-component-part=code-block-root],.dark .code-block code,.dark .code-block pre{--shiki-dark-bg:#0a0a0a!important;background-color:rgb(10 10 10)!important;font-family:\"Geist Mono\",ui-monospace,monospace!important}.dark .code-block [data-fade-overlay=true]{--fade-color-dark:#0a0a0a!important}@media (min-width:1024px){:root{--tfuai-sidebar-width:16.5rem;--tfuai-navbar-x-padding:1.75rem}#navbar>.z-10.mx-auto.relative>.relative>.flex.items-center>.h-full.relative{width:100%}#navbar>.z-10.mx-auto.relative>.relative>.flex.items-center>.h-full.relative>.flex-1.flex.items-center.gap-x-4{flex:0 1 calc(var(--tfuai-sidebar-width) - .75rem)!important;min-width:3rem}#navbar>.z-10.mx-auto.relative>.relative>.flex.items-center>.h-full.relative>.flex.items-center.gap-4{flex:1 1 auto!important;min-width:0}#navbar>.z-10.mx-auto.relative>.relative>.flex.items-center>.h-full.relative>.flex.items-center.gap-4>.flex-1.relative.hidden.lg\\:flex{width:100%;flex:1 1 auto!important;justify-content:space-between;gap:clamp(2rem,4vw,5rem);margin-left:0!important}#navbar .nav-tabs{flex:0 0 auto}#navbar nav[aria-label=Main]{flex:0 0 auto;margin-left:auto}}"}],"page":{"pagePath":"api-reference/projects/update-project","slug":"/api-reference/projects/update-project","pageMetadata":{"title":"Update project","description":"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: `agency_admin`.\n\nA project the Free plan's sub-account limit locks (`planLocked: true`) accepts only `active: false` and refuses every other change with 403 `PLAN_SUBACCOUNT_LIMIT`. On the Free plan, activating a project when 3 are already active returns 409 `SubAccountCapReached`.\n\nRequired API key scope: `projects:write`.","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/v2/projects/{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 ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: \", _jsx(_components.code, {\n children: \"agency_admin\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A project the Free plan’s sub-account limit locks (\", _jsx(_components.code, {\n children: \"planLocked: true\"\n }), \") accepts only \", _jsx(_components.code, {\n children: \"active: false\"\n }), \" and refuses every other change with 403 \", _jsx(_components.code, {\n children: \"PLAN_SUBACCOUNT_LIMIT\"\n }), \". On the Free plan, activating a project when 3 are already active returns 409 \", _jsx(_components.code, {\n children: \"SubAccountCapReached\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Required API key scope: \", _jsx(_components.code, {\n children: \"projects:write\"\n }), \".\"]\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":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Update project","description":"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: `agency_admin`.\n\nA project the Free plan's sub-account limit locks (`planLocked: true`) accepts only `active: false` and refuses every other change with 403 `PLAN_SUBACCOUNT_LIMIT`. On the Free plan, activating a project when 3 are already active returns 409 `SubAccountCapReached`.\n\nRequired API key scope: `projects:write`.","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/v2/projects/{id}","href":"/api-reference/projects/update-project","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"put-v2-projects-by-id","summary":"Update project","description":"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: `agency_admin`.\n\nA project the Free plan's sub-account limit locks (`planLocked: true`) accepts only `active: false` and refuses every other change with 403 `PLAN_SUBACCOUNT_LIMIT`. On the Free plan, activating a project when 3 are already active returns 409 `SubAccountCapReached`.\n\nRequired API key scope: `projects:write`.","tags":["Projects"],"parameters":["68049616-3177-4d0e-92db-048e7390c57e"],"responses":{"200":"bc3fddf1-39d1-4ba4-aac1-3032297bad90","400":"bf51748a-35f8-48f8-ada6-dec53ceb5e01","401":"645e546a-b2a7-4ecc-9799-3b97c08baf87","403":"a26ca6e1-716c-4e29-859b-7ded0f3e5cb2","404":"979f9510-c9ad-4968-958d-14d2fd346c2c","409":"e2a18b4c-51be-4ece-9bae-044a7ac0c861","429":"10ee8f51-637a-4dcf-93f9-22eda0bb5d3a","500":"82adc886-61a2-4b72-83b9-c2667e53f427"},"security":["7b880f16-6ef2-4dbd-a7c0-5c43b07f2aa7"],"requestBody":"1c2f2167-8d95-4226-8327-bb9f8cf67498","x-legacy-module-tags":["Projects"],"x-product-module":"projects","x-required-api-scope":"projects:write","x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --request PUT \\\n --url https://api.teamfollowup.ai/api/v2/projects/{id} \\\n --header 'Authorization: Bearer YOUR_API_KEY' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"agencyName\": \"Acme Agency\",\n \"active\": true,\n \"callbacksHandledByHuman\": false,\n \"multipleTimezoneCheck\": true,\n \"businessName\": \"Acme Clinic\",\n \"businessNameOverridden\": true,\n \"callingWindowOverride\": {\n \"days\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"start\": \"09:00\",\n \"end\": \"17:00\",\n \"tz\": \"America/New_York\"\n },\n \"knowledgeBase\": \"Clinic hours are Monday through Friday, 9 AM to 5 PM.\"\n}'"}],"method":"put","type":"path","servers":["88d5d637-2e2c-4ce7-820a-47bfc398ed43"],"path":"/api/v2/projects/{id}","baseUrlOptions":["https://api.teamfollowup.ai"],"title":"Update project","codeSamples":[{"label":"cURL","lang":"bash","source":"curl --request PUT \\\n --url https://api.teamfollowup.ai/api/v2/projects/{id} \\\n --header 'Authorization: Bearer YOUR_API_KEY' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"agencyName\": \"Acme Agency\",\n \"active\": true,\n \"callbacksHandledByHuman\": false,\n \"multipleTimezoneCheck\": true,\n \"businessName\": \"Acme Clinic\",\n \"businessNameOverridden\": true,\n \"callingWindowOverride\": {\n \"days\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"start\": \"09:00\",\n \"end\": \"17:00\",\n \"tz\": \"America/New_York\"\n },\n \"knowledgeBase\": \"Clinic hours are Monday through Friday, 9 AM to 5 PM.\"\n}'"}],"requiredOnlyExamples":true,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"68049616-3177-4d0e-92db-048e7390c57e":{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"isRequired":true,"description":"Project id.","uniqueKey":"","typeLabel":"string"},"description":"Project id.","example":"64f2a8c8a2b3c4d5e6f7a8b9"}},"requestBody":{"required":true,"description":"Project update payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"properties":{"agencyName":{"type":"string","example":"Acme Agency","uniqueKey":"agencyName","typeLabel":"string"},"active":{"type":"boolean","description":"Whether the project accepts calls. Parking a project frees its plan slot.","example":true,"uniqueKey":"active","typeLabel":"boolean"},"callbacksHandledByHuman":{"type":"boolean","example":false,"uniqueKey":"callbacksHandledByHuman","typeLabel":"boolean"},"multipleTimezoneCheck":{"type":"boolean","example":true,"uniqueKey":"multipleTimezoneCheck","typeLabel":"boolean"},"useWindowTimezone":{"type":"boolean","default":false,"description":"Read the calling window in the timezone the window itself declares (`tz`) rather than the project's own timezone. Off by default, which keeps 9-to-5 meaning 9-to-5 where the lead is. Turn it on when the window describes one fixed clock — a team that answers 9-to-5 Eastern regardless of where it is calling.","example":false,"uniqueKey":"useWindowTimezone","typeLabel":"boolean"},"businessName":{"type":"string","example":"Acme Clinic","uniqueKey":"businessName","typeLabel":"string"},"businessNameOverridden":{"type":"boolean","example":true,"uniqueKey":"businessNameOverridden","typeLabel":"boolean"},"callingWindowOverride":{"oneOf":[{"type":"object","required":["days","start","end","tz"],"properties":{"days":{"type":"array","minItems":1,"items":{"type":"integer","minimum":1,"maximum":7,"uniqueKey":"callingWindowOverride.oneOf.0.days.items.[INDEX]","typeLabel":"integer"},"example":[1,2,3,4,5],"isRequired":true,"uniqueKey":"callingWindowOverride.oneOf.0.days","typeLabel":"integer[]"},"start":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"09:00","isRequired":true,"uniqueKey":"callingWindowOverride.oneOf.0.start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"17:00","isRequired":true,"uniqueKey":"callingWindowOverride.oneOf.0.end","typeLabel":"string"},"tz":{"type":"string","example":"America/New_York","isRequired":true,"uniqueKey":"callingWindowOverride.oneOf.0.tz","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"callingWindowOverride.oneOf.0","typeLabel":"object"},{"type":"array","items":{"type":"object","additionalProperties":false,"required":["days","start","end","tz"],"properties":{"days":{"type":"array","minItems":1,"items":{"type":"integer","minimum":1,"maximum":7,"uniqueKey":"callingWindowOverride.oneOf.1.items.[INDEX].days.items.[INDEX]","typeLabel":"integer"},"example":[1,2,3,4,5],"isRequired":true,"uniqueKey":"callingWindowOverride.oneOf.1.items.[INDEX].days","typeLabel":"integer[]"},"start":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"09:00","isRequired":true,"uniqueKey":"callingWindowOverride.oneOf.1.items.[INDEX].start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"17:00","isRequired":true,"uniqueKey":"callingWindowOverride.oneOf.1.items.[INDEX].end","typeLabel":"string"},"tz":{"type":"string","example":"America/New_York","isRequired":true,"uniqueKey":"callingWindowOverride.oneOf.1.items.[INDEX].tz","typeLabel":"string"}},"uniqueKey":"callingWindowOverride.oneOf.1.items.[INDEX]","typeLabel":"object"},"uniqueKey":"callingWindowOverride.oneOf.1","typeLabel":"object[]"},{"type":"null","uniqueKey":"callingWindowOverride.oneOf.2","typeLabel":"null"}],"uniqueKey":"callingWindowOverride","typeLabel":"object | object[] | null"},"knowledgeBase":{"type":"string","example":"Clinic hours are Monday through Friday, 9 AM to 5 PM.","uniqueKey":"knowledgeBase","typeLabel":"string"},"serviceArea":{"oneOf":[{"type":"object","description":"This sub-account's own service area. `zips` reaches every call and chat as `{{service_area_zips}}` for the Service Area Check skill. A write merges over the stored value, so sending only `zips` keeps the rest; `null` clears it.","properties":{"zips":{"oneOf":[{"type":"array","items":{"type":"string","pattern":"^\\d{5}$","uniqueKey":"serviceArea.oneOf.0.zips.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Five-digit US ZIP codes, as a list or as text separated by commas, spaces or lines. Leading zeros are kept, duplicates dropped, at most 5,000.","example":["80014","80015"],"uniqueKey":"serviceArea.oneOf.0.zips.oneOf.0","typeLabel":"string[]"},{"type":"string","description":"Five-digit US ZIP codes, as a list or as text separated by commas, spaces or lines. Leading zeros are kept, duplicates dropped, at most 5,000.","example":["80014","80015"],"uniqueKey":"serviceArea.oneOf.0.zips.oneOf.1","typeLabel":"string"}],"uniqueKey":"serviceArea.oneOf.0.zips","typeLabel":"string[] | string"},"transferRep":{"type":"object","additionalProperties":false,"description":"Live-transfer rep. Both blank means the agent books instead of transferring.","properties":{"name":{"type":"string","example":"Dana","uniqueKey":"serviceArea.oneOf.0.transferRep.name","typeLabel":"string"},"number":{"type":"string","description":"E.164, or blank.","example":"+14155550123","uniqueKey":"serviceArea.oneOf.0.transferRep.number","typeLabel":"string"}},"uniqueKey":"serviceArea.oneOf.0.transferRep","typeLabel":"object"},"remodelOnly":{"type":"boolean","example":false,"uniqueKey":"serviceArea.oneOf.0.remodelOnly","typeLabel":"boolean"},"order":{"type":"integer","minimum":0,"description":"Partner scan position; earlier rows win a shared ZIP. Omit for a new builder (appended).","uniqueKey":"serviceArea.oneOf.0.order","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"serviceArea.oneOf.0","typeLabel":"object"},{"type":"null","description":"This sub-account's own service area. `zips` reaches every call and chat as `{{service_area_zips}}` for the Service Area Check skill. A write merges over the stored value, so sending only `zips` keeps the rest; `null` clears it.","uniqueKey":"serviceArea.oneOf.1","typeLabel":"null"}],"uniqueKey":"serviceArea","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"agencyName":"Acme Agency","active":true,"callbacksHandledByHuman":false,"multipleTimezoneCheck":true,"businessName":"Acme Clinic","businessNameOverridden":true,"callingWindowOverride":{"days":[1,2,3,4,5],"start":"09:00","end":"17:00","tz":"America/New_York"},"knowledgeBase":"Clinic hours are Monday through Friday, 9 AM to 5 PM."}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"bc3fddf1-39d1-4ba4-aac1-3032297bad90":{"description":"Updated project.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["success","data"],"properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"data.additionalProperties","typeLabel":"any"},"required":["id","crm","locationId","active","status","installed","campaigns","createdAt","updatedAt"],"properties":{"id":{"type":"string","example":"64f2a8c8a2b3c4d5e6f7a8b9","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"crm":{"type":"string","enum":["ghl","kommo","pilot","native"],"description":"The CRM backing the project, or \"native\" when TFU AI is the system of record. Determines which connection details are present.","example":"ghl","isRequired":true,"uniqueKey":"data.crm","typeLabel":"enum\u003cstring>"},"locationId":{"type":"string","example":"loc_9f7a123","isRequired":true,"uniqueKey":"data.locationId","typeLabel":"string"},"active":{"type":"boolean","description":"Whether the project accepts calls. A parked project occupies no plan slot.","example":true,"isRequired":true,"uniqueKey":"data.active","typeLabel":"boolean"},"status":{"type":"string","enum":["live","stopped","disconnected"],"description":"The project's operating state: `live` is connected and dialling, `stopped` is connected but parked (`active: false`), `disconnected` means the CRM connection is not usable. A project with `crm: \"native\"` has no connection to lose and is never `disconnected`.","example":"live","isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"installed":{"type":"boolean","description":"Whether the CRM integration is set up. Always true for a project with `crm: \"native\"`, which has nothing to install. A project can be installed yet `disconnected` when its credential has stopped working — that needs a reconnect, not a reinstall.","example":true,"isRequired":true,"uniqueKey":"data.installed","typeLabel":"boolean"},"campaigns":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"data.campaigns.items.[INDEX].additionalProperties","typeLabel":"any"},"required":["id","name","activeTags","inactiveTags","dialing","agentId","fromNumbers","active","config","createdAt","updatedAt"],"properties":{"id":{"type":"string","example":"campaign_speed_to_lead_123","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","example":"Speed to Lead","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].name","typeLabel":"string"},"activeTags":{"type":"array","items":{"type":"string","uniqueKey":"data.campaigns.items.[INDEX].activeTags.items.[INDEX]","typeLabel":"string"},"example":["new_lead"],"isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].activeTags","typeLabel":"string[]"},"inactiveTags":{"type":"array","items":{"type":"string","uniqueKey":"data.campaigns.items.[INDEX].inactiveTags.items.[INDEX]","typeLabel":"string"},"example":["do_not_call"],"isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].inactiveTags","typeLabel":"string[]"},"dialing":{"oneOf":[{"type":"string","enum":["s2l","s2l_pd","pd","reactivation",null],"description":"How the campaign dials. `reactivation` is retired and reads only: existing campaigns still report it and still dial, but it cannot be set on a create or an update. Null when the campaign carries no dispatch mode (e.g. an inbound receptionist).","example":"s2l_pd","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].dialing.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["s2l","s2l_pd","pd","reactivation",null],"description":"How the campaign dials. `reactivation` is retired and reads only: existing campaigns still report it and still dial, but it cannot be set on a create or an update. Null when the campaign carries no dispatch mode (e.g. an inbound receptionist).","example":"s2l_pd","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].dialing.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].dialing","typeLabel":"enum\u003cstring> | null"},"agentId":{"type":"string","example":"agent_8a488fcfa8fdbf8ce8ad5ccc45","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].agentId","typeLabel":"string"},"fromNumbers":{"type":"array","items":{"type":"string","uniqueKey":"data.campaigns.items.[INDEX].fromNumbers.items.[INDEX]","typeLabel":"string"},"example":["+14155551234"],"isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].fromNumbers","typeLabel":"string[]"},"active":{"type":"boolean","description":"Whether the campaign is enrolling and dialling.","example":false,"isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].active","typeLabel":"boolean"},"config":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"data.campaigns.items.[INDEX].config.additionalProperties","typeLabel":"any"},"properties":{"cadenceId":{"type":"string","example":"cadence_123","uniqueKey":"data.campaigns.items.[INDEX].config.cadenceId","typeLabel":"string"},"calendarId":{"type":"string","example":"calendar_primary","uniqueKey":"data.campaigns.items.[INDEX].config.calendarId","typeLabel":"string"},"collectAddress":{"type":"boolean","example":true,"uniqueKey":"data.campaigns.items.[INDEX].config.collectAddress","typeLabel":"boolean"},"transferNumber":{"type":"string","example":"+14155550100","uniqueKey":"data.campaigns.items.[INDEX].config.transferNumber","typeLabel":"string"},"transferMessage":{"type":"string","description":"The line the agent speaks as it hands the call over.","example":"Great — putting you through to the team now.","uniqueKey":"data.campaigns.items.[INDEX].config.transferMessage","typeLabel":"string"},"transferToAssignedUser":{"type":"boolean","example":false,"uniqueKey":"data.campaigns.items.[INDEX].config.transferToAssignedUser","typeLabel":"boolean"},"s2lDoubleDial":{"type":"boolean","example":true,"uniqueKey":"data.campaigns.items.[INDEX].config.s2lDoubleDial","typeLabel":"boolean"},"s2lDelaySeconds":{"type":"integer","minimum":0,"maximum":3600,"description":"Hold the speed-to-lead call this many seconds after the trigger fires, whether that is a GoHighLevel tag landing or a new contact arriving, so the lead has a moment to reply first. 0 dials immediately.","example":120,"uniqueKey":"data.campaigns.items.[INDEX].config.s2lDelaySeconds","typeLabel":"integer"},"s2lDelayMinutes":{"type":"integer","minimum":0,"maximum":60,"description":"Whole-minute form of `s2lDelaySeconds`, superseded by it and kept as the fallback when `s2lDelaySeconds` is absent. Prefer `s2lDelaySeconds` on new writes.","example":2,"uniqueKey":"data.campaigns.items.[INDEX].config.s2lDelayMinutes","typeLabel":"integer"},"s2lDelayHaltOnReply":{"type":"boolean","description":"During the speed-to-lead delay only, cancel the pending call if the lead replies. Off unless set, and has no effect without a delay.","example":true,"uniqueKey":"data.campaigns.items.[INDEX].config.s2lDelayHaltOnReply","typeLabel":"boolean"},"callbackDoubleDial":{"type":"boolean","example":true,"uniqueKey":"data.campaigns.items.[INDEX].config.callbackDoubleDial","typeLabel":"boolean"},"maxCallsPerLead":{"oneOf":[{"type":"integer","minimum":1,"description":"The most calls one lead can receive in total, counted across every campaign in the project. Once reached, this campaign stops calling the lead; a callback or a time the lead picked in chat is still placed. Applies only to campaigns that set it. `null` or absent means no cap.","example":15,"uniqueKey":"data.campaigns.items.[INDEX].config.maxCallsPerLead.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"The most calls one lead can receive in total, counted across every campaign in the project. Once reached, this campaign stops calling the lead; a callback or a time the lead picked in chat is still placed. Applies only to campaigns that set it. `null` or absent means no cap.","example":15,"uniqueKey":"data.campaigns.items.[INDEX].config.maxCallsPerLead.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.campaigns.items.[INDEX].config.maxCallsPerLead","typeLabel":"integer | null"},"maxCallMinutes":{"oneOf":[{"type":"integer","minimum":1,"maximum":120,"description":"The longest one call on this campaign may run, in minutes, 1 to 120. `null` or absent means the default, 15. A call also stops when the minutes funding it run out, so a wallet with less than this left gets a shorter call. Not used by TFU Live campaigns, which keep their own limit.","example":30,"uniqueKey":"data.campaigns.items.[INDEX].config.maxCallMinutes.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":120,"description":"The longest one call on this campaign may run, in minutes, 1 to 120. `null` or absent means the default, 15. A call also stops when the minutes funding it run out, so a wallet with less than this left gets a shorter call. Not used by TFU Live campaigns, which keep their own limit.","example":30,"uniqueKey":"data.campaigns.items.[INDEX].config.maxCallMinutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.campaigns.items.[INDEX].config.maxCallMinutes","typeLabel":"integer | null"},"callNowSkipTags":{"type":"array","items":{"type":"string","uniqueKey":"data.campaigns.items.[INDEX].config.callNowSkipTags.items.[INDEX]","typeLabel":"string"},"example":["already_booked"],"uniqueKey":"data.campaigns.items.[INDEX].config.callNowSkipTags","typeLabel":"string[]"},"testFormFields":{"type":"boolean","description":"When true, the campaign's shareable test form also collects the CRM custom fields the agent's prompt references.","example":false,"uniqueKey":"data.campaigns.items.[INDEX].config.testFormFields","typeLabel":"boolean"},"advancedRouting":{"type":"boolean","example":false,"uniqueKey":"data.campaigns.items.[INDEX].config.advancedRouting","typeLabel":"boolean"},"transferRoutes":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"data.campaigns.items.[INDEX].config.transferRoutes.items.[INDEX].additionalProperties","typeLabel":"any"},"required":["id","number","condition"],"properties":{"id":{"type":"string","example":"route_sales","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].config.transferRoutes.items.[INDEX].id","typeLabel":"string"},"number":{"type":"string","example":"+14155550100","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].config.transferRoutes.items.[INDEX].number","typeLabel":"string"},"condition":{"type":"string","example":"Use for pricing questions.","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].config.transferRoutes.items.[INDEX].condition","typeLabel":"string"}},"uniqueKey":"data.campaigns.items.[INDEX].config.transferRoutes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.campaigns.items.[INDEX].config.transferRoutes","typeLabel":"object[]"},"appliedTag":{"type":"string","description":"Objective tag for `add_tag` campaigns: the CRM tag applied when the tagging objective is met.","example":"qualified_lead","uniqueKey":"data.campaigns.items.[INDEX].config.appliedTag","typeLabel":"string"},"confirmedTag":{"type":"string","description":"Objective tag for `appointment_confirmation` campaigns: the CRM tag applied when the appointment is confirmed.","example":"appt_confirmed","uniqueKey":"data.campaigns.items.[INDEX].config.confirmedTag","typeLabel":"string"},"fallbackTag":{"type":"string","description":"Objective tag for `live_transfer_and_tag` campaigns: the CRM tag applied when the live transfer fails to connect, so the lead still gets follow-up.","example":"transfer_failed","uniqueKey":"data.campaigns.items.[INDEX].config.fallbackTag","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].config","typeLabel":"object"},"createdAt":{"type":"string","format":"date-time","example":"2026-07-08T16:20:00.000Z","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","example":"2026-07-08T16:30:00.000Z","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].updatedAt","typeLabel":"string\u003cdate-time>"},"agentType":{"oneOf":[{"type":"string","enum":["appointment_confirmation","appointment_booking","live_transfer","live_transfer_and_tag","live_transfer_and_booking","add_tag","inbound_receptionist",null],"description":"Legacy V2 template the campaign was built against. It names the clone source, not what the agent can do — read `campaignType` for what starts the call and `capabilities` for what the agent can do on it. Returned as stored, so a campaign on a retired template still reports it. Null when the campaign carries no recognised template.","example":"appointment_booking","uniqueKey":"data.campaigns.items.[INDEX].agentType.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["appointment_confirmation","appointment_booking","live_transfer","live_transfer_and_tag","live_transfer_and_booking","add_tag","inbound_receptionist",null],"description":"Legacy V2 template the campaign was built against. It names the clone source, not what the agent can do — read `campaignType` for what starts the call and `capabilities` for what the agent can do on it. Returned as stored, so a campaign on a retired template still reports it. Null when the campaign carries no recognised template.","example":"appointment_booking","uniqueKey":"data.campaigns.items.[INDEX].agentType.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.campaigns.items.[INDEX].agentType","typeLabel":"enum\u003cstring> | null"},"campaignType":{"oneOf":[{"type":"string","enum":["outbound","inbound","confirmation",null],"description":"What starts the call: `outbound` when a tag lands on the contact, `inbound` when someone rings the number, `confirmation` when an appointment is booked. Fixed when the agent is created. Resolved rather than passed through, so a campaign created before the field was stored still reports its real type. `outreach` and `appointment` are the previous spellings of `outbound` and `confirmation`; both are still accepted on a write and both read back canonical.","example":"outbound","uniqueKey":"data.campaigns.items.[INDEX].campaignType.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["outbound","inbound","confirmation",null],"description":"What starts the call: `outbound` when a tag lands on the contact, `inbound` when someone rings the number, `confirmation` when an appointment is booked. Fixed when the agent is created. Resolved rather than passed through, so a campaign created before the field was stored still reports its real type. `outreach` and `appointment` are the previous spellings of `outbound` and `confirmation`; both are still accepted on a write and both read back canonical.","example":"outbound","uniqueKey":"data.campaigns.items.[INDEX].campaignType.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.campaigns.items.[INDEX].campaignType","typeLabel":"enum\u003cstring> | null"},"capabilities":{"oneOf":[{"type":"array","items":{"type":"string","enum":["appointment_booking","live_transfer","add_tag"],"uniqueKey":"data.campaigns.items.[INDEX].capabilities.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"What the agent can do once the call is live. Any combination. Null on a campaign that predates explicit composition, whose abilities are implied by `agentType`.","example":["appointment_booking","live_transfer"],"uniqueKey":"data.campaigns.items.[INDEX].capabilities.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["appointment_booking","live_transfer","add_tag"]},"description":"What the agent can do once the call is live. Any combination. Null on a campaign that predates explicit composition, whose abilities are implied by `agentType`.","example":["appointment_booking","live_transfer"],"uniqueKey":"data.campaigns.items.[INDEX].capabilities.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.campaigns.items.[INDEX].capabilities","typeLabel":"enum\u003cstring>[] | null"},"agentName":{"oneOf":[{"type":"string","description":"Name of the agent bound to this campaign, resolved on read. The agent owns its name and `name` above only mirrors it, so prefer this one when labelling a campaign: the mirror is written best-effort and can lag behind a rename. Read-only — rename the agent to change it. Null when the campaign has no agent, or its agent no longer exists.","example":"Roofing Follow Up","uniqueKey":"data.campaigns.items.[INDEX].agentName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Name of the agent bound to this campaign, resolved on read. The agent owns its name and `name` above only mirrors it, so prefer this one when labelling a campaign: the mirror is written best-effort and can lag behind a rename. Read-only — rename the agent to change it. Null when the campaign has no agent, or its agent no longer exists.","example":"Roofing Follow Up","uniqueKey":"data.campaigns.items.[INDEX].agentName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.campaigns.items.[INDEX].agentName","typeLabel":"string | null"},"callingWindow":{"oneOf":[{"type":"object","required":["days","start","end","tz"],"properties":{"days":{"type":"array","minItems":1,"items":{"type":"integer","minimum":1,"maximum":7,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.0.days.items.[INDEX]","typeLabel":"integer"},"example":[1,2,3,4,5],"isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.0.days","typeLabel":"integer[]"},"start":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"09:00","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.0.start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"17:00","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.0.end","typeLabel":"string"},"tz":{"type":"string","example":"America/New_York","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.0.tz","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.0","typeLabel":"object"},{"type":"array","items":{"type":"object","additionalProperties":false,"required":["days","start","end","tz"],"properties":{"days":{"type":"array","minItems":1,"items":{"type":"integer","minimum":1,"maximum":7,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.1.items.[INDEX].days.items.[INDEX]","typeLabel":"integer"},"example":[1,2,3,4,5],"isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.1.items.[INDEX].days","typeLabel":"integer[]"},"start":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"09:00","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.1.items.[INDEX].start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"17:00","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.1.items.[INDEX].end","typeLabel":"string"},"tz":{"type":"string","example":"America/New_York","isRequired":true,"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.1.items.[INDEX].tz","typeLabel":"string"}},"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.1.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.1","typeLabel":"object[]"},{"type":"null","uniqueKey":"data.campaigns.items.[INDEX].callingWindow.oneOf.2","typeLabel":"null"}],"uniqueKey":"data.campaigns.items.[INDEX].callingWindow","typeLabel":"object | object[] | null"},"multipleTimezoneCheck":{"type":"boolean","example":true,"uniqueKey":"data.campaigns.items.[INDEX].multipleTimezoneCheck","typeLabel":"boolean"},"useWindowTimezone":{"type":"boolean","default":false,"description":"Read the calling window in the timezone the window itself declares (`tz`) rather than the project's own timezone. Off by default, which keeps 9-to-5 meaning 9-to-5 where the lead is. Turn it on when the window describes one fixed clock — a team that answers 9-to-5 Eastern regardless of where it is calling.","example":false,"uniqueKey":"data.campaigns.items.[INDEX].useWindowTimezone","typeLabel":"boolean"},"dropOutsideWindow":{"type":"boolean","example":false,"uniqueKey":"data.campaigns.items.[INDEX].dropOutsideWindow","typeLabel":"boolean"}},"uniqueKey":"data.campaigns.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.campaigns","typeLabel":"object[]"},"createdAt":{"type":"string","format":"date-time","example":"2026-07-08T16:10:00.000Z","isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","example":"2026-07-08T16:30:00.000Z","isRequired":true,"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time>"},"companyId":{"type":"string","example":"company_123","uniqueKey":"data.companyId","typeLabel":"string"},"timezone":{"oneOf":[{"type":"string","example":"America/New_York","uniqueKey":"data.timezone.oneOf.0","typeLabel":"string"},{"type":"null","example":"America/New_York","uniqueKey":"data.timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.timezone","typeLabel":"string | null"},"agencyName":{"oneOf":[{"type":"string","example":"Acme Agency","uniqueKey":"data.agencyName.oneOf.0","typeLabel":"string"},{"type":"null","example":"Acme Agency","uniqueKey":"data.agencyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.agencyName","typeLabel":"string | null"},"agencyId":{"oneOf":[{"type":"string","example":"partner_123","uniqueKey":"data.agencyId.oneOf.0","typeLabel":"string"},{"type":"null","example":"partner_123","uniqueKey":"data.agencyId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.agencyId","typeLabel":"string | null"},"planLocked":{"type":"boolean","description":"Whether the Free plan's sub-account limit locks this project. On the Free plan only the 3 oldest active sub-accounts can be used. A locked one still reads, refuses every change except switching it off with 403 `PLAN_SUBACCOUNT_LIMIT`, and its campaigns place no new calls. Upgrading unlocks it at once.","example":false,"uniqueKey":"data.planLocked","typeLabel":"boolean"},"callbacksHandledByHuman":{"type":"boolean","example":false,"uniqueKey":"data.callbacksHandledByHuman","typeLabel":"boolean"},"multipleTimezoneCheck":{"type":"boolean","example":true,"uniqueKey":"data.multipleTimezoneCheck","typeLabel":"boolean"},"useWindowTimezone":{"type":"boolean","default":false,"description":"Read the calling window in the timezone the window itself declares (`tz`) rather than the project's own timezone. Off by default, which keeps 9-to-5 meaning 9-to-5 where the lead is. Turn it on when the window describes one fixed clock — a team that answers 9-to-5 Eastern regardless of where it is calling.","example":false,"uniqueKey":"data.useWindowTimezone","typeLabel":"boolean"},"callingWindowOverride":{"oneOf":[{"type":"object","required":["days","start","end","tz"],"properties":{"days":{"type":"array","minItems":1,"items":{"type":"integer","minimum":1,"maximum":7,"uniqueKey":"data.callingWindowOverride.oneOf.0.days.items.[INDEX]","typeLabel":"integer"},"example":[1,2,3,4,5],"isRequired":true,"uniqueKey":"data.callingWindowOverride.oneOf.0.days","typeLabel":"integer[]"},"start":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"09:00","isRequired":true,"uniqueKey":"data.callingWindowOverride.oneOf.0.start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"17:00","isRequired":true,"uniqueKey":"data.callingWindowOverride.oneOf.0.end","typeLabel":"string"},"tz":{"type":"string","example":"America/New_York","isRequired":true,"uniqueKey":"data.callingWindowOverride.oneOf.0.tz","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"data.callingWindowOverride.oneOf.0","typeLabel":"object"},{"type":"array","items":{"type":"object","additionalProperties":false,"required":["days","start","end","tz"],"properties":{"days":{"type":"array","minItems":1,"items":{"type":"integer","minimum":1,"maximum":7,"uniqueKey":"data.callingWindowOverride.oneOf.1.items.[INDEX].days.items.[INDEX]","typeLabel":"integer"},"example":[1,2,3,4,5],"isRequired":true,"uniqueKey":"data.callingWindowOverride.oneOf.1.items.[INDEX].days","typeLabel":"integer[]"},"start":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"09:00","isRequired":true,"uniqueKey":"data.callingWindowOverride.oneOf.1.items.[INDEX].start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$","example":"17:00","isRequired":true,"uniqueKey":"data.callingWindowOverride.oneOf.1.items.[INDEX].end","typeLabel":"string"},"tz":{"type":"string","example":"America/New_York","isRequired":true,"uniqueKey":"data.callingWindowOverride.oneOf.1.items.[INDEX].tz","typeLabel":"string"}},"uniqueKey":"data.callingWindowOverride.oneOf.1.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.callingWindowOverride.oneOf.1","typeLabel":"object[]"},{"type":"null","uniqueKey":"data.callingWindowOverride.oneOf.2","typeLabel":"null"}],"uniqueKey":"data.callingWindowOverride","typeLabel":"object | object[] | null"},"knowledgeBase":{"type":"string","example":"Clinic hours are Monday through Friday, 9 AM to 5 PM.","uniqueKey":"data.knowledgeBase","typeLabel":"string"},"businessName":{"oneOf":[{"type":"string","example":"Acme Clinic","uniqueKey":"data.businessName.oneOf.0","typeLabel":"string"},{"type":"null","example":"Acme Clinic","uniqueKey":"data.businessName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.businessName","typeLabel":"string | null"},"businessNameOverridden":{"type":"boolean","example":false,"uniqueKey":"data.businessNameOverridden","typeLabel":"boolean"},"uninstalledAt":{"type":"string","format":"date-time","example":"2026-07-08T16:30:00.000Z","uniqueKey":"data.uninstalledAt","typeLabel":"string\u003cdate-time>"},"kommo":{"type":"object","description":"Present only when `crm` is `kommo`.","required":["accountId"],"properties":{"accountId":{"type":"string","example":"31415926","isRequired":true,"uniqueKey":"data.kommo.accountId","typeLabel":"string"},"accountName":{"oneOf":[{"type":"string","example":"Acme Clinic","uniqueKey":"data.kommo.accountName.oneOf.0","typeLabel":"string"},{"type":"null","example":"Acme Clinic","uniqueKey":"data.kommo.accountName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.kommo.accountName","typeLabel":"string | null"},"accountTimezone":{"oneOf":[{"type":"string","example":"America/New_York","uniqueKey":"data.kommo.accountTimezone.oneOf.0","typeLabel":"string"},{"type":"null","example":"America/New_York","uniqueKey":"data.kommo.accountTimezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.kommo.accountTimezone","typeLabel":"string | null"},"subdomain":{"type":"string","example":"acmeclinic","uniqueKey":"data.kommo.subdomain","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"data.kommo","typeLabel":"object"},"ghl":{"oneOf":[{"type":"object","description":"Live location data, present only when `crm` is `ghl`. `null` means the connection could not be used — prefer `status` over interpreting this yourself.","properties":{"id":{"type":"string","example":"loc_9f7a123","uniqueKey":"data.ghl.oneOf.0.id","typeLabel":"string"},"name":{"oneOf":[{"type":"string","example":"Acme Clinic","uniqueKey":"data.ghl.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","example":"Acme Clinic","uniqueKey":"data.ghl.oneOf.0.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.name","typeLabel":"string | null"},"timezone":{"oneOf":[{"type":"string","example":"America/New_York","uniqueKey":"data.ghl.oneOf.0.timezone.oneOf.0","typeLabel":"string"},{"type":"null","example":"America/New_York","uniqueKey":"data.ghl.oneOf.0.timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.timezone","typeLabel":"string | null"},"country":{"oneOf":[{"type":"string","example":"US","uniqueKey":"data.ghl.oneOf.0.country.oneOf.0","typeLabel":"string"},{"type":"null","example":"US","uniqueKey":"data.ghl.oneOf.0.country.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.country","typeLabel":"string | null"},"phone":{"oneOf":[{"type":"string","example":"+14155550000","uniqueKey":"data.ghl.oneOf.0.phone.oneOf.0","typeLabel":"string"},{"type":"null","example":"+14155550000","uniqueKey":"data.ghl.oneOf.0.phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.phone","typeLabel":"string | null"},"address":{"oneOf":[{"type":"string","example":"100 Market St","uniqueKey":"data.ghl.oneOf.0.address.oneOf.0","typeLabel":"string"},{"type":"null","example":"100 Market St","uniqueKey":"data.ghl.oneOf.0.address.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.address","typeLabel":"string | null"},"city":{"oneOf":[{"type":"string","example":"San Francisco","uniqueKey":"data.ghl.oneOf.0.city.oneOf.0","typeLabel":"string"},{"type":"null","example":"San Francisco","uniqueKey":"data.ghl.oneOf.0.city.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.city","typeLabel":"string | null"},"state":{"oneOf":[{"type":"string","example":"CA","uniqueKey":"data.ghl.oneOf.0.state.oneOf.0","typeLabel":"string"},{"type":"null","example":"CA","uniqueKey":"data.ghl.oneOf.0.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.state","typeLabel":"string | null"},"postalCode":{"oneOf":[{"type":"string","example":"94105","uniqueKey":"data.ghl.oneOf.0.postalCode.oneOf.0","typeLabel":"string"},{"type":"null","example":"94105","uniqueKey":"data.ghl.oneOf.0.postalCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.postalCode","typeLabel":"string | null"},"email":{"oneOf":[{"type":"string","example":"frontdesk@example.test","uniqueKey":"data.ghl.oneOf.0.email.oneOf.0","typeLabel":"string"},{"type":"null","example":"frontdesk@example.test","uniqueKey":"data.ghl.oneOf.0.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.email","typeLabel":"string | null"},"website":{"oneOf":[{"type":"string","example":"https://example.test","uniqueKey":"data.ghl.oneOf.0.website.oneOf.0","typeLabel":"string"},{"type":"null","example":"https://example.test","uniqueKey":"data.ghl.oneOf.0.website.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl.oneOf.0.website","typeLabel":"string | null"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"data.ghl.oneOf.0.additionalProperties","typeLabel":"any"},"uniqueKey":"data.ghl.oneOf.0","typeLabel":"object"},{"type":"null","description":"Live location data, present only when `crm` is `ghl`. `null` means the connection could not be used — prefer `status` over interpreting this yourself.","uniqueKey":"data.ghl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ghl","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"success":true,"data":{"id":"64f2a8c8a2b3c4d5e6f7a8b9","crm":"ghl","locationId":"loc_9f7a123","companyId":"company_123","timezone":"America/New_York","agencyName":"Acme Agency","agencyId":"partner_123","active":true,"status":"live","installed":true,"planLocked":false,"callbacksHandledByHuman":false,"multipleTimezoneCheck":true,"callingWindowOverride":null,"knowledgeBase":"Clinic hours are Monday through Friday, 9 AM to 5 PM.","businessName":"Acme Clinic","businessNameOverridden":true,"campaigns":[{"id":"campaign_speed_to_lead_123","name":"Speed to Lead","activeTags":["new_lead"],"inactiveTags":["do_not_call"],"dialing":"s2l_pd","agentType":"appointment_booking","agentId":"agent_8a488fcfa8fdbf8ce8ad5ccc45","agentName":"Roofing Follow Up","fromNumbers":["+14155551234"],"active":false,"callingWindow":{"days":[1,2,3,4,5],"start":"09:00","end":"17:00","tz":"America/New_York"},"multipleTimezoneCheck":true,"dropOutsideWindow":false,"config":{"cadenceId":"cadence_123","calendarId":"calendar_primary","transferNumber":"+14155550100"},"createdAt":"2026-07-08T16:20:00.000Z","updatedAt":"2026-07-08T16:30:00.000Z"}],"createdAt":"2026-07-08T16:10:00.000Z","updatedAt":"2026-07-08T16:30:00.000Z","ghl":{"id":"loc_9f7a123","name":"Acme Clinic","timezone":"America/New_York","country":"US","phone":"+14155550000","address":"100 Market St","city":"San Francisco","state":"CA","postalCode":"94105","email":"frontdesk@example.test","website":"https://example.test"}}}}},"exampleType":"examples"}},"exampleType":"examples"},"bf51748a-35f8-48f8-ada6-dec53ceb5e01":{"description":"Validation failed or the request is malformed.","content":{"application/json":{"schema":{"type":"object","description":"The error envelope, plus the fields some project refusals and the permission checks add.","required":["success","error","message"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"A stable code for what went wrong. Branch on this: the same failure always answers with the same code.","example":"NotFound","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person: what happened and what to do next. Show it, never parse it: the wording can change, and browser users get it in their own language. API keys and OAuth apps always get English.","example":"We couldn't find that. It may have been moved or deleted.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Sent when specific fields were refused: one entry for each field to fix.","items":{"type":"object","additionalProperties":false,"required":["field","code","message"],"properties":{"field":{"type":"string","description":"Where the value sits in the request, as a dotted path.","example":"name","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"A stable code for what is wrong with the value.","example":"FieldRequired","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person.","example":"Please fill this in.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"details.additionalProperties","typeLabel":"any"},"description":"Data your code may need to act on the failure, such as ids or limits. Never text for people.","uniqueKey":"details","typeLabel":"object"},"ref":{"type":"string","description":"Sent only when the failure was on our side. Quote it to support so they can find the request. It matches the `x-request-id` response header.","example":"3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b","uniqueKey":"ref","typeLabel":"string"},"code":{"type":"string","description":"An older copy of the code, still sent on some refusals, such as a full plan or a project that is still switched on. Branch on `error` instead.","example":"SubAccountCapReached","uniqueKey":"code","typeLabel":"string"},"requiredScope":{"type":"string","description":"Sent when the access key lacks a permission: the one this route needs.","example":"projects:write","uniqueKey":"requiredScope","typeLabel":"string"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"success":false,"error":"INVALID_SERVICE_AREA","message":"Please check the service area settings and ZIP codes before saving.","code":"INVALID_SERVICE_AREA","errors":[{"field":"serviceArea","code":"FieldInvalid","message":"Please check this and try again."}]}}},"exampleType":"examples"}},"exampleType":"examples"},"645e546a-b2a7-4ecc-9799-3b97c08baf87":{"description":"Missing or invalid authentication.","content":{"application/json":{"schema":{"type":"object","description":"The error envelope, plus the fields some project refusals and the permission checks add.","required":["success","error","message"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"A stable code for what went wrong. Branch on this: the same failure always answers with the same code.","example":"NotFound","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person: what happened and what to do next. Show it, never parse it: the wording can change, and browser users get it in their own language. API keys and OAuth apps always get English.","example":"We couldn't find that. It may have been moved or deleted.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Sent when specific fields were refused: one entry for each field to fix.","items":{"type":"object","additionalProperties":false,"required":["field","code","message"],"properties":{"field":{"type":"string","description":"Where the value sits in the request, as a dotted path.","example":"name","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"A stable code for what is wrong with the value.","example":"FieldRequired","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person.","example":"Please fill this in.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"details.additionalProperties","typeLabel":"any"},"description":"Data your code may need to act on the failure, such as ids or limits. Never text for people.","uniqueKey":"details","typeLabel":"object"},"ref":{"type":"string","description":"Sent only when the failure was on our side. Quote it to support so they can find the request. It matches the `x-request-id` response header.","example":"3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b","uniqueKey":"ref","typeLabel":"string"},"code":{"type":"string","description":"An older copy of the code, still sent on some refusals, such as a full plan or a project that is still switched on. Branch on `error` instead.","example":"SubAccountCapReached","uniqueKey":"code","typeLabel":"string"},"requiredScope":{"type":"string","description":"Sent when the access key lacks a permission: the one this route needs.","example":"projects:write","uniqueKey":"requiredScope","typeLabel":"string"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"success":false,"error":"Unauthorized","message":"Please sign in to continue."}}},"exampleType":"examples"}},"exampleType":"examples"},"a26ca6e1-716c-4e29-859b-7ded0f3e5cb2":{"description":"Authenticated but not permitted to access the requested resource.","content":{"application/json":{"schema":{"type":"object","description":"The error envelope, plus the fields some project refusals and the permission checks add.","required":["success","error","message"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"A stable code for what went wrong. Branch on this: the same failure always answers with the same code.","example":"NotFound","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person: what happened and what to do next. Show it, never parse it: the wording can change, and browser users get it in their own language. API keys and OAuth apps always get English.","example":"We couldn't find that. It may have been moved or deleted.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Sent when specific fields were refused: one entry for each field to fix.","items":{"type":"object","additionalProperties":false,"required":["field","code","message"],"properties":{"field":{"type":"string","description":"Where the value sits in the request, as a dotted path.","example":"name","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"A stable code for what is wrong with the value.","example":"FieldRequired","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person.","example":"Please fill this in.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"details.additionalProperties","typeLabel":"any"},"description":"Data your code may need to act on the failure, such as ids or limits. Never text for people.","uniqueKey":"details","typeLabel":"object"},"ref":{"type":"string","description":"Sent only when the failure was on our side. Quote it to support so they can find the request. It matches the `x-request-id` response header.","example":"3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b","uniqueKey":"ref","typeLabel":"string"},"code":{"type":"string","description":"An older copy of the code, still sent on some refusals, such as a full plan or a project that is still switched on. Branch on `error` instead.","example":"SubAccountCapReached","uniqueKey":"code","typeLabel":"string"},"requiredScope":{"type":"string","description":"Sent when the access key lacks a permission: the one this route needs.","example":"projects:write","uniqueKey":"requiredScope","typeLabel":"string"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"success":false,"error":"InsufficientScope","message":"This access key does not allow this action. Please ask your account admin to change its permissions.","requiredScope":"projects:write"}}},"exampleType":"examples"}},"exampleType":"examples"},"979f9510-c9ad-4968-958d-14d2fd346c2c":{"description":"Resource not found or not visible to the caller.","content":{"application/json":{"schema":{"type":"object","description":"The error envelope, plus the fields some project refusals and the permission checks add.","required":["success","error","message"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"A stable code for what went wrong. Branch on this: the same failure always answers with the same code.","example":"NotFound","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person: what happened and what to do next. Show it, never parse it: the wording can change, and browser users get it in their own language. API keys and OAuth apps always get English.","example":"We couldn't find that. It may have been moved or deleted.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Sent when specific fields were refused: one entry for each field to fix.","items":{"type":"object","additionalProperties":false,"required":["field","code","message"],"properties":{"field":{"type":"string","description":"Where the value sits in the request, as a dotted path.","example":"name","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"A stable code for what is wrong with the value.","example":"FieldRequired","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person.","example":"Please fill this in.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"details.additionalProperties","typeLabel":"any"},"description":"Data your code may need to act on the failure, such as ids or limits. Never text for people.","uniqueKey":"details","typeLabel":"object"},"ref":{"type":"string","description":"Sent only when the failure was on our side. Quote it to support so they can find the request. It matches the `x-request-id` response header.","example":"3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b","uniqueKey":"ref","typeLabel":"string"},"code":{"type":"string","description":"An older copy of the code, still sent on some refusals, such as a full plan or a project that is still switched on. Branch on `error` instead.","example":"SubAccountCapReached","uniqueKey":"code","typeLabel":"string"},"requiredScope":{"type":"string","description":"Sent when the access key lacks a permission: the one this route needs.","example":"projects:write","uniqueKey":"requiredScope","typeLabel":"string"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"success":false,"error":"ProjectNotFound","message":"We couldn't find that project. Please refresh and try again."}}},"exampleType":"examples"}},"exampleType":"examples"},"e2a18b4c-51be-4ece-9bae-044a7ac0c861":{"description":"The requested change conflicts with the current account state.","content":{"application/json":{"schema":{"type":"object","description":"The error envelope, plus the fields some project refusals and the permission checks add.","required":["success","error","message"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"A stable code for what went wrong. Branch on this: the same failure always answers with the same code.","example":"NotFound","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person: what happened and what to do next. Show it, never parse it: the wording can change, and browser users get it in their own language. API keys and OAuth apps always get English.","example":"We couldn't find that. It may have been moved or deleted.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Sent when specific fields were refused: one entry for each field to fix.","items":{"type":"object","additionalProperties":false,"required":["field","code","message"],"properties":{"field":{"type":"string","description":"Where the value sits in the request, as a dotted path.","example":"name","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"A stable code for what is wrong with the value.","example":"FieldRequired","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person.","example":"Please fill this in.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"details.additionalProperties","typeLabel":"any"},"description":"Data your code may need to act on the failure, such as ids or limits. Never text for people.","uniqueKey":"details","typeLabel":"object"},"ref":{"type":"string","description":"Sent only when the failure was on our side. Quote it to support so they can find the request. It matches the `x-request-id` response header.","example":"3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b","uniqueKey":"ref","typeLabel":"string"},"code":{"type":"string","description":"An older copy of the code, still sent on some refusals, such as a full plan or a project that is still switched on. Branch on `error` instead.","example":"SubAccountCapReached","uniqueKey":"code","typeLabel":"string"},"requiredScope":{"type":"string","description":"Sent when the access key lacks a permission: the one this route needs.","example":"projects:write","uniqueKey":"requiredScope","typeLabel":"string"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"success":false,"error":"SubAccountCapReached","message":"Your plan has no room for another active sub-account. Please upgrade, or deactivate one to make room.","code":"SubAccountCapReached","details":{"current":3,"cap":3,"entitlementPlanCode":"BASIC"}}}},"exampleType":"examples"}},"exampleType":"examples"},"10ee8f51-637a-4dcf-93f9-22eda0bb5d3a":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","description":"The error envelope, plus the fields some project refusals and the permission checks add.","required":["success","error","message"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"A stable code for what went wrong. Branch on this: the same failure always answers with the same code.","example":"NotFound","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person: what happened and what to do next. Show it, never parse it: the wording can change, and browser users get it in their own language. API keys and OAuth apps always get English.","example":"We couldn't find that. It may have been moved or deleted.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Sent when specific fields were refused: one entry for each field to fix.","items":{"type":"object","additionalProperties":false,"required":["field","code","message"],"properties":{"field":{"type":"string","description":"Where the value sits in the request, as a dotted path.","example":"name","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"A stable code for what is wrong with the value.","example":"FieldRequired","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person.","example":"Please fill this in.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"details.additionalProperties","typeLabel":"any"},"description":"Data your code may need to act on the failure, such as ids or limits. Never text for people.","uniqueKey":"details","typeLabel":"object"},"ref":{"type":"string","description":"Sent only when the failure was on our side. Quote it to support so they can find the request. It matches the `x-request-id` response header.","example":"3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b","uniqueKey":"ref","typeLabel":"string"},"code":{"type":"string","description":"An older copy of the code, still sent on some refusals, such as a full plan or a project that is still switched on. Branch on `error` instead.","example":"SubAccountCapReached","uniqueKey":"code","typeLabel":"string"},"requiredScope":{"type":"string","description":"Sent when the access key lacks a permission: the one this route needs.","example":"projects:write","uniqueKey":"requiredScope","typeLabel":"string"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"success":false,"error":"TooManyRequests","message":"That's a lot at once. Please wait a moment and try again."}}},"exampleType":"examples"}},"exampleType":"examples"},"82adc886-61a2-4b72-83b9-c2667e53f427":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","description":"The error envelope, plus the fields some project refusals and the permission checks add.","required":["success","error","message"],"properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","description":"A stable code for what went wrong. Branch on this: the same failure always answers with the same code.","example":"NotFound","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person: what happened and what to do next. Show it, never parse it: the wording can change, and browser users get it in their own language. API keys and OAuth apps always get English.","example":"We couldn't find that. It may have been moved or deleted.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Sent when specific fields were refused: one entry for each field to fix.","items":{"type":"object","additionalProperties":false,"required":["field","code","message"],"properties":{"field":{"type":"string","description":"Where the value sits in the request, as a dotted path.","example":"name","isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"A stable code for what is wrong with the value.","example":"FieldRequired","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"One plain sentence for a person.","example":"Please fill this in.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"details":{"type":"object","additionalProperties":{"oneOf":[{}],"uniqueKey":"details.additionalProperties","typeLabel":"any"},"description":"Data your code may need to act on the failure, such as ids or limits. Never text for people.","uniqueKey":"details","typeLabel":"object"},"ref":{"type":"string","description":"Sent only when the failure was on our side. Quote it to support so they can find the request. It matches the `x-request-id` response header.","example":"3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b","uniqueKey":"ref","typeLabel":"string"},"code":{"type":"string","description":"An older copy of the code, still sent on some refusals, such as a full plan or a project that is still switched on. Branch on `error` instead.","example":"SubAccountCapReached","uniqueKey":"code","typeLabel":"string"},"requiredScope":{"type":"string","description":"Sent when the access key lacks a permission: the one this route needs.","example":"projects:write","uniqueKey":"requiredScope","typeLabel":"string"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"success":false,"error":"Internal","message":"Something went wrong on our side. Please try again in a moment.","ref":"3f2b8c1e-7d4a-4f8e-9b6a-2c1d0e5f7a9b"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"7b880f16-6ef2-4dbd-a7c0-5c43b07f2aa7":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"Send your API key as `Authorization: Bearer YOUR_API_KEY`.","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"88d5d637-2e2c-4ce7-820a-47bfc398ed43":{"url":"https://api.teamfollowup.ai","description":"Production API origin. Public API paths are under /api."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"Send your API key as `Authorization: Bearer YOUR_API_KEY`.","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Send your API key as `Authorization: Bearer YOUR_API_KEY`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"teamfollowupai","siteName":"Team Follow Up API Docs","title":"Update project - Team Follow Up API Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-24T02:58:24.253Z","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=\"dark\"}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=\"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: agency_admin. A project the Free plan\u0026#x27;s sub-account limit locks (planLocked: true) accepts only active: false and refuses every other change with 403 PLAN_SUBACCOUNT_LIMIT. On the Free plan, activating a project when 3 are already active returns 409 SubAccountCapReached. Required API key scope: projects:write.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Team Follow Up API Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/teamfollowupai/SX0A_MKwmcLqeq0O/_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/teamfollowupai/SX0A_MKwmcLqeq0O/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/teamfollowupai/SX0A_MKwmcLqeq0O/_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/teamfollowupai/SX0A_MKwmcLqeq0O/_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/teamfollowupai/SX0A_MKwmcLqeq0O/_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/teamfollowupai/SX0A_MKwmcLqeq0O/_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/teamfollowupai/SX0A_MKwmcLqeq0O/_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/teamfollowupai/SX0A_MKwmcLqeq0O/_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/teamfollowupai/SX0A_MKwmcLqeq0O/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update project - Team Follow Up API Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: agency_admin. A project the Free plan\u0026#x27;s sub-account limit locks (planLocked: true) accepts only active: false and refuses every other change with 403 PLAN_SUBACCOUNT_LIMIT. On the Free plan, activating a project when 3 are already active returns 409 SubAccountCapReached. Required API key scope: projects:write.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Team Follow Up API Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.teamfollowup.ai/api-reference/projects/update-project\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://teamfollowupai.mintlify.app/_mintlify/api/og/v2?division=Projects\u0026amp;title=Update+project\u0026amp;description=Update+project+settings+such+as+live+state%2C+display+name%2C+knowledge+base%2C+timezone+behavior%2C+and+calling-window+override.+Customer+role%3A+%60agency_admin%60.%0A%0AA+proj\u0026amp;theme=5cb2357a13da494d28887988\u0026amp;signature=40ce6358a3a07b72ca441defcfefd3ec3f9e5fb923ae99efa6680fcc96c47e4a\">\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 - Team Follow Up API Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: agency_admin. A project the Free plan\u0026#x27;s sub-account limit locks (planLocked: true) accepts only active: false and refuses every other change with 403 PLAN_SUBACCOUNT_LIMIT. On the Free plan, activating a project when 3 are already active returns 409 SubAccountCapReached. Required API key scope: projects:write.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://teamfollowupai.mintlify.app/_mintlify/api/og/v2?division=Projects\u0026amp;title=Update+project\u0026amp;description=Update+project+settings+such+as+live+state%2C+display+name%2C+knowledge+base%2C+timezone+behavior%2C+and+calling-window+override.+Customer+role%3A+%60agency_admin%60.%0A%0AA+proj\u0026amp;theme=5cb2357a13da494d28887988\u0026amp;signature=40ce6358a3a07b72ca441defcfefd3ec3f9e5fb923ae99efa6680fcc96c47e4a\">\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/teamfollowupai/SX0A_MKwmcLqeq0O/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Team Follow Up API Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1066BC\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.teamfollowup.ai/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.teamfollowup.ai/#organization\",\"name\":\"Team Follow Up API Docs\",\"url\":\"https://docs.teamfollowup.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/teamfollowupai/-K3ftiAApBs7M-rV/logo/teamfollowup.png?fit=max\u0026auto=format\u0026n=-K3ftiAApBs7M-rV\u0026q=85\u0026s=39eb7926e7a1140e67ff17d1b49319c6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.teamfollowup.ai#website\",\"name\":\"Team Follow Up API Docs\",\"url\":\"https://docs.teamfollowup.ai\",\"publisher\":{\"@id\":\"https://docs.teamfollowup.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.teamfollowup.ai/api-reference/projects/update-project#webpage\",\"url\":\"https://docs.teamfollowup.ai/api-reference/projects/update-project\",\"name\":\"Update project\",\"description\":\"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: agency_admin. A project the Free plan's sub-account limit locks (planLocked: true) accepts only active: false and refuses every other change with 403 PLAN_SUBACCOUNT_LIMIT. On the Free plan, activating a project when 3 are already active returns 409 SubAccountCapReached. Required API key scope: projects:write.\",\"dateModified\":\"2026-10-24T02:58:24.253Z\",\"isPartOf\":{\"@id\":\"https://docs.teamfollowup.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.teamfollowup.ai/api-reference/projects/update-project#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.teamfollowup.ai/api-reference/projects/update-project#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Projects\",\"item\":\"https://docs.teamfollowup.ai/api-reference/projects\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update project\",\"item\":\"https://docs.teamfollowup.ai/api-reference/projects/update-project\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.teamfollowup.ai/api-reference/projects/update-project#apireference\",\"headline\":\"Update project\",\"name\":\"Update project\",\"description\":\"Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: agency_admin. A project the Free plan's sub-account limit locks (planLocked: true) accepts only active: false and refuses every other change with 403 PLAN_SUBACCOUNT_LIMIT. On the Free plan, activating a project when 3 are already active returns 409 SubAccountCapReached. Required API key scope: projects:write.\",\"url\":\"https://docs.teamfollowup.ai/api-reference/projects/update-project\",\"mainEntityOfPage\":{\"@id\":\"https://docs.teamfollowup.ai/api-reference/projects/update-project#webpage\"},\"dateModified\":\"2026-10-24T02:58:24.253Z\",\"publisher\":{\"@id\":\"https://docs.teamfollowup.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.teamfollowup.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Team Follow Up API Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Team Follow Up API Docs","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","icon":"code-xml","pages":[{"title":"API reference","sidebarTitle":"Overview","href":"/api-reference/overview"},{"group":"Developer setup","pages":[{"title":"Authentication","href":"/authentication"},{"title":"Connect an AI assistant","sidebarTitle":"Connect an AI assistant","href":"/mcp-actions"},{"title":"Conventions","href":"/conventions"}]},{"group":"Agents","icon":"bot","expanded":false,"pages":[{"title":"Agents API","sidebarTitle":"Overview","href":"/api-reference/agents"},{"group":"Identity and settings","expanded":false,"pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents","href":"/api-reference/agents/list-agents"},{"title":"Create agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents","href":"/api-reference/agents/create-agent"},{"title":"Get agent","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents/{id}","href":"/api-reference/agents/get-agent"},{"title":"Update agent","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/agent-builder/agents/{id}","href":"/api-reference/agents/update-agent"},{"title":"Delete agent","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/agent-builder/agents/{id}","href":"/api-reference/agents/delete-agent"},{"title":"Clone agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/clone","href":"/api-reference/agents/clone-agent"}]},{"group":"Split testing","expanded":false,"pages":[{"title":"Split Testing API","sidebarTitle":"Overview","href":"/api-reference/split-testing"},{"title":"Get split test","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents/{id}/split-test","href":"/api-reference/agents/get-split-test"},{"title":"Convert campaign to split test","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/split-test/convert","href":"/api-reference/agents/convert-campaign-to-split-test"},{"title":"Update split weights","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/agent-builder/agents/{id}/split-test","href":"/api-reference/agents/update-split-weights"},{"title":"Add split variant","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/split-test/variants","href":"/api-reference/agents/add-split-variant"},{"title":"Remove split variant","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/agent-builder/agents/{id}/split-test/variants/{variantAgentId}","href":"/api-reference/agents/remove-split-variant"},{"title":"Rename split variant","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/agent-builder/agents/{id}/split-test/variants/{variantAgentId}","href":"/api-reference/agents/rename-split-variant"}]},{"group":"Conversation testing","expanded":false,"pages":[{"title":"Create test call","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/test-call","href":"/api-reference/agents/create-test-call"},{"title":"Create web agent session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/web-version/session","href":"/api-reference/agents/create-web-agent-session"}]}]},{"group":"TFU Live","icon":"audio-lines","expanded":false,"pages":[{"title":"TFU Live authoring","sidebarTitle":"Overview","href":"/api-reference/tfu-live"},{"title":"Build a TFU Live agent","href":"/tfu-live/authoring"},{"title":"Workflows contract","href":"/tfu-live/workflows-contract"},{"title":"TFU Live builder guidance","href":"/tfu-live/builder-guidance"},{"title":"TFU Live master families","href":"/tfu-live/master-families"},{"title":"Connect GoHighLevel to a TFU Live rep","href":"/tfu-live/connect-gohighlevel"},{"title":"Give a TFU Live rep a phone number","href":"/tfu-live/numbers"},{"title":"Take a TFU Live rep live, or pause it","href":"/tfu-live/go-live"},{"title":"Set up a TFU Live rep's campaign","href":"/tfu-live/campaign-settings"},{"title":"Create TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents","href":"/api-reference/tfu-live/create-tfu-live-agent"},{"title":"List TFU Live agents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents","href":"/api-reference/tfu-live/list-tfu-live-agents"},{"title":"List TFU Live Brain templates","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/brain-templates","href":"/api-reference/tfu-live/list-tfu-live-brain-templates"},{"title":"List TFU Live voices","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/voices","href":"/api-reference/tfu-live/list-tfu-live-voices"},{"title":"Research a business website","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/website-intake","href":"/api-reference/tfu-live/research-a-business-website"},{"title":"Read website research","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/website-intake/{requestId}","href":"/api-reference/tfu-live/read-website-research"},{"title":"Get TFU Live creation status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/creation/{requestId}","href":"/api-reference/tfu-live/get-tfu-live-creation-status"},{"title":"Check TFU Live go-live readiness","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/go-live-check","href":"/api-reference/tfu-live/check-tfu-live-go-live-readiness"},{"title":"Go live with TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/go-live","href":"/api-reference/tfu-live/go-live-with-tfu-live-agent"},{"title":"Pause TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/pause","href":"/api-reference/tfu-live/pause-tfu-live-agent"},{"title":"Get TFU Live agent numbers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/numbers","href":"/api-reference/tfu-live/get-tfu-live-agent-numbers"},{"title":"Search TFU Live agent numbers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/numbers/available","href":"/api-reference/tfu-live/search-tfu-live-agent-numbers"},{"title":"Quote a TFU Live number","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/numbers/quote","href":"/api-reference/tfu-live/quote-a-tfu-live-number"},{"title":"Buy a TFU Live number","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/numbers/purchase","href":"/api-reference/tfu-live/buy-a-tfu-live-number"},{"title":"List numbers to connect to a TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/numbers/attachable","href":"/api-reference/tfu-live/list-numbers-to-connect-to-a-tfu-live-agent"},{"title":"Connect a number to a TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/numbers/attach","href":"/api-reference/tfu-live/connect-a-number-to-a-tfu-live-agent"},{"title":"Get TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}","href":"/api-reference/tfu-live/get-tfu-live-agent"},{"title":"Update TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/tfu-live-agents/{id}","href":"/api-reference/tfu-live/update-tfu-live-agent"},{"title":"Delete TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/tfu-live-agents/{id}","href":"/api-reference/tfu-live/delete-tfu-live-agent"},{"title":"Set TFU Live agent labels","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/tfu-live-agents/{id}/labels","href":"/api-reference/tfu-live/set-tfu-live-agent-labels"},{"title":"Check TFU Live SMS readiness","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/chat-readiness","href":"/api-reference/tfu-live/check-tfu-live-sms-readiness"},{"title":"Start TFU Live chat test","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/chat-tests","href":"/api-reference/tfu-live/start-tfu-live-chat-test"},{"title":"Get TFU Live chat test","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/chat-tests/{sessionId}","href":"/api-reference/tfu-live/get-tfu-live-chat-test"},{"title":"Send TFU Live chat test messages","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/chat-tests/{sessionId}/messages","href":"/api-reference/tfu-live/send-tfu-live-chat-test-messages"},{"title":"End TFU Live chat test","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/chat-tests/{sessionId}/end","href":"/api-reference/tfu-live/end-tfu-live-chat-test"},{"title":"Process pending TFU Live test texts","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/chat-tests/{sessionId}/settle","href":"/api-reference/tfu-live/process-pending-tfu-live-test-texts"},{"title":"Get TFU Live test callbacks","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/chat-tests/{sessionId}/callbacks","href":"/api-reference/tfu-live/get-tfu-live-test-callbacks"},{"title":"Set TFU Live test callback outcome","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/chat-tests/{sessionId}/callbacks/{callbackId}/disposition","href":"/api-reference/tfu-live/set-tfu-live-test-callback-outcome"},{"title":"Prepare TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/prepare","href":"/api-reference/tfu-live/prepare-tfu-live-agent"},{"title":"Sync TFU Live workflows","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/sync-workflows","href":"/api-reference/tfu-live/sync-tfu-live-workflows"},{"title":"Restore TFU Live agent revision","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/restore","href":"/api-reference/tfu-live/restore-tfu-live-agent-revision"},{"title":"Make a TFU Live version of an existing agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/from-legacy","href":"/api-reference/tfu-live/make-a-tfu-live-version-of-an-existing-agent"},{"title":"Clone TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/clone","href":"/api-reference/tfu-live/clone-tfu-live-agent"},{"title":"Move TFU Live agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/move","href":"/api-reference/tfu-live/move-tfu-live-agent"},{"title":"Create TFU Live GoHighLevel install link","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/crm-connection","href":"/api-reference/tfu-live/create-tfu-live-gohighlevel-install-link"},{"title":"Check TFU Live GoHighLevel connection","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/crm-connection","href":"/api-reference/tfu-live/check-tfu-live-gohighlevel-connection"},{"title":"Set TFU Live agent orb colour","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/tfu-live-agents/{id}/orb","href":"/api-reference/tfu-live/set-tfu-live-agent-orb-colour"},{"title":"Issue TFU Live test links","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/test-share-links","href":"/api-reference/tfu-live/issue-tfu-live-test-links"},{"title":"Revoke TFU Live test links","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/tfu-live-agents/{id}/test-share-links/{scope}","href":"/api-reference/tfu-live/revoke-tfu-live-test-links"},{"title":"Get TFU Live catalog","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/brain/catalog","href":"/api-reference/tfu-live/get-tfu-live-catalog"},{"title":"Get TFU Live operation support","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/operations","href":"/api-reference/tfu-live/get-tfu-live-operation-support"},{"title":"List TFU Live workflows","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/workflows","href":"/api-reference/tfu-live/list-tfu-live-workflows"},{"title":"Create TFU Live workflow","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/workflows","href":"/api-reference/tfu-live/create-tfu-live-workflow"},{"title":"Validate TFU Live workflows","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/tfu-live-agents/{id}/workflows/validate","href":"/api-reference/tfu-live/validate-tfu-live-workflows"},{"title":"Get TFU Live workflow","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/workflows/{workflowId}","href":"/api-reference/tfu-live/get-tfu-live-workflow"},{"title":"Replace TFU Live workflow","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/tfu-live-agents/{id}/workflows/{workflowId}","href":"/api-reference/tfu-live/replace-tfu-live-workflow"},{"title":"Delete TFU Live workflow","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/tfu-live-agents/{id}/workflows/{workflowId}","href":"/api-reference/tfu-live/delete-tfu-live-workflow"},{"title":"Look up TFU Live resources","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/tfu-live-agents/{id}/resources/{kind}","href":"/api-reference/tfu-live/look-up-tfu-live-resources"},{"title":"Read TFU Live master campaign families","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/projects/{locationId}/tfu-live-families","href":"/api-reference/tfu-live/read-tfu-live-master-campaign-families"},{"title":"Set a TFU Live master campaign family","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/agent-builder/projects/{locationId}/tfu-live-families/{profileId}","href":"/api-reference/tfu-live/set-a-tfu-live-master-campaign-family"}]},{"group":"In-call Capabilities","icon":"puzzle","expanded":false,"pages":[{"title":"Skills \u0026 Tools API","sidebarTitle":"Overview","href":"/api-reference/skills-and-tools"},{"title":"List available tools","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/tools","href":"/api-reference/in-call-capabilities/list-available-tools"},{"title":"Update a tool description","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/agent-builder/agents/{id}/tools","href":"/api-reference/in-call-capabilities/update-a-tool-description"},{"group":"Individual skills","expanded":false,"pages":[{"title":"List agent skills","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents/{id}/skills","href":"/api-reference/in-call-capabilities/list-agent-skills"},{"title":"Create an agent skill","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/skills","href":"/api-reference/in-call-capabilities/create-an-agent-skill"},{"title":"Update one agent skill","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/agent-builder/agents/{id}/skills/{skillId}","href":"/api-reference/in-call-capabilities/update-one-agent-skill"},{"title":"Delete one agent skill","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/agent-builder/agents/{id}/skills/{skillId}","href":"/api-reference/in-call-capabilities/delete-one-agent-skill"}]}]},{"group":"Campaigns","icon":"phone","expanded":false,"pages":[{"title":"Campaigns API","sidebarTitle":"Overview","href":"/api-reference/campaigns"},{"title":"Get campaign","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents/{id}/campaign","href":"/api-reference/campaigns/get-campaign"},{"title":"Update campaign","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/agent-builder/agents/{id}/campaign","href":"/api-reference/campaigns/update-campaign"},{"title":"Enroll existing leads","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/campaign/enroll-existing-leads","href":"/api-reference/campaigns/enroll-existing-leads"},{"group":"Power Dialer","expanded":false,"pages":[{"title":"Power Dialer API","sidebarTitle":"Overview","href":"/api-reference/power-dialer"},{"title":"Get queue summary","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/power-dialer/summary","href":"/api-reference/campaigns/get-queue-summary"},{"title":"Get pipeline steps","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/power-dialer/pipeline/steps","href":"/api-reference/campaigns/get-pipeline-steps"},{"title":"List pipeline leads","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/power-dialer/pipeline/leads","href":"/api-reference/campaigns/list-pipeline-leads"},{"title":"List callback leads","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/power-dialer/pipeline/callbacks","href":"/api-reference/campaigns/list-callback-leads"},{"title":"List parked speed-to-lead leads","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/power-dialer/pipeline/s2l-parked","href":"/api-reference/campaigns/list-parked-speed-to-lead-leads"},{"title":"Run lead touchpoints now","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/power-dialer/run-now","href":"/api-reference/campaigns/run-lead-touchpoints-now"},{"title":"Move leads to another step","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/power-dialer/move","href":"/api-reference/campaigns/move-leads-to-another-step"},{"title":"Remove leads from cadence","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/power-dialer/remove","href":"/api-reference/campaigns/remove-leads-from-cadence"}]},{"group":"Call results","expanded":false,"pages":[{"title":"Campaign Workflows API","sidebarTitle":"Overview","href":"/api-reference/campaign-workflows"},{"title":"Get the campaign workflow","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents/{id}/campaign/workflow","href":"/api-reference/campaigns/get-the-campaign-workflow"},{"title":"Add actions to an outcome","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/campaign/workflow/outcomes/{outcome}/nodes","href":"/api-reference/campaigns/add-actions-to-an-outcome"},{"title":"Replace the entire workflow","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/agent-builder/agents/{id}/campaign/workflow","href":"/api-reference/campaigns/replace-the-entire-workflow"},{"title":"Update settings or node contents","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/agent-builder/agents/{id}/campaign/workflow","href":"/api-reference/campaigns/update-settings-or-node-contents"},{"title":"Remove a workflow node","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/agent-builder/agents/{id}/campaign/workflow/nodes/{nodeId}","href":"/api-reference/campaigns/remove-a-workflow-node"}]},{"group":"Campaign testing","expanded":false,"pages":[{"title":"Create campaign test run","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/campaign/test-runs","href":"/api-reference/campaigns/create-campaign-test-run"},{"title":"Get campaign test run status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents/{id}/campaign/test-runs/{intentId}","href":"/api-reference/campaigns/get-campaign-test-run-status"},{"title":"List campaign runs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents/{id}/campaign/runs","href":"/api-reference/campaigns/list-campaign-runs"}]}]},{"group":"Master agent","icon":"layers","expanded":false,"pages":[{"title":"Get master agent state","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/agents/{id}/campaign/master","href":"/api-reference/master-agent/get-master-agent-state"},{"title":"Link a project to this master agent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/agents/{id}/campaign/master/projects","href":"/api-reference/master-agent/link-a-project-to-this-master-agent"}]},{"group":"Phone Numbers","icon":"phone-call","expanded":false,"pages":[{"title":"Phone Numbers API","sidebarTitle":"Overview","href":"/api-reference/phone-numbers"},{"group":"Find numbers","expanded":false,"pages":[{"title":"List phone numbers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/phone-numbers","href":"/api-reference/phone-numbers/list-phone-numbers"},{"title":"Search phone numbers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/phone-numbers/search","href":"/api-reference/phone-numbers/search-phone-numbers"}]},{"group":"Agent assignments","expanded":false,"pages":[{"title":"Assign phone number","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/phone-numbers/{number}/assign","href":"/api-reference/phone-numbers/assign-phone-number"},{"title":"Unassign phone number","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/agent-builder/phone-numbers/{number}/campaigns/{campaignId}","href":"/api-reference/phone-numbers/unassign-phone-number"},{"title":"Move phone number","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/phone-numbers/{number}/campaigns/{campaignId}/move","href":"/api-reference/phone-numbers/move-phone-number"}]},{"group":"Buy and release","expanded":false,"pages":[{"title":"Buy phone number","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/phone-numbers","href":"/api-reference/phone-numbers/buy-phone-number"},{"title":"Release phone number","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/agent-builder/phone-numbers/{number}","href":"/api-reference/phone-numbers/release-phone-number"}]}]},{"group":"Voices","icon":"audio-lines","expanded":false,"pages":[{"title":"Voices API","sidebarTitle":"Overview","href":"/api-reference/voices"},{"title":"List voices","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/voices","href":"/api-reference/voices/list-voices"},{"title":"Get voice","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/voices/{voiceId}","href":"/api-reference/voices/get-voice"},{"title":"Search for a voice to add","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/voices/search","href":"/api-reference/voices/search-for-a-voice-to-add"},{"title":"List added voices","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/voices/library","href":"/api-reference/voices/list-added-voices"},{"title":"Add a voice","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/agent-builder/voices/library","href":"/api-reference/voices/add-a-voice"},{"title":"Preview removing a voice","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/agent-builder/voices/library/{providerVoiceId}/impact","href":"/api-reference/voices/preview-removing-a-voice"},{"title":"Remove a voice","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/agent-builder/voices/library/{providerVoiceId}","href":"/api-reference/voices/remove-a-voice"}]},{"group":"Projects","icon":"folder","expanded":false,"pages":[{"title":"Projects API","sidebarTitle":"Overview","href":"/api-reference/projects"},{"title":"List projects","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v2/projects","href":"/api-reference/projects/list-projects"},{"title":"Create native sub-account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v2/projects/native","href":"/api-reference/projects/create-native-sub-account"},{"title":"Get project","description":"Fetch a single visible project, including its campaigns and live connection state. Customer role: `agency_admin`.\n\nRequired API key scope: `projects:read`.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v2/projects/{id}","href":"/api-reference/projects/get-project"},{"title":"Update project","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/v2/projects/{id}","href":"/api-reference/projects/update-project"},{"title":"Delete project","description":"Disconnect and hide a project from the customer workspace. Customer role: `agency_admin`.\n\nRequired API key scope: `projects:delete`.","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v2/projects/{id}","href":"/api-reference/projects/delete-project"}]},{"group":"Calls","icon":"history","expanded":false,"pages":[{"title":"Calls API","sidebarTitle":"Overview","href":"/api-reference/calls"},{"title":"List calls","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/call-history","href":"/api-reference/calls/list-calls"},{"title":"Get call","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/call-history/{callId}","href":"/api-reference/calls/get-call"},{"title":"Search call transcripts","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/call-history/transcript-search","href":"/api-reference/calls/search-call-transcripts"}]},{"group":"Contacts","icon":"users","expanded":false,"pages":[{"title":"Contacts API","sidebarTitle":"Overview","href":"/api-reference/contacts"},{"title":"List contacts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/contacts","href":"/api-reference/contacts/list-contacts"},{"title":"Get contact","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/contacts/{contactId}","href":"/api-reference/contacts/get-contact"},{"title":"Update contact","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/contacts/{contactId}","href":"/api-reference/contacts/update-contact"},{"title":"Add a contact","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/contacts/add/{locationId}","href":"/api-reference/contacts/add-a-contact"}]},{"group":"Native Contacts","icon":"user-round","expanded":false,"pages":[{"title":"Native Contacts API","sidebarTitle":"Overview","href":"/api-reference/native-contacts"},{"title":"List native contacts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-contacts","href":"/api-reference/native-contacts/list-native-contacts"},{"title":"Create a native contact","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts","href":"/api-reference/native-contacts/create-a-native-contact"},{"title":"List custom fields","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-contacts/fields","href":"/api-reference/native-contacts/list-custom-fields"},{"title":"Create a custom field","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/fields","href":"/api-reference/native-contacts/create-a-custom-field"},{"title":"Update a custom field","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/native-contacts/fields/{key}","href":"/api-reference/native-contacts/update-a-custom-field"},{"title":"Delete a custom field","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/native-contacts/fields/{key}","href":"/api-reference/native-contacts/delete-a-custom-field"},{"title":"Get the lead link","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-contacts/lead-webhook","href":"/api-reference/native-contacts/get-the-lead-link"},{"title":"Rotate the lead link","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/lead-webhook/rotate","href":"/api-reference/native-contacts/rotate-the-lead-link"},{"title":"Import contacts from CSV","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/import","href":"/api-reference/native-contacts/import-contacts-from-csv"},{"title":"Put contacts into a campaign","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/enroll","href":"/api-reference/native-contacts/put-contacts-into-a-campaign"},{"title":"Stop calling several native contacts","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/bulk-do-not-call","href":"/api-reference/native-contacts/stop-calling-several-native-contacts"},{"title":"Delete several native contacts","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/bulk-delete","href":"/api-reference/native-contacts/delete-several-native-contacts"},{"title":"Get a native contact","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-contacts/{contactId}","href":"/api-reference/native-contacts/get-a-native-contact"},{"title":"Update a native contact","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/native-contacts/{contactId}","href":"/api-reference/native-contacts/update-a-native-contact"},{"title":"Delete a native contact","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/native-contacts/{contactId}","href":"/api-reference/native-contacts/delete-a-native-contact"},{"title":"Preview a native contact delete","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-contacts/{contactId}/delete-preview","href":"/api-reference/native-contacts/preview-a-native-contact-delete"},{"title":"Set native contact do-not-call","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/{contactId}/do-not-call","href":"/api-reference/native-contacts/set-native-contact-do-not-call"},{"title":"Add a native contact note","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/{contactId}/notes","href":"/api-reference/native-contacts/add-a-native-contact-note"},{"title":"Add to contact memory","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/{contactId}/memory","href":"/api-reference/native-contacts/add-to-contact-memory"},{"title":"Update a contact memory entry","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/native-contacts/{contactId}/memory/{entryId}","href":"/api-reference/native-contacts/update-a-contact-memory-entry"},{"title":"Delete a contact memory entry","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/native-contacts/{contactId}/memory/{entryId}","href":"/api-reference/native-contacts/delete-a-contact-memory-entry"},{"title":"Cancel a native contact callback","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-contacts/{contactId}/callback/cancel","href":"/api-reference/native-contacts/cancel-a-native-contact-callback"}]},{"group":"Native Calendar","icon":"calendar","expanded":false,"pages":[{"title":"Native Calendar API","sidebarTitle":"Overview","href":"/api-reference/native-calendar"},{"title":"List calendars","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-calendar/calendars","href":"/api-reference/native-calendar/list-calendars"},{"title":"Create a calendar","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/calendars","href":"/api-reference/native-calendar/create-a-calendar"},{"title":"Preview slots for a calendar definition","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/calendars/preview","href":"/api-reference/native-calendar/preview-slots-for-a-calendar-definition"},{"title":"Get a calendar","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-calendar/calendars/{calendarId}","href":"/api-reference/native-calendar/get-a-calendar"},{"title":"Update a calendar","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/native-calendar/calendars/{calendarId}","href":"/api-reference/native-calendar/update-a-calendar"},{"title":"Delete a calendar","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/native-calendar/calendars/{calendarId}","href":"/api-reference/native-calendar/delete-a-calendar"},{"title":"Get free slots","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-calendar/calendars/{calendarId}/free-slots","href":"/api-reference/native-calendar/get-free-slots"},{"title":"List appointments for a contact","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-calendar/appointments","href":"/api-reference/native-calendar/list-appointments-for-a-contact"},{"title":"Book an appointment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/appointments","href":"/api-reference/native-calendar/book-an-appointment"},{"title":"List appointments in a window","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-calendar/appointments/range","href":"/api-reference/native-calendar/list-appointments-in-a-window"},{"title":"Cancel an appointment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/appointments/{appointmentId}/cancel","href":"/api-reference/native-calendar/cancel-an-appointment"},{"title":"Confirm an appointment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/appointments/{appointmentId}/confirm","href":"/api-reference/native-calendar/confirm-an-appointment"},{"title":"Reschedule an appointment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/appointments/{appointmentId}/reschedule","href":"/api-reference/native-calendar/reschedule-an-appointment"},{"title":"Add an event","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/events","href":"/api-reference/native-calendar/add-an-event"},{"title":"List calendar connections","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-calendar/connections","href":"/api-reference/native-calendar/list-calendar-connections"},{"title":"Connect a calendar system","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/connections/{providerId}/token","href":"/api-reference/native-calendar/connect-a-calendar-system"},{"title":"Disconnect a calendar system","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/native-calendar/connections/{providerId}/disconnect","href":"/api-reference/native-calendar/disconnect-a-calendar-system"},{"title":"List linked calendars","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-calendar/providers/{providerId}/calendars","href":"/api-reference/native-calendar/list-linked-calendars"},{"title":"List linked bookings","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/native-calendar/providers/{providerId}/appointments","href":"/api-reference/native-calendar/list-linked-bookings"}]},{"group":"Analytics","icon":"chart-column","expanded":false,"pages":[{"title":"Analytics API","sidebarTitle":"Overview","href":"/api-reference/analytics"},{"title":"Get analytics summary","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/dashboard/analytics","href":"/api-reference/analytics/get-analytics-summary"},{"title":"Get analytics by lead age","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/dashboard/analytics/lead-age","href":"/api-reference/analytics/get-analytics-by-lead-age"},{"title":"Get booking rate by project","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/dashboard/booking-rate-by-project","href":"/api-reference/analytics/get-booking-rate-by-project"},{"title":"Get transfer rate by project","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/dashboard/transfer-rate-by-project","href":"/api-reference/analytics/get-transfer-rate-by-project"}]},{"group":"Billing","icon":"wallet","expanded":false,"pages":[{"title":"Billing API","sidebarTitle":"Overview","href":"/api-reference/billing"},{"title":"Get billing summary","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/billing/summary","href":"/api-reference/billing/get-billing-summary"},{"title":"List billing transactions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/billing/transactions","href":"/api-reference/billing/list-billing-transactions"},{"title":"Get billing usage","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/billing/usage","href":"/api-reference/billing/get-billing-usage"},{"title":"List billing documents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/billing/documents","href":"/api-reference/billing/list-billing-documents"},{"title":"List sub-account wallets","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/billing/sub-accounts","href":"/api-reference/billing/list-sub-account-wallets"},{"title":"Get sub-account wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/billing/sub-accounts/{locationId}","href":"/api-reference/billing/get-sub-account-wallet"},{"title":"Update agency auto-recharge","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/billing/auto-recharge","href":"/api-reference/billing/update-agency-auto-recharge"},{"title":"Buy a plan","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/billing/purchases","href":"/api-reference/billing/buy-a-plan"},{"title":"Update sub-account rebilling","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/billing/sub-accounts/{locationId}/rebilling","href":"/api-reference/billing/update-sub-account-rebilling"},{"title":"Enable rebilling with a charge","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/billing/sub-accounts/{locationId}/rebilling/enable-with-charge","href":"/api-reference/billing/enable-rebilling-with-a-charge"},{"title":"Charge a sub-account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/billing/sub-accounts/{locationId}/charges","href":"/api-reference/billing/charge-a-sub-account"},{"title":"Update sub-account auto-recharge","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/billing/sub-accounts/{locationId}/auto-recharge","href":"/api-reference/billing/update-sub-account-auto-recharge"},{"title":"Update sub-account Credit Guard","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/billing/sub-accounts/{locationId}/credit-guard","href":"/api-reference/billing/update-sub-account-credit-guard"},{"title":"Update Credit Guard for sub-accounts","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/billing/sub-accounts/credit-guard","href":"/api-reference/billing/update-credit-guard-for-sub-accounts"},{"title":"Link a Stripe customer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/billing/customer-links","href":"/api-reference/billing/link-a-stripe-customer"},{"title":"Unlink a Stripe customer","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/billing/sub-accounts/{locationId}/customer-link","href":"/api-reference/billing/unlink-a-stripe-customer"}]}]},{"tab":"Changelog","icon":"book","pages":[{"title":"Changelog","href":"/changelog"}]}]},"title":"Update project - Team Follow Up API Docs","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-BRm_l__d.js","utils-f1l1Oc-G.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BlhqDhJO.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DHCB7rsC.js","snippetPresets-CYXLx6Hv.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-B78P2dEq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C4YLPVAh.js","shallow-vlLnTDkQ.js","getApiPlaygroundDisplay-D_98hhvf.js","CodeSnippet-DtnZHGqq.js","CodeSnippets-CLFb8KJt.js","Page-kQh739Uz.js","getPastedJson-Cq-zlbnU.js","icon-sN3t983t.js","MethodPill-P_YQ2s09.js","DuplicateIcon-BVzyNsGJ.js","createIcon-B3jqgqC6.js","DynamicMarkdown-Crwq6WG_.js","SectionHeading-C7pGS2Bb.js","axios-vUo_bRtp.js","Markdown-BuPH8yuW.js","clsx-CCOYKgaU.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BnkC_6oA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BM4S31-f.js"]}