Easy Tech Tuts
HubSpot

How to Use HubSpot API Easily 2026

By Impran M NLast checked against official docs

HubSpot is rolling out date-based API versioning, dated segments like /2026-03/ meant to eventually replace the old numeric v1 through v4 paths, but the switch is gradual and most CRM object endpoints still run on /crm/v3/ today. A more urgent change for anyone building a new integration right now: HubSpot is closing the door on creating new legacy private apps within days, and steering everyone toward a different mechanism called Service Keys instead.

This guide covers what's live today versus what's still rolling out: where authentication lives, which credential you should generate depending on the date you're reading this, and the batching and retry logic that keeps a CRM integration from tripping HubSpot's rate limits. It's written for developers building or maintaining a connection to HubSpot's CRM objects, not for anyone just clicking through the marketing or sales tools.

Before you start

  • Super admin permissions on the HubSpot account. Only a super admin can create a legacy private app or a Service Key.

01Know which versioning scheme applies to the endpoint you're using

HubSpot's older API paths use plain numeric versions, like /crm/v3/objects/contacts. In 2026, HubSpot introduced a parallel date-based scheme, where a version is a release date instead of a number, formatted as /YYYY-MM/, for example /2026-03/.

Beta releases carry a -beta suffix, like /2026-09-beta/. The two schemes coexist.

HubSpot's own versioning guide says existing v1 through v4 endpoints keep working at their current URLs during the transition, and as of this check the core CRM Objects API, contacts, deals, companies, and so on, is still documented at /crm/v3/objects/, not a dated path. Don't assume a dated URL for an endpoint until you've confirmed it in HubSpot's own API reference. Guessing at a /2026-03/ path for an endpoint that hasn't moved yet will 404.

02Choose your authentication path

Authentication for a custom integration starts in different places depending on which mechanism you use, and which one is right for you changed very recently. Legacy private apps, the option most existing tutorials describe, live under Development, then Legacy apps, in the left sidebar, not under Settings and Integrations as older guides say.

Click Create legacy app, then Private. HubSpot has announced it's disabling the creation of new legacy private apps: from September 28, 2026 for accounts created on or after that date, and from October 26, 2026 for accounts that already existed.

Apps created before those dates keep working; only new creation is blocked. In their place, HubSpot is pushing Service Keys, created at Settings, then Integrations, then Service Keys, now described as the modern route for a system-to-system integration.

03Generate your credential

Whichever path applies to you, name the app or key and grant it only the specific scopes it needs, like read and write access to Contacts or Deals, not blanket account access. A legacy private app issues an access token.

That's the credential's real name; "Service Key" belongs to the newer mechanism, a separate thing entirely, despite how often the two get conflated in older tutorials. Either credential goes into your requests the same way, as a bearer token: Authorization: Bearer YOUR_TOKEN.

If you're building an OAuth app instead, the equivalent step is exchanging your authorization code at HubSpot's token endpoint, https://api.hubapi.com/oauth/v1/token, a plain numbered path that hasn't moved to the dated scheme. Treat whichever token you get like a password. It's the only credential standing between the public internet and your CRM data.

04Build requests against the right endpoint paths

With a token in hand, a basic GET request to fetch a contact points at /crm/v3/objects/contacts/{contactId} today, the same numbered path integrations have used for years, not a dated one. Whether you're using a plain HTTP client, an API testing tool, or a server-side SDK, the shape of the call is the same: method, URL, Authorization header, and a JSON body for anything beyond a simple read.

Test a single-object GET request first before moving on to batch or bulk calls, so you can confirm your token's scopes cover the object type you're targeting. Check HubSpot's own API reference for the endpoint you need before building against it; that's the only reliable way to know whether it has already moved to a dated path or still sits on v3.

05Use batch endpoints and handle pagination

For anything beyond a handful of records, HubSpot's batch read endpoints, such as POST /crm/v3/objects/contacts/batch/read, let you fetch up to 100 records in a single payload, far more efficient than looping single-object requests. Responses beyond that limit include a paging.next.after value carrying the ID of the next record.

Pass it into your next request's after parameter to walk through the full result set page by page instead of guessing at offsets. Skipping pagination logic is one of the fastest ways to silently miss records in a large sync job.

06Plan for rate limit errors with exponential backoff

Even with batching and pagination handled correctly, high-volume integrations will eventually hit a 429 response when they exceed HubSpot's rate limits. The standard fix is exponential backoff: catch the 429, wait a short interval, retry, and double that interval on each subsequent failure instead of hammering the endpoint at a fixed rate.

Build this retry loop in from the start. Bolting it on after a production integration starts failing costs a lot more debugging time later.

Legacy private app vs. Service Key
Legacy private appService Key
Where to create itDevelopment > Legacy apps > Create legacy app > PrivateSettings > Integrations > Service Keys
Credential nameAccess tokenService Key
New creation allowed?No, from Sept 28, 2026 (new accounts) or Oct 26, 2026 (existing accounts)Yes; this is the mechanism HubSpot is steering new integrations toward
Existing credentialsKeep working; HubSpot isn't revoking themNot applicable, this is the new mechanism

Dates and details from HubSpot's developer changelog, checked in September 2026. Confirm current status on HubSpot's changelog before building against either path, since sunset timelines can move.

When it doesn't work

A request to a numeric path like /crm/v3/objects/contacts returns a 404 or an unexpected error

Why: This usually means an old numeric endpoint is mixed with scopes or an app created under the newer platform, or the endpoint has genuinely moved to a dated path. The two versioning schemes coexist, so which one applies depends on the specific endpoint.

Fix: Check HubSpot's own API reference for that exact endpoint before assuming its path. Don't guess at a dated /YYYY-MM/ URL for an endpoint you haven't confirmed has moved.

"Create legacy app" isn't available, or only a Service Key option shows up

Why: HubSpot disables new legacy private app creation from September 28, 2026 for new accounts, or October 26, 2026 for existing accounts. Once an account crosses that date, the legacy creation flow disappears and only Service Keys remain for new credentials.

Fix: Create a Service Key instead, from Settings, Integrations, Service Keys. Existing legacy private apps keep working; only new creation is blocked.

Requests fail with a 429 during a large sync

Why: The integration is sending requests faster than HubSpot's rate limit allows, often because batching and backoff weren't built in from the start.

Fix: Batch requests up to the 100-record limit, and add exponential backoff: catch the 429, wait, retry, and double the wait on each subsequent failure.

FAQ

Frequently asked questions

What changed with HubSpot's API versioning?

HubSpot introduced date-based endpoints, like /2026-03/, alongside its older numeric versions. The two coexist: legacy v1 through v4 paths keep working, and most CRM object endpoints, contacts and deals among them, are still on /crm/v3/ as of this check. Confirm an endpoint's path in HubSpot's reference before assuming it has moved to a dated URL.

How do I authenticate HubSpot API requests?

Create a legacy private app under Development, Legacy apps, or a Service Key under Settings, Integrations, Service Keys, grant it specific scopes, and use the token it issues as a bearer token in your requests' Authorization header. Which one you should create depends on the date: HubSpot is disabling new legacy private app creation from late September 2026.

Is a Service Key the same thing as a Private App token?

No, and this is a common mix-up. A legacy private app issues an access token. Service Key is the name of a separate, newer authentication mechanism that HubSpot is steering new integrations toward as legacy private app creation gets phased out.

How many records can I fetch in one batch call?

Batch endpoints typically let you fetch up to 100 records per request, which helps you stay within rate limits compared to looping single-object calls.

What should I do if I get a 429 error?

Implement exponential backoff: catch the 429 response, wait, retry, and increase the wait time on each subsequent failure instead of retrying at a fixed interval.

How do I paginate through large result sets?

Read the paging.next.after value from the response body and pass it into your next request's after parameter to move through results page by page.

Sources and last check

Checked against HubSpot's official developer documentation in September 2026, days before HubSpot disables new legacy private app creation (September 28 for new accounts, October 26 for existing ones). Three corrections came out of that check: the OAuth token endpoint is the plain oauth/v1/token, not a dated path as the draft implied; the CRM Objects API most integrations use is still on /crm/v3/, not a dated one, as of this check; and the credential the original draft called a "Service Key" is an access token issued by a legacy private app, a different thing from HubSpot's separate, newer Service Keys mechanism.

About the author

Impran M N
Written by

Impran M N

I've been hooked on technology for as long as I can remember — especially the new tools and AI apps that seem to land every other week. Easy Tech Tuts is where I write up whatever I've just worked out: I do the task in the real product, record the screen, and turn it into the guide I wish I'd found first.