CRM with email marketing
HubSpot logo

HubSpot API + MCP (2026): Enterprise CRM with Official Remote MCP

HubSpot’s API v3 is one of the most mature CRM + marketing APIs in the industry. Wide surface across contacts, companies, deals, tickets, marketing emails, workflows, and lists. OAuth 2.0 + private app tokens, well-documented per-portal rate limits (100 requests per 10 seconds standard tier, higher for Enterprise), 7 official SDKs. In 2026 HubSpot added a major differentiator: an official remote MCP server for AI agents, letting Claude Desktop, Cursor, VSCode, and ChatGPT operate the HubSpot CRM through natural language. This tab inventories the API surface, MCP capabilities, and the gotchas developers need to evaluate before committing.

At a glance

v3
Current API version
Legacy v1 endpoints still supported
7
Official SDKs
Node.js, Python, PHP, Ruby, .NET, Java, TypeScript
GA
Official MCP server
Remote hosted, wide CRM coverage

MCP integration in 2026

Model Context Protocol is the standard for connecting LLM agents to external tools. HubSpot’s MCP server was released with unusually wide CRM coverage from launch, positioning HubSpot as one of the AI-agent-first CRM platforms in 2026.

HubSpot ships an official remote MCP server — Generally Available

The HubSpot Remote MCP Server is officially maintained by HubSpot and hosted at HubSpot’s MCP endpoint. Wide CRM coverage from launch: contacts, companies, deals, tickets, marketing emails, workflows, lists, activities. HTTP transport (aligned with the MCP 2026-07-28 spec). Compatible with Claude Desktop, Claude Code, Cursor, VSCode, and ChatGPT (Pro/Plus with developer mode). Enterprise-focused authentication via OAuth 2.0 with granular scope management. Documented at developers.hubspot.com.

Available MCP servers for HubSpot

Three ways to reach HubSpot from an AI agent as of August 2026. The first is HubSpot’s official remote server — the most feature-complete option.

Why HubSpot invested early in MCP. HubSpot’s product strategy for 2025-2026 centered on Breeze AI as a differentiator against Salesforce Einstein and Microsoft Copilot. MCP is the natural extension: give customers programmatic AI access to their own CRM, not just chatbot access. Expect the tool count and depth to expand quarterly, particularly for marketing automation and reporting endpoints.

API v3 essentials

HubSpot API v3 is REST-based with JSON payloads. Endpoint paths follow object-oriented conventions (/crm/v3/objects/{objectType}). Both v3 and legacy v1 endpoints remain supported for backward compatibility.

Base URLhttps://api.hubapi.com
Response formatJSON
AuthenticationOAuth 2.0 (public apps) or Private App tokens (in-account)
Standard rate limit100 requests per 10 seconds per portal
Enterprise rate limit200 requests per 10 seconds per portal
Daily quota (Free/Starter)250,000 requests/day
Daily quota (Pro/Enterprise)500,000-1,000,000 requests/day
PaginationCursor-based via paging.next.after
Response on rate exceedHTTP 429 with Retry-After header
Batch operationsBatch endpoints for contacts, companies, deals (up to 100 records per batch)

The 100-requests-per-10-seconds rule is the number one thing developers underestimate. At standard tier, you can burst 100 requests in 1 second but not another 100 for the next 9 seconds. Design your request patterns around this rolling window — batch endpoints are essential for any bulk operation.

Authentication methods

Private app tokens (recommended for internal use)

Generate a private app in your HubSpot portal at Settings › Integrations › Private Apps. Assign granular scopes at creation. Use the resulting access token in the Authorization header:

Authorization: Bearer pat-XXXXXXXXXXXXXXXX
Content-Type: application/json

Private app tokens are the recommended pattern for internal integrations (custom apps, data pipelines, admin scripts). Scoped per app, revocable per app, no OAuth flow complexity.

OAuth 2.0 (required for public apps)

Required for apps published on the HubSpot App Marketplace or for any integration that acts on behalf of multiple HubSpot users. Standard three-leg authorization code flow. Register your app in the HubSpot Developer Portal to receive Client ID + Client Secret. Access tokens expire after 30 minutes; refresh tokens are long-lived.

Granular scopes at token creation. Both private app tokens and OAuth tokens support granular scopes (e.g., crm.objects.contacts.read, crm.objects.deals.write, content). Unlike Mailchimp or Postmark (all-or-nothing tokens), HubSpot lets you create tokens with only the exact permissions needed. Use this for third-party integrations to minimize blast radius of a leaked token.

Rate limits

HubSpot publishes rate limits per portal (customer account), with tier-based scaling. Understanding the 100/10s rule is essential for any non-trivial integration.

Limit typeStandard tierEnterprise tier
Requests per 10 seconds100200
Requests per day (Free / Starter)250,000N/A
Requests per day (Pro / Enterprise)500,000+1,000,000+
Search API (special limit)5 requests per second per portalSame — not increased on Enterprise
Batch endpointsUp to 100 records per batchSame — use to reduce request count
Response on exceedHTTP 429 with Retry-After headerSame — implement exponential backoff

The 100/10s per portal is portal-wide — shared across all API keys, private apps, and integrations accessing your HubSpot portal. If you run Zapier + a custom sync app + an OAuth integration simultaneously, they compete for the same 100/10s budget. Coordinate integration timing to avoid mutual throttling.

Search API is separately rate-limited. The /crm/v3/objects/{objectType}/search endpoints have their own 5 requests per second per portal ceiling — NOT increased on Enterprise. If you build heavy search-based workflows (e.g., “find all contacts matching X”), plan carefully or use batch reads with client-side filtering instead.

Official SDKs

Seven official client libraries maintained by HubSpot, plus TypeScript type definitions.

LanguagePackageInstallRepo
Node.js@hubspot/api-clientnpm installGitHub
Pythonhubspot-api-clientpip installGitHub
PHPhubspot/api-clientcomposer requireGitHub
Rubyhubspot-api-clientgem installGitHub
.NETHubSpot.NETInstall-PackageGitHub
Javahubspot-api-clientMaven / GradleGitHub
TypeScriptIncluded in @hubspot/api-clientnpm installSame repo as Node.js

Endpoints reference

The endpoint groups you will actually use in production. Full reference at developers.hubspot.com/docs/api/overview.

ResourceHTTP methodsDescription
Contacts
/crm/v3/objects/contacts
GET, POST, PATCH, DELETEFull CRUD on contacts. Batch endpoints for up to 100 records at once.
Companies
/crm/v3/objects/companies
GET, POST, PATCH, DELETEB2B account management. Associations to contacts, deals, tickets.
Deals
/crm/v3/objects/deals
GET, POST, PATCH, DELETESales pipeline management. Stage transitions, forecasting.
Tickets
/crm/v3/objects/tickets
GET, POST, PATCH, DELETEService Hub tickets. Status transitions, agent assignments.
Custom objects
/crm/v3/objects/{customType}
GET, POST, PATCH, DELETEEnterprise-only. Model any custom entity (subscriptions, memberships, etc.) with same CRUD semantics.
Marketing emails
/marketing/v3/emails
GET, POST, PATCH, DELETEMarketing Hub emails. CRUD + schedule + cancel + reports.
Transactional emails
/marketing/v3/transactional/single-email/send
POSTSend single transactional email (requires Transactional Email add-on).
Workflows
/automation/v4/flows
GET, POST, PATCH, DELETEMarketing + sales workflow automation. Enrollment triggers, branching logic.
Lists
/crm/v3/lists
GET, POST, DELETEStatic + dynamic contact lists. Manage memberships.
Forms
/marketing/v3/forms
GET, POST, PATCHHubSpot Forms CRUD. Form submissions handled via separate submissions endpoint.
Files
/files/v3/files
GET, POST, DELETEFile manager for images, attachments used in marketing content.
Webhooks
/webhooks/v3/subscriptions
GET, POST, PATCH, DELETEConfigure webhook subscriptions for object + property changes across the platform.

Code examples

Node.js: create or update a contact

const hubspot = require('@hubspot/api-client');

const client = new hubspot.Client({
  accessToken: 'pat-YOUR_PRIVATE_APP_TOKEN'
});

async function upsertContact(email) {
  try {
    // Try to find existing contact by email
    const found = await client.crm.contacts.searchApi.doSearch({
      filterGroups: [{
        filters: [{ propertyName: 'email', operator: 'EQ', value: email }]
      }]
    });

    if (found.results.length > 0) {
      const id = found.results[0].id;
      await client.crm.contacts.basicApi.update(id, {
        properties: { firstname: 'Alaa', lastname: 'Touil' }
      });
      console.log(`Updated contact ${id}`);
    } else {
      const created = await client.crm.contacts.basicApi.create({
        properties: { email, firstname: 'Alaa', lastname: 'Touil' }
      });
      console.log(`Created contact ${created.id}`);
    }
  } catch (err) {
    console.error(err.message);
  }
}

upsertContact('user@example.com');

Python: send a transactional email (requires add-on)

from hubspot import HubSpot
from hubspot.marketing.transactional import PublicSingleSendRequestEgg

client = HubSpot(access_token='pat-YOUR_PRIVATE_APP_TOKEN')

request = PublicSingleSendRequestEgg(
    email_id=123456,  # Transactional email template ID
    message={
        'to': 'customer@example.com',
        'from': 'sender@yourbrand.com',
        'reply_to': ['support@yourbrand.com']
    },
    contact_properties={'firstname': 'Alaa'},
    custom_properties={'order_id': 'ORD-1234'}
)

response = client.marketing.transactional.single_send_api.send_email(
    public_single_send_request_egg=request
)

print(f"Sent: {response.status_id}")

Common gotchas

100 requests per 10 seconds is portal-wide

The rate limit is shared across ALL integrations accessing your portal (Zapier + custom apps + OAuth integrations + private apps). If Zapier is running a busy workflow while you try to run a data sync, they compete for the same 100/10s budget. Coordinate integration timing.

Search API has separate 5/s rate limit

The /search endpoints on any CRM object are rate-limited at 5 requests per second per portal, NOT 100/10s. This limit is NOT raised on Enterprise. Building heavy search-based workflows requires client-side filtering with batch reads instead of many search calls.

Transactional Email endpoint requires the paid add-on

The /marketing/v3/transactional/single-email/send endpoint returns a 403 error if you have not purchased the Transactional Email add-on. See our SMTP Settings tab for add-on requirements and pricing.

Custom objects are Enterprise-only

The custom objects API (/crm/v3/objects/{customType}) is available only on Enterprise Hubs. Free, Starter, and Professional Hubs can only use standard objects (contacts, companies, deals, tickets). Plan around this if your data model requires custom entities.

API v1 vs v3 endpoint confusion

HubSpot has both v1 legacy endpoints and v3 modern endpoints in active use. Some functionality is only in v1 (older webhook types) or only in v3 (custom objects). Always check the endpoint documentation to confirm which version supports your operation, and prefer v3 for new development.

Deprecations and changelog

HubSpot maintains developer changelogs at developers.hubspot.com/changelog. Key items:

  • API v3 is current. Modern REST API with granular scopes and batch endpoints.
  • Legacy API keys deprecated (Nov 2022). Old-style single-key authentication was replaced by private app tokens for internal use and OAuth for public apps. Migrate immediately if you still use API keys.
  • Official HubSpot Remote MCP Server released in 2026. Wide CRM coverage from launch. Positioned as core AI-agent platform.
  • Custom objects API expanded through 2024-2025 for Enterprise customers modeling non-standard entities.
  • Breeze AI introduced 2024, matured through 2026 with content generation, meeting notes, forecasting, and prospect research capabilities.

Frequently asked questions

Does HubSpot have an official MCP server for AI agents?

Yes. The HubSpot Remote MCP Server is officially maintained by HubSpot and hosted at HubSpot’s MCP endpoint. Generally Available in 2026. Wide CRM coverage: contacts, companies, deals, tickets, marketing emails, workflows, lists. HTTP transport aligned with MCP 2026-07-28 spec. Compatible with Claude Desktop, Claude Code, Cursor, VSCode, ChatGPT Pro/Plus. Documented at developers.hubspot.com.

Which programming languages have official HubSpot SDKs?

Seven officially maintained SDKs: Node.js/TypeScript, Python, PHP, Ruby, .NET, Java, plus TypeScript type definitions included in the Node.js package. All maintained by HubSpot and updated as new API versions ship.

What is the HubSpot API rate limit?

100 requests per 10 seconds per portal on standard tier, 200/10s on Enterprise. Daily quotas: 250K/day (Free/Starter), 500K-1M/day (Pro/Enterprise). Search API has its own separate 5 requests per second ceiling that is NOT raised on Enterprise. All limits are per-portal and shared across all integrations.

How do I authenticate with the HubSpot API?

Two options. Private app tokens (recommended for internal use): generate in Settings › Integrations › Private Apps, assign granular scopes, use as Bearer token. OAuth 2.0 (required for public apps): standard three-leg flow with 30-minute access tokens and long-lived refresh tokens. Both support granular scopes — a strong feature vs Mailchimp or Postmark all-or-nothing tokens.

What is the difference between private app tokens and OAuth?

Private app tokens are for internal integrations within one HubSpot portal — no OAuth flow, simpler setup, assigned to one portal. OAuth 2.0 is required for public apps (App Marketplace listings) or any integration acting on behalf of multiple HubSpot customers — requires app registration in Developer Portal, three-leg authorization flow, token refresh handling. Both support granular scopes.

Can I send transactional email through the HubSpot API?

Yes, via the /marketing/v3/transactional/single-email/send endpoint — but ONLY if you have purchased the Transactional Email add-on. Without the add-on, the endpoint returns 403. See our SMTP Settings tab for add-on details and pricing.

Are legacy API keys still supported?

No. HubSpot deprecated the legacy single API key authentication in November 2022. All new integrations must use private app tokens (for internal use) or OAuth 2.0 (for public apps). If you still have integrations using API keys, migrate immediately — they will stop working per HubSpot’s shutoff timeline.

Changelog (recent)

  • 2026-08-18 API + MCP tab published on SMTPedia. First profile documenting HubSpot API v3 alongside the GA Remote MCP Server with wide CRM coverage.
  • 2026-07-28 MCP specification 2026-07-28 released. Stateless HTTP transport becomes default. HubSpot Remote MCP aligned with the new transport from launch.
  • 2026 HubSpot Remote MCP Server released GA. Wide CRM coverage from launch (contacts, companies, deals, tickets, marketing emails, workflows). Positioned as core AI-agent platform strategy.
AAlaa Touil RRabeb How we test →

This review follows our email infrastructure testing methodology. We disclose affiliate relationships in our editorial independence policy.