Connect HubSpot to Retell AI with a private app access token: the scopes to grant, where the token lives, and how to verify the connection works.
Connecting HubSpot takes a private app access token. One connection covers both contact sync and agent functions: your agents work the portal’s contacts, deals, and companies, and Retell keeps the records current. This page covers the HubSpot-side setup and the connection itself.
This is the setup guide for using HubSpot as a CRM data source. If you want to trigger outbound calls from HubSpot workflows instead, see the HubSpot Marketplace app. The two are independent and can be used together.
Connect HubSpot when it’s your system of record and you want your agents working from it without anyone copying data between tools. It’s the right choice when you want to:
Call or text people who already exist in HubSpot. Contacts sync into Retell automatically, so your agent greets callers by name and knows their deal stage or lifecycle stage instead of asking.
Keep HubSpot current without manual data entry. Analysis results from each conversation write back to contact properties.
Give your team call history where they already work. Each call and chat appears on the contact’s activity timeline with its summary and duration.
Let the agent act on HubSpot directly.Integration tools identify the caller by number, read their deals and companies, update records the caller corrects, and book follow-up tasks.
For example, an e-commerce brand’s inbound line answers with a Retell agent that searches HubSpot for the caller’s number, sees their open deal, and logs the call to the timeline; when the caller confirms a new shipping address, the agent updates the contact property on the spot.
In HubSpot, click Development at the bottom of the left sidebar, then select Legacy Apps. Click Create legacy app in the top-right corner, then choose Private in the dialog.
The Legacy Apps page in HubSpot's Development section.
HubSpot renamed the private apps section to Legacy Apps and steers new development toward its newer developer platform. Private apps still work and remain the supported way to connect HubSpot to Retell. Some accounts still show this section as Private Apps under Settings > Integrations; if you don’t see Development in the sidebar, look there.
2
Fill in the basic info
On the Basic Info tab, enter:
Name — a descriptive name, for example Retell AI Integration.
Description — optional, for example “Syncs contacts and logs call activity for Retell AI”.
On the Scopes tab, click Add new scope, search for each scope below in Find a scope, check it, then click Update.Contact sync and activity logging need three scopes:
Scope
Required for
crm.objects.contacts.read
Importing contacts, the connection test Retell runs when you connect, and the contact lookup tools
crm.schemas.contacts.read
Reading contact property definitions: field mapping, tool configuration, and every contact read the tools make
crm.objects.contacts.write
Outbound sync, logging calls and chats to the timeline, and the contact, note, and task tools
If your agents will use the deal and company tools, also grant:
Reading deal and company property definitions, both when you configure those tools and on every read they make
HubSpot authorizes the note, task, and call engagement endpoints through the contact scopes, so there’s no separate engagement scope to grant. If a tool fails because of a missing scope, HubSpot rejects the call with a 403 whose error body names the missing scope (category MISSING_SCOPES). Grant it under Edit app and the tool starts working without reconnecting.
Grant the scopes up front. Once connected, a missing scope doesn’t flag the connection, because HubSpot answers with a 403 rather than rejecting the credentials — the affected feature just stops working silently. The exception is crm.objects.contacts.read: the connection test reads contacts, so without it connecting fails outright.
In the Retell Dashboard, open Integrations, select the Available tab, find HubSpot, and click Connect (Add Account if a connection already exists).
2
Enter the token
Fill in the fields:
Field
Value
Connection name
Alias for this connection; prefilled with HubSpot - API key.
API Key
The private app access token from Step 3.
The HubSpot connection dialog: paste the private app access token as the API key.
3
Connect and confirm
Click Connect (Add Account if a connection already exists). Retell creates the connection and immediately tests it by reading a page of contacts from HubSpot.On success the dialog reports the connection as verified and offers Set up contact sync. On failure it shows HubSpot’s own error and re-enables the field so you can paste a corrected token.
4
Verify it worked
On the Connected tab, the HubSpot connection shows as connected. Next, set up contact sync to import your contacts, or start using agent functions right away.
Go to Development > Legacy Apps and click your Retell app’s name. Next to the access token, click Rotate, then choose how the old token expires:
Rotate and expire later keeps the old token valid for 7 days. Pick this one. Retell keeps working while you swap the credential over.
Rotate and expire now kills the old token immediately, so contact sync and activity logging fail until Retell has the new one.
2
Reconnect in Retell
On the Connected tab, open the connection’s settings. The saved token shows masked; paste the new token over it and click Reconnect. Retell verifies the new token before saving, and your field mappings and synced contacts are untouched.
Go to Development > Legacy Apps, click your Retell app’s name, then click Edit app in the top-right corner to change its scopes. Adding a scope takes effect without a new token. Removing one stops the corresponding Retell feature working, without flagging the connection as broken.
Confirm the value in the API Key field is the private app access token, not HubSpot’s legacy developer API key or an OAuth client secret. Check that the app has crm.objects.contacts.read, which the connection test needs, and that the token hasn’t been rotated since you copied it.
The connection shows an error after working for a while
Retell flags a connection as errored when HubSpot rejects the credentials with an HTTP 401. The usual cause is a rotated or deleted token. Open the connection’s settings, paste a current token, and click Reconnect.
You can add multiple connections, but only one CRM connection in your workspace can drive contact sync at a time, across every provider. The Contact sync toggle in a connection’s settings decides which one; turning it on for one connection takes sync over from the previous one.
Does this replace the HubSpot Marketplace app?
No, they do different jobs. This integration syncs contacts and logs activity. The Marketplace app adds a Make a Phone Call action to HubSpot workflows so HubSpot can trigger outbound calls. You can run both.
Import your HubSpot contacts, write analysis results back, and log calls and chats to the timeline.
HubSpot agent functions
Look up callers, read their deals and companies, and create tasks and notes mid-conversation.
Trigger calls from HubSpot
Use the Marketplace app to start outbound calls from a HubSpot workflow.
CRM integrations
How contact sync, analysis mapping, and activity logging work across CRM providers.
Was this page helpful?
⌘I
{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Retell AI","description":"Explore Retell AI docs to learn how to build, test, deploy, and optimize AI voice agents with APIs, integrations, conversation flows, and production-ready tools.","colors":{"primary":"#606A78","light":"#F5F5FA","dark":"#172131"},"logo":{"light":"https://mintcdn.com/retellai/-E9UettTBfBiCBBS/images/docs-light.png?fit=max\u0026auto=format\u0026n=-E9UettTBfBiCBBS\u0026q=85\u0026s=64eb26a2d3cc9a67ee3ea0bfe086dd14","dark":"https://mintcdn.com/retellai/-E9UettTBfBiCBBS/images/docs-dark.png?fit=max\u0026auto=format\u0026n=-E9UettTBfBiCBBS\u0026q=85\u0026s=08472a0c78599498b85d23348d7826f6"},"favicon":"https://mintcdn.com/retellai/TsBk7Stx4694-7p1/logo/favicon-light.ico?fit=max\u0026auto=format\u0026n=TsBk7Stx4694-7p1\u0026q=85\u0026s=4e90f4db5e89b5ec7fe249a4844c2d97","api":{"openapi":["openapi-final.yaml"],"playground":{"display":"interactive"},"mdx":{"auth":{"method":"bearer"},"server":"https://api.retellai.com"}},"navbar":{"links":[{"icon":"message-circle-question-mark","href":"https://docs.retellai.com/general/support","label":"Support"},{"icon":"chart-line","href":"https://status.retellai.com/","label":"Status"},{"icon":"book","href":"https://www.retellai.com/changelog","label":"Changelog"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.retellai.com"}},"footer":{"socials":{"x":"https://x.com/retellai","linkedin":"https://www.linkedin.com/company/98828489","github":"https://github.com/RetellAI","instagram":"https://www.instagram.com/retell_ai","youtube":"https://www.youtube.com/@retellai"}},"fonts":{"family":"Inter"},"icons":{"library":"lucide"},"styling":{"codeblocks":"dark","latex":true},"integrations":{"mixpanel":{"projectToken":"c8676d3561adb5eefc366aa2a66725bc"}},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"interaction":{"drilldown":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"retellai","hasAudioNarration":false,"actualSubdomain":"retellai","customDomains":["docs.retellai.com"],"gitSource":{"type":"github","owner":"retellai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af60e52383ab4e7aff14108","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"Guides","count":215},{"language":"default","tag":"API Reference","count":107},{"language":"default","tag":"Build","count":68},{"language":"default","tag":"Deploy","count":35},{"language":"default","tag":"Integrations","count":30},{"language":"default","tag":"Conversation flow agents","count":24},{"language":"default","tag":"Deprecations","count":24},{"language":"default","tag":"Detailed Deprecation Guide","count":23},{"language":"default","tag":"CRM","count":21},{"language":"default","tag":"Monitor","count":17}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instinct-self-updating-docs","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@media (min-width: 1024px){#navbar .flex-1:has(>[data-slot=\"context-menu-trigger\"]),#navbar .flex-1:has(>a>.nav-logo){flex:none!important;width:15rem}#navbar .ustify-end:has(.nav-tabs),#navbar .justify-end:has(.nav-tabs){justify-content:space-between!important;margin-left:0!important}#navbar .flex:has(>.ustify-end),#navbar .flex:has(>.justify-end){flex:1!important}#navbar .nav-tabs{white-space:nowrap}}article{max-width:48rem!important}.max-w-prose{max-width:48rem!important}.max-w-xl{max-width:48rem!important}video.scroll-play{cursor:zoom-in}.video-zoom-overlay{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:4vmin;background:rgba(0, 0, 0, 0.8);backdrop-filter:blur(2px);cursor:zoom-out}.video-zoom-media{max-width:92vw;max-height:92vh;width:auto;height:auto;border-radius:12px;box-shadow:0 10px 40px rgba(0, 0, 0, 0.5);cursor:default}.video-zoom-close{position:fixed;top:16px;right:20px;display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;border-radius:999px;background:rgba(255, 255, 255, 0.15);color:#fff;font-size:24px;line-height:1;cursor:pointer}.video-zoom-close:hover{background:rgba(255, 255, 255, 0.3)}.ui-btn{background-color:#f4f5f7!important;color:#1f2328!important;border:1px solid #d0d5dd!important;border-bottom-width:2px!important;border-radius:6px!important;padding:0.1em 0.42em!important}html.dark .ui-btn,[data-theme=\"dark\"] .ui-btn{background-color:#21252d!important;color:#e6e8eb!important;border-color:#3a4048!important}img[src$=\"/images/icons/wss-badge.svg\"]{width:auto!important;height:15px!important}a[aria-current=\"page\"] img[src$=\"/images/icons/wss-badge.svg\"]{content:url(\"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2227%22 height=%2215%22 viewBox=%220 0 27 15%22 role=%22img%22 aria-label=%22WSS%22%3E %3Crect width=%2227%22 height=%2215%22 rx=%224%22 fill=%22%23F54A00%22/%3E %3Ctext x=%2213.5%22 y=%2210.7%22 text-anchor=%22middle%22 font-family=%22ui-sans-serif, system-ui, -apple-system, Segoe UI, Inter, Helvetica, Arial, sans-serif%22 font-size=%228.8%22 font-weight=%22700%22 fill=%22%23FFFFFF%22%3EWSS%3C/text%3E %3C/svg%3E\")}"}],"page":{"pagePath":"integrations/hubspot","slug":"/integrations/hubspot","pageMetadata":{"title":"Connect HubSpot","sidebarTitle":"Connect","description":"Connect HubSpot to Retell AI with a private app access token: the scopes to grant, where the token lives, and how to verify the connection works.","keywords":["HubSpot integration","private app access token","HubSpot scopes","HubSpot voice AI","AI assistant HubSpot","voicebot CRM integration"],"og:title":"Connect HubSpot to Retell — private app token setup","og:description":"Create a HubSpot private app, grant the scopes Retell AI needs, copy its access token, and connect it for contact sync and integration tools.","href":"/integrations/hubspot"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect HubSpot to Retell AI with a private app access token: the scopes to grant, where the token lives, and how to verify the connection works.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Frame,Heading,Note,OptimizedFrame,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedFrame)_missingMdxReference(`OptimizedFrame`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Connecting HubSpot takes a private app access token. One connection covers both `,_jsx(_components.a,{href:`/integrations/hubspot-contact-sync`,children:`contact sync`}),` and `,_jsx(_components.a,{href:`/integrations/hubspot-functions`,children:`agent functions`}),`: your agents work the portal’s contacts, deals, and companies, and Retell keeps the records current. This page covers the HubSpot-side setup and the connection itself.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This is the setup guide for using HubSpot as a `,_jsx(_components.strong,{children:`CRM data source`}),`. If you want to trigger outbound calls `,_jsx(_components.em,{children:`from`}),` HubSpot workflows instead, see the `,_jsx(_components.a,{href:`/integrations/hubspot-marketplace`,children:`HubSpot Marketplace app`}),`. The two are independent and can be used together.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`when-to-use-it`,children:`When to use it`}),`\n`,_jsx(_components.p,{children:`Connect HubSpot when it’s your system of record and you want your agents working from it without anyone copying data between tools. It’s the right choice when you want to:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Call or text people who already exist in HubSpot.`}),` Contacts sync into Retell automatically, so your agent greets callers by name and knows their deal stage or lifecycle stage instead of asking.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Keep HubSpot current without manual data entry.`}),` Analysis results from each conversation write back to contact properties.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Give your team call history where they already work.`}),` Each call and chat appears on the contact’s activity timeline with its summary and duration.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Let the agent act on HubSpot directly.`}),` `,_jsx(_components.a,{href:`/integrations/hubspot-functions`,children:`Integration tools`}),` identify the caller by number, read their deals and companies, update records the caller corrects, and book follow-up tasks.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`For example, an e-commerce brand’s inbound line answers with a Retell agent that searches HubSpot for the caller’s number, sees their open deal, and logs the call to the timeline; when the caller confirms a new shipping address, the agent updates the contact property on the spot.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A HubSpot account with `,_jsx(_components.strong,{children:`Super Admin`}),` permissions. Only a super admin can create a private app and grant it scopes.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Video walkthrough: connecting HubSpot and setting up contact sync end to end.`}),`\n`,_jsx(OptimizedFrame,{className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://www.youtube.com/embed/nE6y7xrPKZk`,title:`How to Connect HubSpot with Retell built-in CRM`,frameBorder:`0`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture`,allowFullScreen:true}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-create-a-private-app`,children:`Step 1: Create a private app`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Open the app list`,children:[_jsxs(_components.p,{children:[`In HubSpot, click `,_jsx(_components.strong,{children:`Development`}),` at the bottom of the left sidebar, then select `,_jsx(_components.strong,{children:`Legacy Apps`}),`. Click `,_jsx(_components.strong,{children:`Create legacy app`}),` in the top-right corner, then choose `,_jsx(_components.strong,{children:`Private`}),` in the dialog.`]}),_jsx(Frame,{caption:`The Legacy Apps page in HubSpot's Development section.`,children:_jsx(`div`,{style:{aspectRatio:`16 / 9`,width:`100%`,background:`rgba(128,128,128,0.15)`,display:`flex`,alignItems:`center`,justifyContent:`center`,borderRadius:`8px`,overflow:`hidden`},children:_jsx(OptimizedImage,{src:`https://mintcdn.com/retellai/M9dkUq1iShh05WLW/images/integration/hubspot-new-app.png?fit=max\u0026auto=format\u0026n=M9dkUq1iShh05WLW\u0026q=85\u0026s=340314861d186ce1cdbeb9151bcea4b7`,alt:`The HubSpot Legacy Apps page. Development is highlighted at the bottom of the left sidebar, Legacy Apps is highlighted in the Development sub-navigation, and the orange Create legacy app button is highlighted at the top right. The empty state reads No legacy apps available, with a note encouraging developers to build on the newer projects platform.`,style:{maxWidth:`100%`,maxHeight:`100%`,objectFit:`contain`},\"data-og-width\":`3456`,width:`3456`,\"data-og-height\":`1828`,height:`1828`,\"data-path\":`images/integration/hubspot-new-app.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/retellai/M9dkUq1iShh05WLW/images/integration/hubspot-new-app.png?w=280\u0026fit=max\u0026auto=format\u0026n=M9dkUq1iShh05WLW\u0026q=85\u0026s=4d349f014f5582bb7346ef26f29faaae 280w, https://mintcdn.com/retellai/M9dkUq1iShh05WLW/images/integration/hubspot-new-app.png?w=560\u0026fit=max\u0026auto=format\u0026n=M9dkUq1iShh05WLW\u0026q=85\u0026s=17691d9bffc5b51f3bff0500b9ae3bb1 560w, https://mintcdn.com/retellai/M9dkUq1iShh05WLW/images/integration/hubspot-new-app.png?w=840\u0026fit=max\u0026auto=format\u0026n=M9dkUq1iShh05WLW\u0026q=85\u0026s=25c41090f6e91aa76aa158bdc38a6c73 840w, https://mintcdn.com/retellai/M9dkUq1iShh05WLW/images/integration/hubspot-new-app.png?w=1100\u0026fit=max\u0026auto=format\u0026n=M9dkUq1iShh05WLW\u0026q=85\u0026s=f25091bcb098cbb7d4af28d21955f76e 1100w, https://mintcdn.com/retellai/M9dkUq1iShh05WLW/images/integration/hubspot-new-app.png?w=1650\u0026fit=max\u0026auto=format\u0026n=M9dkUq1iShh05WLW\u0026q=85\u0026s=cea0586d4cb351168de3aff338ceee7b 1650w, https://mintcdn.com/retellai/M9dkUq1iShh05WLW/images/integration/hubspot-new-app.png?w=2500\u0026fit=max\u0026auto=format\u0026n=M9dkUq1iShh05WLW\u0026q=85\u0026s=1a31b3acfa51c18bc817e77b396f6f78 2500w`})})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`HubSpot renamed the private apps section to `,_jsx(_components.strong,{children:`Legacy Apps`}),` and steers new development toward its newer developer platform. Private apps still work and remain the supported way to connect HubSpot to Retell. Some accounts still show this section as `,_jsx(_components.strong,{children:`Private Apps`}),` under `,_jsx(_components.strong,{children:`Settings > Integrations`}),`; if you don’t see `,_jsx(_components.strong,{children:`Development`}),` in the sidebar, look there.`]})})]}),_jsxs(Step,{title:`Fill in the basic info`,children:[_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Basic Info`}),` tab, enter:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Name`}),` — a descriptive name, for example `,_jsx(_components.code,{children:`Retell AI Integration`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Description`}),` — optional, for example “Syncs contacts and logs call activity for Retell AI”.`]}),`\n`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-grant-scopes`,children:`Step 2: Grant scopes`}),`\n`,_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Scopes`}),` tab, click `,_jsx(_components.strong,{children:`Add new scope`}),`, search for each scope below in `,_jsx(_components.strong,{children:`Find a scope`}),`, check it, then click `,_jsx(_components.strong,{children:`Update`}),`.`]}),`\n`,_jsx(_components.p,{children:`Contact sync and activity logging need three scopes:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scope`}),_jsx(_components.th,{children:`Required for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`crm.objects.contacts.read`})}),_jsx(_components.td,{children:`Importing contacts, the connection test Retell runs when you connect, and the contact lookup tools`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`crm.schemas.contacts.read`})}),_jsx(_components.td,{children:`Reading contact property definitions: field mapping, tool configuration, and every contact read the tools make`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`crm.objects.contacts.write`})}),_jsx(_components.td,{children:`Outbound sync, logging calls and chats to the timeline, and the contact, note, and task tools`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`If your agents will use the deal and company `,_jsx(_components.a,{href:`/integrations/hubspot-functions#available-tools`,children:`tools`}),`, also grant:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scope`}),_jsx(_components.th,{children:`Required for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`crm.objects.deals.read`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`Get Deal`}),` and `,_jsx(_components.strong,{children:`List Contact Deals`}),` tools`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`crm.objects.deals.write`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`Update Deal`}),` tool`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`crm.objects.companies.read`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`Get Company`}),` and `,_jsx(_components.strong,{children:`List Contact Companies`}),` tools`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`crm.objects.companies.write`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`Update Company`}),` tool`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`crm.schemas.deals.read`}),`, `,_jsx(_components.code,{children:`crm.schemas.companies.read`})]}),_jsx(_components.td,{children:`Reading deal and company property definitions, both when you configure those tools and on every read they make`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`HubSpot authorizes the note, task, and call engagement endpoints through the contact scopes, so there’s no separate engagement scope to grant. If a tool fails because of a missing scope, HubSpot rejects the call with a `,_jsx(_components.code,{children:`403`}),` whose error body names the missing scope (category `,_jsx(_components.code,{children:`MISSING_SCOPES`}),`). Grant it under `,_jsx(_components.a,{href:`#change-scopes`,children:_jsx(_components.strong,{children:`Edit app`})}),` and the tool starts working without reconnecting.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Grant the scopes up front. Once connected, a missing scope doesn’t flag the connection, because HubSpot answers with a `,_jsx(_components.code,{children:`403`}),` rather than rejecting the credentials — the affected feature just stops working silently. The exception is `,_jsx(_components.code,{children:`crm.objects.contacts.read`}),`: the connection test reads contacts, so without it connecting fails outright.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-generate-the-access-token`,children:`Step 3: Generate the access token`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Create the app`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Create app`}),` in the top-right corner. Review the confirmation dialog and click `,_jsx(_components.strong,{children:`Continue creating`}),`.`]})}),_jsx(Step,{title:`Copy the token`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Show token`}),`, then copy it. If you need it again later, a super admin can reveal it anytime from the app’s `,_jsx(_components.strong,{children:`Auth`}),` tab.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-connect-hubspot-in-retell`,children:`Step 4: Connect HubSpot in Retell`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add the connection`,children:_jsxs(_components.p,{children:[`In the Retell Dashboard, open `,_jsx(_components.strong,{children:`Integrations`}),`, select the `,_jsx(_components.strong,{children:`Available`}),` tab, find `,_jsx(_components.strong,{children:`HubSpot`}),`, and click `,_jsx(_components.strong,{children:`Connect`}),` (`,_jsx(_components.strong,{children:`Add Account`}),` if a connection already exists).`]})}),_jsxs(Step,{title:`Enter the token`,children:[_jsx(_components.p,{children:`Fill in the fields:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Connection name`})}),_jsxs(_components.td,{children:[`Alias for this connection; prefilled with `,_jsx(_components.code,{children:`HubSpot - API key`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`API Key`})}),_jsx(_components.td,{children:`The private app access token from Step 3.`})]})]})]}),_jsx(Frame,{caption:`The HubSpot connection dialog: paste the private app access token as the API key.`,children:_jsx(`div`,{style:{aspectRatio:`16 / 9`,width:`100%`,background:`rgba(128,128,128,0.15)`,display:`flex`,alignItems:`center`,justifyContent:`center`,borderRadius:`8px`,overflow:`hidden`},children:_jsx(OptimizedImage,{src:`https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/hubspot-config-integration.png?fit=max\u0026auto=format\u0026n=eQ17pyeTZnmNJIsQ\u0026q=85\u0026s=f205dd10bf02fd0a7c8055fce2d94932`,alt:`Retell's HubSpot connection dialog on its Connect tab, with a Functions tab beside it. It has a Connection name field prefilled with HubSpot - API key and an API Key field with the placeholder Enter your API key, above a Need help finding your credentials link and Cancel and Add Account buttons.`,style:{maxWidth:`100%`,maxHeight:`100%`,objectFit:`contain`},\"data-og-width\":`1204`,width:`1204`,\"data-og-height\":`1004`,height:`1004`,\"data-path\":`images/integration/hubspot-config-integration.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/hubspot-config-integration.png?w=280\u0026fit=max\u0026auto=format\u0026n=eQ17pyeTZnmNJIsQ\u0026q=85\u0026s=7d1196b8c820289ffcec264f7fd7caaf 280w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/hubspot-config-integration.png?w=560\u0026fit=max\u0026auto=format\u0026n=eQ17pyeTZnmNJIsQ\u0026q=85\u0026s=812a77b9ea8046fe305cd2c97d5adf90 560w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/hubspot-config-integration.png?w=840\u0026fit=max\u0026auto=format\u0026n=eQ17pyeTZnmNJIsQ\u0026q=85\u0026s=182bf1058c2ab3b2dce76a0da92d085f 840w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/hubspot-config-integration.png?w=1100\u0026fit=max\u0026auto=format\u0026n=eQ17pyeTZnmNJIsQ\u0026q=85\u0026s=72b6c38d0c249e7a11e5ab0ee982745a 1100w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/hubspot-config-integration.png?w=1650\u0026fit=max\u0026auto=format\u0026n=eQ17pyeTZnmNJIsQ\u0026q=85\u0026s=b0ec0a2be1ce4d03fae0fe3a20072666 1650w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/hubspot-config-integration.png?w=2500\u0026fit=max\u0026auto=format\u0026n=eQ17pyeTZnmNJIsQ\u0026q=85\u0026s=bb6c9a0650b9e608cc9916c0d30b0f41 2500w`})})})]}),_jsxs(Step,{title:`Connect and confirm`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Connect`}),` (`,_jsx(_components.strong,{children:`Add Account`}),` if a connection already exists). Retell creates the connection and immediately tests it by reading a page of contacts from HubSpot.`]}),_jsxs(_components.p,{children:[`On success the dialog reports the connection as verified and offers `,_jsx(_components.strong,{children:`Set up contact sync`}),`. On failure it shows HubSpot’s own error and re-enables the field so you can paste a corrected token.`]})]}),_jsx(Step,{title:`Verify it worked`,children:_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Connected`}),` tab, the HubSpot connection shows as connected. Next, set up `,_jsx(_components.a,{href:`/integrations/hubspot-contact-sync`,children:`contact sync`}),` to import your contacts, or start using `,_jsx(_components.a,{href:`/integrations/hubspot-functions`,children:`agent functions`}),` right away.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`manage-the-private-app`,children:`Manage the private app`}),`\n`,_jsx(Heading,{level:`3`,id:`rotate-the-access-token`,children:`Rotate the access token`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Rotate in HubSpot`,children:[_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Development > Legacy Apps`}),` and click your Retell app’s name. Next to the access token, click `,_jsx(_components.strong,{children:`Rotate`}),`, then choose how the old token expires:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rotate and expire later`}),` keeps the old token valid for 7 days. Pick this one. Retell keeps working while you swap the credential over.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rotate and expire now`}),` kills the old token immediately, so contact sync and activity logging fail until Retell has the new one.`]}),`\n`]})]}),_jsx(Step,{title:`Reconnect in Retell`,children:_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Connected`}),` tab, open the connection’s settings. The saved token shows masked; paste the new token over it and click `,_jsx(_components.strong,{children:`Reconnect`}),`. Retell verifies the new token before saving, and your field mappings and synced contacts are untouched.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`change-scopes`,children:`Change scopes`}),`\n`,_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Development > Legacy Apps`}),`, click your Retell app’s name, then click `,_jsx(_components.strong,{children:`Edit app`}),` in the top-right corner to change its scopes. Adding a scope takes effect without a new token. Removing one stops the corresponding Retell feature working, without flagging the connection as broken.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Connecting fails with an authorization error`,id:`connecting-fails-with-an-authorization-error`,children:_jsxs(_components.p,{children:[`Confirm the value in the `,_jsx(_components.strong,{children:`API Key`}),` field is the private app `,_jsx(_components.strong,{children:`access token`}),`, not HubSpot’s legacy developer API key or an OAuth client secret. Check that the app has `,_jsx(_components.code,{children:`crm.objects.contacts.read`}),`, which the connection test needs, and that the token hasn’t been rotated since you copied it.`]})}),_jsx(Accordion,{title:`The connection shows an error after working for a while`,id:`the-connection-shows-an-error-after-working-for-a-while`,children:_jsxs(_components.p,{children:[`Retell flags a connection as errored when HubSpot rejects the credentials with an HTTP 401. The usual cause is a rotated or deleted token. Open the connection’s settings, paste a current token, and click `,_jsx(_components.strong,{children:`Reconnect`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`faq`,children:`FAQ`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Can I connect more than one HubSpot portal?`,id:`can-i-connect-more-than-one-hubspot-portal`,children:_jsxs(_components.p,{children:[`You can add multiple connections, but only one CRM connection in your workspace can drive `,_jsx(_components.a,{href:`/integrations/hubspot-contact-sync`,children:`contact sync`}),` at a time, across every provider. The `,_jsx(_components.strong,{children:`Contact sync`}),` toggle in a connection’s settings decides which one; turning it on for one connection takes sync over from the previous one.`]})}),_jsx(Accordion,{title:`Does this replace the HubSpot Marketplace app?`,id:`does-this-replace-the-hubspot-marketplace-app`,children:_jsxs(_components.p,{children:[`No, they do different jobs. This integration syncs contacts and logs activity. The `,_jsx(_components.a,{href:`/integrations/hubspot-marketplace`,children:`Marketplace app`}),` adds a `,_jsx(_components.strong,{children:`Make a Phone Call`}),` action to HubSpot workflows so HubSpot can trigger outbound calls. You can run both.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`HubSpot contact sync`,icon:`rotate`,href:`/integrations/hubspot-contact-sync`,children:_jsx(_components.p,{children:`Import your HubSpot contacts, write analysis results back, and log calls and chats to the timeline.`})}),_jsx(Card,{title:`HubSpot agent functions`,icon:`wrench`,href:`/integrations/hubspot-functions`,children:_jsx(_components.p,{children:`Look up callers, read their deals and companies, and create tasks and notes mid-conversation.`})}),_jsx(Card,{title:`Trigger calls from HubSpot`,icon:`bolt`,href:`/integrations/hubspot-marketplace`,children:_jsx(_components.p,{children:`Use the Marketplace app to start outbound calls from a HubSpot workflow.`})}),_jsx(Card,{title:`CRM integrations`,icon:`database`,href:`/integrations/crm-overview`,children:_jsx(_components.p,{children:`How contact sync, analysis mapping, and activity logging work across CRM providers.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Connect HubSpot","sidebarTitle":"Connect","description":"Connect HubSpot to Retell AI with a private app access token: the scopes to grant, where the token lives, and how to verify the connection works.","keywords":["HubSpot integration","private app access token","HubSpot scopes","HubSpot voice AI","AI assistant HubSpot","voicebot CRM integration"],"og:title":"Connect HubSpot to Retell — private app token setup","og:description":"Create a HubSpot private app, grant the scopes Retell AI needs, copy its access token, and connect it for contact sync and integration tools.","href":"/integrations/hubspot"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"When to use it","slug":"when-to-use-it","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Step 1: Create a private app","slug":"step-1-create-a-private-app","depth":2,"children":[]},{"title":"Step 2: Grant scopes","slug":"step-2-grant-scopes","depth":2,"children":[]},{"title":"Step 3: Generate the access token","slug":"step-3-generate-the-access-token","depth":2,"children":[]},{"title":"Step 4: Connect HubSpot in Retell","slug":"step-4-connect-hubspot-in-retell","depth":2,"children":[]},{"title":"Manage the private app","slug":"manage-the-private-app","depth":2,"children":[{"title":"Rotate the access token","slug":"rotate-the-access-token","depth":3,"children":[]},{"title":"Change scopes","slug":"change-scopes","depth":3,"children":[]}]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"FAQ","slug":"faq","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/retellai/e3fe5c9b64f9e274/scroll-play-videos.js"],"dynamicCss":".mint-aspect-video {\n aspect-ratio: 16 / 9\n}\n.mint-w-full {\n width: 100%\n}\n.mint-rounded-xl {\n border-radius: 0.75rem\n}","subdomain":"retellai","siteName":"Retell AI","title":"Connect HubSpot to Retell — private app token setup","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T05:28:20.073Z","originalFileLocation":"integrations/hubspot.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect HubSpot to Retell AI with a private app access token: the scopes to grant, where the token lives, and how to verify the connection works.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Retell AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/retellai/aRxZhiMifgkRJF_R/_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/retellai/aRxZhiMifgkRJF_R/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/retellai/aRxZhiMifgkRJF_R/_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/retellai/aRxZhiMifgkRJF_R/_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/retellai/aRxZhiMifgkRJF_R/_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/retellai/aRxZhiMifgkRJF_R/_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/retellai/aRxZhiMifgkRJF_R/_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/retellai/aRxZhiMifgkRJF_R/_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/retellai/aRxZhiMifgkRJF_R/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Connect HubSpot to Retell — private app token setup\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a HubSpot private app, grant the scopes Retell AI needs, copy its access token, and connect it for contact sync and integration tools.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Retell AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.retellai.com/integrations/hubspot\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://retellai.mintlify.site/_mintlify/api/og/v2?division=HubSpot\u0026amp;title=Connect+HubSpot\u0026amp;description=Connect+HubSpot+to+Retell+AI+with+a+private+app+access+token%3A+the+scopes+to+grant%2C+where+the+token+lives%2C+and+how+to+verify+the+connection+works.\u0026amp;theme=2259d4172d4ae0cc61d9b63d\u0026amp;signature=92ce97ef5ec7792cd1ed6dd6e0d1857f6f45993be60219137395da2488355fac\">\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=\"Connect HubSpot to Retell — private app token setup\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a HubSpot private app, grant the scopes Retell AI needs, copy its access token, and connect it for contact sync and integration tools.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://retellai.mintlify.site/_mintlify/api/og/v2?division=HubSpot\u0026amp;title=Connect+HubSpot\u0026amp;description=Connect+HubSpot+to+Retell+AI+with+a+private+app+access+token%3A+the+scopes+to+grant%2C+where+the+token+lives%2C+and+how+to+verify+the+connection+works.\u0026amp;theme=2259d4172d4ae0cc61d9b63d\u0026amp;signature=92ce97ef5ec7792cd1ed6dd6e0d1857f6f45993be60219137395da2488355fac\">\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/retellai/aRxZhiMifgkRJF_R/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Retell AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#606A78\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.retellai.com/integrations/hubspot\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/hubspot.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.retellai.com/#organization\",\"name\":\"Retell AI\",\"url\":\"https://docs.retellai.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/retellai/-E9UettTBfBiCBBS/images/docs-light.png?fit=max\u0026auto=format\u0026n=-E9UettTBfBiCBBS\u0026q=85\u0026s=64eb26a2d3cc9a67ee3ea0bfe086dd14\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.retellai.com#website\",\"name\":\"Retell AI\",\"url\":\"https://docs.retellai.com\",\"publisher\":{\"@id\":\"https://docs.retellai.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.retellai.com/integrations/hubspot#webpage\",\"url\":\"https://docs.retellai.com/integrations/hubspot\",\"name\":\"Connect HubSpot\",\"description\":\"Connect HubSpot to Retell AI with a private app access token: the scopes to grant, where the token lives, and how to verify the connection works.\",\"dateModified\":\"2026-11-12T05:28:20.073Z\",\"isPartOf\":{\"@id\":\"https://docs.retellai.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.retellai.com/integrations/hubspot#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.retellai.com/integrations/hubspot#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://docs.retellai.com/integrations/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CRM\",\"item\":\"https://docs.retellai.com/integrations/crm-overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Connect HubSpot\",\"item\":\"https://docs.retellai.com/integrations/hubspot\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.retellai.com/integrations/hubspot#article\",\"headline\":\"Connect HubSpot\",\"name\":\"Connect HubSpot\",\"description\":\"Connect HubSpot to Retell AI with a private app access token: the scopes to grant, where the token lives, and how to verify the connection works.\",\"url\":\"https://docs.retellai.com/integrations/hubspot\",\"mainEntityOfPage\":{\"@id\":\"https://docs.retellai.com/integrations/hubspot#webpage\"},\"dateModified\":\"2026-11-12T05:28:20.073Z\",\"keywords\":\"HubSpot integration, private app access token, HubSpot scopes, HubSpot voice AI, AI assistant HubSpot, voicebot CRM integration\",\"publisher\":{\"@id\":\"https://docs.retellai.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.retellai.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Retell AI\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Retell AI\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/integrations/hubspot.md","siteName":"Retell AI","nav":{"global":null,"tabs":[{"tab":"Guides","icon":"book","groups":[{"group":" ","pages":[{"title":"Introduction to Retell","href":"/general/introduction"},{"title":"Build your first phone agent in 15 minutes","href":"/get-started/quick-start"},{"title":"Global search","href":"/get-started/global-search"}]},{"group":"Conductor (AI Assistant)","icon":"https://mintlify.s3.us-west-1.amazonaws.com/retellai/images/conductor/conductor-icon.svg","pages":[{"title":"Retell AI Conductor overview","sidebarTitle":"Overview","href":"/conductor/overview"},{"group":"Functionality","pages":[{"title":"Build and refine agents","href":"/conductor/build-and-refine"},{"title":"Test and improve agents","href":"/conductor/test-and-improve"},{"title":"Inspect knowledge bases","href":"/conductor/knowledge-base"},{"title":"Review calls and chats","href":"/conductor/call-and-chat-history"},{"title":"Build analytics dashboards","href":"/conductor/analytics-dashboards"},{"title":"Review QA results","href":"/conductor/ai-qa"},{"title":"Review contacts","href":"/conductor/contacts"}]},{"title":"Pricing","href":"/conductor/usage-and-billing"}]},{"group":"Build","icon":"bot","pages":[{"title":"Build a Retell agent: configuration overview","href":"/build/overview"},{"title":"Single prompt vs. conversation flow","href":"/build/choose-agent-type"},{"title":"General prompting principles","href":"/build/prompt-engineering-guide"},{"group":"Single prompt agents","pages":[{"title":"Single prompt best practices","href":"/build/single-multi-prompt/write-single-prompt"},{"title":"Configure basic settings","href":"/build/single-multi-prompt/configure-basic-settings"},{"group":"Functions","pages":[{"title":"Function calling for single and multi-prompt agents","href":"/build/single-multi-prompt/function-calling"},{"title":"End call","href":"/build/single-multi-prompt/end-call"},{"title":"Transfer call tool (single \u0026 multi-prompt agents)","href":"/build/single-multi-prompt/transfer-call"},{"title":"Send SMS","href":"/build/single-multi-prompt/send-sms"},{"title":"Press digit (IVR navigation)","href":"/build/single-multi-prompt/press-digit"},{"title":"Integrate any system with custom function","href":"/build/single-multi-prompt/custom-function"},{"title":"Integration tools","href":"/build/single-multi-prompt/integration-tools"},{"title":"Code tool: run JavaScript in a Retell agent","href":"/build/single-multi-prompt/code-tool"},{"title":"Extract Dynamic Variables","href":"/build/single-multi-prompt/extract-dv"},{"title":"Agent Transfer tool: hand a call to another AI agent","href":"/build/single-multi-prompt/transfer-agent"},{"title":"MCP tools for single and multi-prompt agents","href":"/build/single-multi-prompt/mcp"}]}]},{"group":"Conversation flow agents","pages":[{"title":"Conversation flow agents: structured voice AI call control","href":"/build/conversation-flow/overview"},{"title":"Conversation flow best practices","href":"/build/conversation-flow/best-practices"},{"title":"Configure global settings","href":"/build/conversation-flow/global-setting"},{"group":"Nodes","pages":[{"title":"Nodes and edges","href":"/build/conversation-flow/node"},{"title":"Subagent node","href":"/build/conversation-flow/subagent-node"},{"title":"Conversation node","href":"/build/conversation-flow/conversation-node"},{"group":"Function Node","pages":[{"title":"Call a function from a conversation flow node","href":"/build/conversation-flow/function-node"},{"title":"Custom function in conversation flow","href":"/build/conversation-flow/custom-function"},{"title":"Integration tools in conversation flow","href":"/build/conversation-flow/integration-tools"}]},{"title":"Code node: run JavaScript in a conversation flow","href":"/build/conversation-flow/code-node"},{"title":"Call transfer node in conversation flow","href":"/build/conversation-flow/call-transfer-node"},{"title":"Press Digit Node","href":"/build/conversation-flow/press-digit-node"},{"title":"End node","href":"/build/conversation-flow/end-node"},{"title":"Logic Split Node","href":"/build/conversation-flow/logic-split-node"},{"title":"SMS Node","href":"/build/conversation-flow/sms-node"},{"title":"Extract Dynamic Variable Node","href":"/build/conversation-flow/extract-dv-node"},{"title":"Agent Transfer Node","href":"/build/conversation-flow/transfer-agent-node"},{"title":"MCP node in conversation flow","href":"/build/conversation-flow/mcp-node"}]},{"title":"Transition conditions","href":"/build/conversation-flow/transition-condition"},{"title":"Reusable subflows for conversation flow agents","href":"/build/conversation-flow/components"},{"title":"Flex Mode: dynamic conversation flow execution","href":"/build/conversation-flow/flex-mode"},{"group":"Advanced features","pages":[{"title":"Global Node","href":"/build/conversation-flow/global-node"},{"title":"Finetune Examples","href":"/build/conversation-flow/finetune-examples"}]},{"title":"Debug guide","href":"/build/conversation-flow/debug-guide"}]},{"group":"Multi-prompt agents (legacy)","pages":[{"title":"Multi-prompt agents","href":"/build/single-multi-prompt/write-multi-prompt"}]},{"title":"Create chat agent","href":"/build/create-chat-agent"},{"title":"Agent workflow","href":"/agent/agent-workflow"},{"title":"Set language for your agent","href":"/agent/language"},{"title":"Configure a multilingual agent","href":"/agent/multilingual"},{"title":"Supported languages by provider","href":"/build/language-support"},{"group":"Understand user speech better","pages":[{"title":"Speech recognition providers","href":"/build/asr-providers"},{"title":"Transcription modes","href":"/build/transcription-mode"},{"title":"Handle background speech \u0026 noise","href":"/build/handle-background-noise"}]},{"group":"Generate better responses from LLM","pages":[{"title":"Agent Handbook","href":"/build/agent-handbook"},{"title":"Conversational Mode","href":"/build/conversational-mode"},{"title":"Pronunciation examples","href":"/build/prompt-situation-guide"},{"title":"LLM settings","href":"/build/llm-options"},{"title":"GPT Live voice model","href":"/build/gpt-live"}]},{"group":"Customize the synthesized speech","pages":[{"title":"Platform voices","href":"/build/platform-voices"},{"title":"Choose a custom provider","href":"/build/voice"},{"title":"Expressive Mode: add emotion and emphasis to agent speech","href":"/build/expressive-mode"},{"title":"Add custom pronunciation","href":"/build/add-pronunciation"},{"title":"Make the agent stay silent","href":"/build/no-response"},{"title":"Speech controls","href":"/build/speech-controls"},{"title":"Set up TTS fallback","href":"/build/tts-fallback"}]},{"group":"Integrate telephony features","pages":[{"title":"Handle voicemail and IVR","href":"/build/handle-voicemail"},{"title":"Capture DTMF input from user","href":"/build/user-dtmf"},{"title":"Set \u0026 parse custom SIP headers","href":"/build/telephony/sip-headers"}]},{"group":"Provide context to the agent","pages":[{"title":"Knowledge base setup and retrieval tuning","href":"/build/knowledge-base"},{"title":"Dynamic variables","href":"/build/dynamic-variables"}]},{"title":"Guardrails","href":"/build/guardrails"},{"title":"Do-not-call requests","href":"/build/do-not-call"}]},{"group":"Test","icon":"flask-conical","pages":[{"title":"Testing overview","href":"/test/test-overview"},{"group":"LLM Playground","pages":[{"title":"Manually test your agent","href":"/test/llm-playground"},{"title":"Debug your agent response","href":"/test/llm-playground-debug"}]},{"group":"LLM Simulation Testing","pages":[{"title":"Automatically test your agent","href":"/test/llm-simulation-testing"},{"title":"Batch test your agent","href":"/test/batch-test-simulation"}]},{"group":"Audio Testing","pages":[{"title":"Web call testing","href":"/test/test-web"},{"title":"Phone call testing","href":"/test/test-phone"}]},{"title":"Testing with Conductor","icon":"https://mintlify.s3.us-west-1.amazonaws.com/retellai/images/conductor/conductor-icon.svg","href":"/test/testing-with-conductor"},{"title":"Testing pricing","href":"/test/testing-pricing"}]},{"group":"Deploy","icon":"phone","pages":[{"title":"Purchase phone number","href":"/deploy/purchase-number"},{"title":"A/B Testing","href":"/deploy/ab-testing"},{"group":"Connect to custom telephony providers via SIP","pages":[{"title":"Connect Retell voice agents to custom telephony","href":"/deploy/custom-telephony"},{"group":"Connect via SIP trunking","pages":[{"title":"Connect a Twilio number to Retell with elastic SIP trunking","sidebarTitle":"Twilio","href":"/deploy/twilio"},{"title":"Telnyx","href":"/deploy/telnyx"},{"title":"Vonage","href":"/deploy/vonage"}]},{"group":"Connect to CCaaS","pages":[{"title":"Avaya","href":"/deploy/avaya"},{"title":"Connect Genesys Cloud to Retell","href":"/deploy/genesys"},{"title":"Connect Five9 to Retell","href":"/deploy/five9"},{"title":"Amazon Connect","href":"/deploy/amazon-connect"}]}]},{"group":"Make \u0026 receive phone calls","pages":[{"title":"Make outbound calls","href":"/deploy/outbound-call"},{"group":"Inbound calls","pages":[{"title":"Receive calls","href":"/deploy/inbound-call"},{"title":"Inbound call \u0026 SMS webhook","href":"/features/inbound-call-webhook"}]},{"title":"International calling","href":"/deploy/international-call"}]},{"title":"Implement chat with create chat completion","href":"/deploy/create-chat-completion"},{"title":"Website widget","href":"/deploy/chat-widget"},{"group":"Send \u0026 receive SMS","pages":[{"title":"Enable SMS","href":"/deploy/enable-sms"},{"title":"SMS campaign application (A2P 10DLC)","href":"/deploy/sms-campaign-application"}]},{"title":"Agent versions and tags","href":"/agent/version"},{"title":"Compare agent versions","href":"/agent/version-comparison"},{"title":"Create and schedule batch calls","href":"/deploy/make-batch-call"},{"group":"Dialer","pages":[{"title":"Outbound call campaigns","sidebarTitle":"Overview","href":"/dialer/overview"},{"title":"Choose contacts","href":"/dialer/contacts"},{"title":"Compliance checks","href":"/dialer/compliance-checks"},{"title":"Build a sequence","href":"/dialer/sequences"},{"title":"Caller ID and pacing","href":"/dialer/phone-numbers"}]},{"group":"Increase call pickup rate","pages":[{"title":"Spam likely overview","href":"/build/telephony/call_efficiency_overview"},{"title":"Add a business profile","href":"/build/telephony/business-profile"},{"title":"Apply for verified phone number","href":"/build/telephony/verified-phone"},{"title":"Apply for branded call","href":"/build/telephony/branded-call"},{"title":"Handle application rejection","href":"/build/telephony/branded-call-rejection"},{"title":"Stop caller ID service","href":"/build/telephony/delete-service"}]},{"title":"Make a web call","href":"/deploy/web-call"},{"title":"Web calls in native apps","href":"/deploy/native-web-call"},{"title":"Understand concurrency \u0026 limits","href":"/deploy/concurrency"}]},{"group":"Data","icon":"database","pages":[{"title":"Call \u0026 chat history","href":"/features/session-history"},{"title":"Contacts","href":"/features/contacts"},{"title":"Contact memory","href":"/features/contact-memory"}]},{"group":"Monitor","icon":"square-activity","pages":[{"title":"Monitor live calls","href":"/features/live-monitoring"},{"title":"Analytics dashboard","href":"/features/analytics-dashboard"},{"title":"Alert rules for call and chat metrics","href":"/features/alerting-overview"},{"group":"Register \u0026 handle webhooks","pages":[{"group":"Call Event Webhook","pages":[{"title":"Retell webhooks overview","href":"/features/webhook-overview"},{"title":"Register and set up a Retell webhook","href":"/features/register-webhook"}]},{"title":"Secure the webhook","href":"/features/secure-webhook"}]},{"group":"Post Call Extraction","pages":[{"title":"Post Call Extraction overview and categories","href":"/features/post-call-analysis-overview"},{"title":"Define the information you want to extract","href":"/features/post-call-analysis-create"},{"title":"Consume the analysis data","href":"/features/post-call-analysis-consumption"},{"title":"Rerun Post Call/Chat Extraction","href":"/features/rerun-call-analysis"}]},{"group":"AI Quality Assurance","pages":[{"title":"Automatically evaluate call quality with AI QA","sidebarTitle":"AI Quality Assurance","href":"/ai-qa/overview"},{"group":"Create QA","pages":[{"title":"Access AI QA","href":"/ai-qa/get-started"},{"title":"Define a QA cohort","href":"/ai-qa/create-cohort"},{"title":"Define resolution criteria","href":"/ai-qa/define-resolution-criteria"}]},{"title":"View QA results","href":"/ai-qa/view-qa-results"},{"title":"AI QA metrics","href":"/ai-qa/terminologies"},{"title":"Address metric issues","href":"/ai-qa/address-metric-issues"}]}]},{"group":"Reliability \u0026 Debugging","icon":"bug","pages":[{"title":"Reliability Overview","href":"/reliability/reliability-overview"},{"group":"Latency","pages":[{"title":"Check estimated latency","href":"/reliability/check-estimated-latency"},{"title":"Check actual latency","href":"/reliability/check-actual-latency"},{"title":"Troubleshoot high latency","href":"/reliability/troubleshoot-latency"}]},{"group":"Fix agent behaviors","pages":[{"title":"Transcription accuracy","href":"/reliability/wrong-transcript"},{"title":"Debug wrong response","href":"/reliability/wrong-response"}]},{"group":"Debug phone call issues","pages":[{"title":"Debug call transfer failure","href":"/reliability/call-performance"},{"title":"Debug call disconnection","href":"/reliability/debug-call-disconnect"},{"title":"Debug outbound connection issues","href":"/reliability/debug-outbound-call"},{"title":"Debug SIP calls using PCAP file","href":"/reliability/debug-calls-pcap"}]},{"title":"Agent paused or banned","href":"/reliability/agent-paused"},{"title":"Prevent abuse","href":"/reliability/prevent-abuse"},{"title":"Fraud Protection","href":"/reliability/fraud-protection"}]},{"group":"Accounts and Workspace","icon":"circle-user-round","pages":[{"title":"Create and manage Retell workspaces","href":"/accounts/workspace"},{"title":"Manage your Retell AI account","href":"/accounts/account"},{"title":"Use your business email","href":"/accounts/business-email"},{"title":"Access Control","href":"/accounts/access-control"},{"title":"KYC Verification","href":"/accounts/kyc"},{"group":"Billing","pages":[{"title":"Retell AI billing: credits, auto recharge, and invoices","href":"/accounts/billing"},{"title":"Exceptions to Our Per-Minute Pricing","href":"/accounts/billing-exceptions"},{"title":"Add payment methods","href":"/accounts/add-payment"},{"title":"Handle failed payments","href":"/accounts/fail-payment"}]},{"group":"Keys","pages":[{"title":"API Key Overview","href":"/accounts/api-keys-overview"},{"title":"Manage API keys and permission scopes","href":"/accounts/manage-api-keys"},{"title":"Public keys","href":"/accounts/public-keys"}]},{"group":"Privacy and Compliance","pages":[{"title":"Data Storage Settings","href":"/accounts/privacy-disable"},{"title":"Data Retention Policy","href":"/accounts/data-retention"},{"title":"Opt in to secure URL","href":"/accounts/signed-secure-url"},{"title":"Security and compliance","href":"/general/compliance"}]}]},{"group":"Integrations","icon":"unplug","pages":[{"title":"Connect CRMs, calendars, and knowledge sources to Retell","sidebarTitle":"Integrations overview","href":"/integrations/overview"},{"group":"CRM","pages":[{"title":"CRM integrations","href":"/integrations/crm-overview"},{"title":"CRM data mappings","description":"How data flows between your CRM, Retell AI contacts, and Post Call Extraction: inbound and outbound field mappings, update modes, and custom fields.","href":"/integrations/crm-mappings"},{"group":"HubSpot","pages":[{"title":"Connect HubSpot","sidebarTitle":"Connect","href":"/integrations/hubspot"},{"title":"HubSpot contact sync","sidebarTitle":"Contact sync","description":"Sync HubSpot contacts with Retell AI: field mappings, Post Call Extraction write-back, and call and chat logging on the contact activity timeline.","href":"/integrations/hubspot-contact-sync"},{"title":"HubSpot agent functions","sidebarTitle":"Agent functions","href":"/integrations/hubspot-functions"}]},{"group":"Salesforce","pages":[{"title":"Connect Salesforce","sidebarTitle":"Connect","href":"/integrations/salesforce"},{"title":"Salesforce contact sync","sidebarTitle":"Contact sync","href":"/integrations/salesforce-contact-sync"},{"title":"Salesforce agent functions","sidebarTitle":"Agent functions","href":"/integrations/salesforce-functions"}]},{"group":"Microsoft Dynamics 365","pages":[{"title":"Connect Dynamics 365","sidebarTitle":"Connect","href":"/integrations/microsoft-dynamics"},{"title":"Dynamics 365 contact sync","sidebarTitle":"Contact sync","href":"/integrations/microsoft-dynamics-contact-sync"},{"title":"Dynamics 365 agent functions","sidebarTitle":"Agent functions","href":"/integrations/microsoft-dynamics-functions"}]},{"group":"GoHighLevel","pages":[{"title":"Connect GoHighLevel","sidebarTitle":"Connect","href":"/integrations/gohighlevel"},{"title":"GoHighLevel contact sync","sidebarTitle":"Contact sync","href":"/integrations/gohighlevel-contact-sync"},{"title":"GoHighLevel agent functions","sidebarTitle":"Agent functions","href":"/integrations/gohighlevel-functions"}]},{"group":"Zoho CRM","pages":[{"title":"Connect Zoho CRM","sidebarTitle":"Connect","href":"/integrations/zoho"},{"title":"Zoho contact sync","sidebarTitle":"Contact sync","href":"/integrations/zoho-contact-sync"},{"title":"Zoho agent functions","sidebarTitle":"Agent functions","href":"/integrations/zoho-functions"}]}]},{"group":"Helpdesk","pages":[{"group":"Zendesk","pages":[{"title":"Connect Zendesk","sidebarTitle":"Connect","href":"/integrations/zendesk"},{"title":"Zendesk agent functions","sidebarTitle":"Agent functions","href":"/integrations/zendesk-functions"}]}]},{"group":"Knowledge Base","pages":[{"group":"Google Drive","pages":[{"title":"Connect Google Drive","sidebarTitle":"Connect","href":"/integrations/google-drive"},{"title":"Google Drive knowledge base sync","sidebarTitle":"Knowledge base sync","href":"/integrations/google-drive-knowledge-base"}]},{"group":"Microsoft OneDrive","pages":[{"title":"Connect OneDrive","sidebarTitle":"Connect","href":"/integrations/microsoft-onedrive"},{"title":"OneDrive knowledge base sync","sidebarTitle":"Knowledge base sync","href":"/integrations/microsoft-onedrive-knowledge-base"}]},{"group":"Notion","pages":[{"title":"Connect Notion","sidebarTitle":"Connect","href":"/integrations/notion"},{"title":"Notion knowledge base sync","sidebarTitle":"Knowledge base sync","href":"/integrations/notion-knowledge-base"}]}]},{"group":"Calendar","pages":[{"group":"GoHighLevel","pages":[{"title":"GoHighLevel agent functions","sidebarTitle":"Agent functions","href":"/integrations/gohighlevel-functions"}]},{"group":"Calendly","pages":[{"title":"Connect Calendly","sidebarTitle":"Connect","href":"/integrations/calendly"},{"title":"Calendly agent functions","sidebarTitle":"Agent functions","href":"/integrations/calendly-functions"}]},{"group":"Cal.com","pages":[{"title":"Connect Cal.com","sidebarTitle":"Connect","href":"/integrations/cal-com"},{"title":"Cal.com agent functions","sidebarTitle":"Agent functions","href":"/integrations/cal-com-functions"}]}]}]},{"group":"Marketplace","icon":"store","pages":[{"title":"Trigger Retell calls from HubSpot workflows","href":"/integrations/hubspot-marketplace"},{"title":"Trigger Retell calls from Zoho CRM workflows","href":"/integrations/zoho-marketplace"},{"title":"Trigger Retell calls from Slack","href":"/integrations/slack-marketplace"},{"title":"Trigger Retell calls from Notion","href":"/integrations/notion-marketplace"},{"title":"Trigger Retell calls from Google Sheets","href":"/integrations/google-sheets-marketplace"}]},{"group":"Other Topics","pages":[{"group":"Custom LLM","pages":[{"title":"Custom LLM overview","href":"/integrate-llm/overview"},{"title":"Set up a custom LLM WebSocket server for your Retell agent","href":"/integrate-llm/setup-websocket-server"},{"title":"Connect your LLM","href":"/integrate-llm/integrate-llm"},{"title":"Add function calling","href":"/integrate-llm/integrate-function-calling"},{"title":"Troubleshooting","href":"/integrate-llm/troubleshooting"},{"title":"Best practices","href":"/integrate-llm/llm-best-practice"}]},{"title":"Audio Basics","href":"/knowledge/audio-basics"}]}]},{"tab":"API Reference","icon":"code-xml","pages":[{"title":"API Reference","href":"/api-references/overview"}]},{"tab":"SDK","icon":"package","pages":[{"title":"SDK","href":"/get-started/sdk"}]},{"tab":"MCP","icon":"plug-zap","pages":[{"title":"MCP","href":"/get-started/mcp-server"}]},{"tab":"CLI","icon":"terminal","pages":[{"title":"CLI","href":"/get-started/cli"}]},{"tab":"Deprecations","icon":"book-alert","pages":[{"title":"Deprecations","href":"/deprecation-notice/overview"}]}]},"basePath":"","title":"Connect HubSpot to Retell — private app token setup","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-rZ_6yn08.js","DynamicMarkdown-D3RQ-fEj.js","zoom-image-lightbox-CMHgNu49.js","lightbox-handle-r17bVUz3.js"]}