Portal
One HubSpot portal.
Buy Portal26 days leftExisting HubSpot accounts can create legacy private apps until 26 October 2026
Legacy Bridge performs each v1 to v3 call through HubSpot’s date-based API and answers in the legacy format. Change the base URL, keep the code.
Your integration sendsContacts API v1
GET /contacts/v1/lists/all/contacts/all ?count=2&vidOffset=7000059
Legacy Bridge callsDate-based API 2026-09
GET /crm/properties/2026-09/contacts GET /crm/objects/2026-09/contacts ?limit=2 &after=7000059 &properties=firstname,lastname,company,lastmodifieddate,email,…
"contacts": [{ "vid": 7000060, … }]"has-more": true"vid-offset": 7000063Fixture hubspot/contacts-v1/list-all-page from our test suiteThe legacy APIs lose support in steps. Integrations written against them need a path to the date-based API.
HubSpot disables legacy private app creation on 28 September 2026 for new accounts and on 26 October 2026 for existing ones. New tokens come from projects-based apps.
HubSpot ends support for its v4 APIs, announced separately earlier in 2026.
Endpoints with /v1/, /v2/ and /v3/ in the path, legacy public apps and legacy private apps get no more bug fixes, reliability improvements or security updates. HubSpot has not announced a switch-off date.
Source: HubSpot developer changelog, Legacy APIs and Apps: What’s Going Unsupported and When (15 September 2026), checked on 30 September 2026.
The bridge accepts legacy v1 to v3 calls, performs them through the date-based API with a token of your portal, and answers with the same fields, paging and error bodies.
Create a private app in a HubSpot project, or an app with static auth, give it the scopes of the APIs your integration calls, and paste its access token into the console. It is stored sealed and never shown again.
# the only line that changes
- https://api.hubapi.com/contacts/v1/lists/all/contacts/all
+ https://hubspot.avakode.com/contacts/v1/lists/all/contacts/allSend the bridge key where the integration sent its token: Authorization: Bearer <bridge key>, or ?hapikey=<bridge key> for code written against API keys. Paths, parameters and bodies stay as they are.
Every call is counted per operation. A call the bridge cannot translate answers 501 BRIDGE_UNSUPPORTED and gets a line in your gap report, never an empty success. Agencies see the report per client portal.
Every legacy operation lives in the bridge’s registry with its status. This page is generated from it, so it cannot claim more than the code does.
60 more have no date-based version at all; the bridge passes them to HubSpot’s legacy endpoint while HubSpot keeps it. The 166 others answer 501 BRIDGE_UNSUPPORTED.
| The APIs most integrations were written against | Share | Answered |
|---|---|---|
| Contacts v1 | 14 / 23 | |
| Contact lists v1 | 12 / 12 | |
| Companies v2 | 8 / 10 | |
| Deals v1 | 7 / 8 | |
| Pipelines v1 | 7 / 7 | |
| Engagements v1 | 7 / 9 | |
| Associations v1 | 5 / 5 | |
| Properties v1 and v2 | 39 / 39 | |
| Owners v2 | 2 / 2 | |
| Tickets v1 | 9 / 10 | |
| Forms v1 to v3 | 7 + 3 / 11 | |
| Email subscriptions v1 | 3 + 1 / 4 | |
| Workflows v2 and v3 | 0 + 8 / 8 | |
| Blog posts v2 | 0 + 16 / 16 | |
| Timeline v1 | 0 / 13 | |
| Products and line items v1 | 0 / 20 |
“Answered” counts translated and partial operations, plus the ones passed through, of all the operations in that API.
Upload a ZIP of your integration or paste the HubSpot URLs it calls. You get each legacy call, whether the bridge translates it, and the share it covers today. Free, and nothing is stored.
sprintf placeholders and […].join('/')node_modules, vendor, build and hidden folders; files up to 2 MB, 5,000 filesThe version moves into the path (/crm/v3/objects/contacts becomes /crm/objects/2026-09/contacts), and not every call is a rename. In HubSpot’s own catalogue, 44 of 1,040 legacy operations have no date-based counterpart at all, 95 change in a breaking way and 18 sit in APIs with no date-based version yet (open dbv-map, 17 September 2026); the v1 and v2 APIs most integrations were written against are not in that catalogue at all.
| Question | Rewrite on the date-based API | Legacy Bridge |
|---|---|---|
| Code changes | Every legacy call ported: object model, property history, associations, paging cursors and error bodies all change. | The base URL and the credential. Paths, parameters and responses stay the v1 ones. |
| Paging and errors | New cursors and error formats to handle everywhere. | vid-offset, has-more and offset keep working; errors come back in the legacy form. |
| Integrations you cannot change | Plugins, vendor connectors and old scripts break when their endpoints do. | Keep working on the date-based API, for every call the bridge translates. |
| What HubSpot dropped | You redesign around it. | Documented per operation: partial (for example contact form-submissions) or not translated, never silent. |
| After September 2027 | Works: it calls the date-based API. | Works: the bridge calls the date-based API, not the unsupported endpoints. |
| Cost | Developer time, then maintenance. | From $99 a month per portal; agencies from $790 a month for 10 portals. |
| Your CRM data | Between your code and HubSpot. | Through the bridge, in memory only; or self-host the bridge. |
A common path: switch the base URL now, keep the business running, and use the gap report to rewrite the calls that matter most first.
What the bridge keeps, what it never keeps, and what you control.
Records, property values and files pass through memory and are answered. Logs carry no request URLs, so a hapikey never lands there. How data is handled
{ "ts": "2026-09-30T08:14:03.512Z", "adapter": "hubspot",
"operation": "GET:/contacts/v1/lists/all/contacts/all",
"status": "translated", "upstream_calls": 2,
"latency_ms": 184, "request_id": "req_…" }The portal token is stored sealed with AES-256-GCM and never shown again. Replacing it is one paste in the console.
The bridge can only do what the token’s scopes allow. The guide lists the scopes per API your integration uses.
Bridge keys are stored as SHA-256 hashes and shown once; issue and revoke them in the console at any time.
The same bridge as a Docker image on your server: CRM data never leaves your network except to HubSpot. $1,500 a year.
The Agency plan puts up to 10 client portals under one sign-in, from $790 a month, with a volume price beyond that.
The agency console signs you in by e-mail link and lists every client portal with its own bridge keys, token, usage and journal of untranslated calls.
The bridge on your own subdomain and reports without Avakode branding, for agencies that run integrations under their name.
Per HubSpot portal, for agencies, or a yearly licence to run the bridge yourself. Going over the monthly volume never breaks your integration: we get in touch instead.
One HubSpot portal.
Buy PortalOne HubSpot portal, higher request volume.
Buy Portal PlusUp to 10 client portals under one account. Beyond that, a volume price by agreement.
Contact usRun the bridge on your own server (Docker).
Buy Self-hostedPayment is handled by Paddle, our reseller and Merchant of Record (buyer terms): card, invoice and sales tax. Buying takes you to bridges.avakode.com, the Avakode Bridges checkout, where Paddle’s checkout opens. Monthly plans can be cancelled at any time and end with the paid month; the first payment is refundable for 14 days, the self-hosted licence for 14 days from purchase (Terms · Refunds · Privacy). Your licence key (FRG-…) arrives by email a few minutes later. Already have one? Sign in to the console; agencies sign in to the agency console.
Anything else: support@avakode.com.
HubSpot says the v1 to v3 APIs become unsupported after September 2027: no bug fixes, reliability improvements or security updates. It has not announced a switch-off date. The bridge moves your calls to the date-based API now, so an unsupported endpoint breaking later does not take your integration with it.
form-submissions, list-memberships, merge-audits (reported as partial where they matter).501 BRIDGE_UNSUPPORTED.Every limit is on the coverage page, per operation.
No, it translates. A v1 contact call becomes the date-based calls that produce the same answer (vid, properties with versions, identity profiles), and the answer comes back in the v1 shape with the same paging.
Some have none yet: workflows v2 to v4, blog v2, form submissions and a few more. The bridge passes them to HubSpot’s legacy endpoint unchanged while HubSpot keeps it (unsupported in September 2027; v4: 30 March 2027) and reports them apart. When HubSpot retires one, the bridge answers 501 BRIDGE_UNSUPPORTED.
A token of your portal: a private app in a HubSpot project, or an app with static auth. Legacy private apps become unsupported in September 2027 too, so the bridge does not depend on one.
No. Records pass through memory only. The bridge keeps the sealed token, key hashes, daily counters, coverage metadata and short-lived paging cursors; the security page lists everything.
Yes: the bridge is one app of your portal, and one legacy call can take more than one HubSpot call. The bridge keeps the portal inside HubSpot’s limits and answers 429 with Retry-After, as HubSpot does.
Ten portals on the Portal plan would be 10 × $99 = $990 a month. The Agency plan covers up to 10 client portals under one account for $790, about 20% less, and larger portfolios get a volume price.
Yes. The self-hosted licence ($1,500 a year) runs the same bridge as a Docker image on your server.
Paddle is our reseller and Merchant of Record: card or invoice, with sales tax handled. Monthly plans can be cancelled at any time and end with the paid month; the first payment is refundable for 14 days (Refund Policy).
Legacy Bridge is built and run by Avakode, a small software company making bridges for retired APIs. Questions go to people who wrote the code: support@avakode.com, answered within two business days.