CRM & AutomationNew Release10 min readPublished August 14, 2026

Three read endpoints · one OAuth scope · zero write endpoints — as of publication

HubSpot Contracts API: In Beta, and It Only Reads

Third-party summaries say developers can now create and manage HubSpot contracts programmatically. HubSpot’s own API reference — last modified August 10, 2026 — documents something far narrower: list, get, and batch read, under a single read-only scope. Here’s what integrators can actually build today, and what still runs through the UI.

DA
Digital Applied Team
Senior strategists · Published Aug 14, 2026
PublishedAugust 14, 2026
Read time10 min
SourcesHubSpot docs, changelog, community
Documented write endpoints
0
Contracts API · docs dated Aug 10, 2026
OAuth scopes documented
1
crm.objects.contracts.read — read-only
Read endpoints live in docs
3
list · get by ID · batch read
Payment Links API endpoints
5
full CRUD — same July changelog
the contrast

The HubSpot Contracts API is in beta, and the circulating summary — that developers can now create, update, and manage contracts programmatically — is wrong. HubSpot’s official API reference, last modified August 10, 2026, documents exactly three endpoints for the contracts object, and all three are reads. There is no create, no update, no archive, no search. The only OAuth scope on the page is read-only.

That gap matters because it is the difference between an integration you can ship and a debugging session that ends in a support thread. At least one developer has already lost that time: a HubSpot Community thread from April 2026 shows the documented endpoints returning a scope error, and a HubSpot moderator confirming the docs had been published ahead of the actual release.

This post lays out what the Contracts API actually exposes as of publication, where the write-capability myth appears to come from, how the three separate “contracts” betas differ, what a read-only surface still lets you build, and where a custom-built stack remains the only way to automate the contract lifecycle end-to-end.

Key takeaways
  1. 01
    The Contracts API is read-only, per HubSpot’s own docs.The official reference (last modified August 10, 2026) documents a list endpoint, a get-by-ID endpoint, and a batch read — under the single scope crm.objects.contracts.read. No write endpoint of any kind appears on the page.
  2. 02
    The ‘create and manage via API’ claim traces to no primary source.Multiple third-party changelog summaries repeat near-identical write-capability language, but none links to a HubSpot page documenting a write endpoint. Treat the claim as unconfirmed; the primary source contradicts it.
  3. 03
    HubSpot’s docs shipped ahead of public access once already.In April 2026, a developer hit the documented endpoints and got a scope-not-available error. A HubSpot Senior Community Moderator confirmed the documentation had been published ahead of the release.
  4. 04
    Renewals and amendments still run through in-app quote workflows.Contracts are created automatically when a quote is accepted or signed, or via a CSV import tool (public beta since July 31, 2026). Mid-contract changes use change quotes; renewals spawn a new linked contract via renewal quotes.
  5. 05
    Read-only still enables real integrations — just not lifecycle automation.Renewal-date alerting, warehouse reporting, and one-way sync into external systems are all buildable today, once the read scope actually grants on your portal. Two-way sync and programmatic renewals are not — which is where custom-built CRM stacks keep their edge.

01The Primary SourceWhat the API reference actually documents.

HubSpot’s developer documentation defines contracts as committed revenue agreements between buyers and sellers, detailing products, billing, and payment terms. The API reference page for the object — which carries a “last modified on August 10, 2026” stamp — lists precisely three operations:

  • GET /crm/objects/2026-03/contracts — list all contracts
  • GET /crm/objects/2026-03/contracts/{contractId} — retrieve one contract by ID
  • POST /crm/objects/2026-03/contracts/batch/read — batch retrieve

The page’s own table of contents confirms the scope of the surface: “Retrieve contracts” and “Batch retrieve contracts.” That’s the whole list. The only OAuth scope documented anywhere on the page is crm.objects.contracts.read — and the naming tells you what the surface is for. The /2026-03/ path segment, incidentally, is HubSpot’s date-based API versioning scheme, announced March 30, 2026, which replaced the old v1–v4 numbering.

One practical detail worth knowing before your first call: a default contract response returns only hs_createdate, hs_lastmodifieddate, and hs_object_id. The properties you actually want — hs_name, hs_contract_effective_date, and friends — must be requested explicitly via the ?properties= query parameter.

Read surface
Documented endpoints
3

List all contracts, get one by ID, batch read. Every operation on the reference page is a retrieval — the page’s table of contents lists nothing else.

GET · GET · POST batch/read
Auth surface
OAuth scope
1

crm.objects.contracts.read is the only scope documented for the object. No write scope exists on the page — the permission model itself is read-only.

read-only by design
Write surface
Create, update, archive, search
0

None documented. Contract creation happens in-app when a quote is accepted or signed, or through a CSV import tool — not through a REST endpoint.

as of publication

02The MythWhere the write-API claim came from.

Search for the Contracts API today and you will find third-party changelog aggregators and AI-generated summaries asserting that developers can now “create, update and manage contracts programmatically.” The phrasing recurs across multiple sites in near-identical form — a familiar signature of content-mill copy propagating from a single unsourced origin. In our review, none of those pages links to a HubSpot document that describes a write endpoint, and we could not find one either.

HubSpot’s own knowledge base settles the question from the other direction. The article “Create and import contracts” describes exactly two ways a contract comes into existence: automatically, in-app, when a quote is accepted or signed; or through a CSV import tool in the HubSpot UI. It then points developers to the Contracts API page as the resource for building custom solutions — that is, for reading contract data, not writing it. In-app creation and editing, for what it’s worth, requires a Revenue Hub seat plus Super Admin permissions or specific contract-create permissions.

Fabrication watch
The claim that the Contracts API supports programmatic creation traces to no primary source we could locate, and it directly contradicts the endpoint list on HubSpot’s official reference page. If a vendor, agency, or AI summary tells you it can write contracts today, ask for the endpoint URL — as of publication, there isn’t one to give.

The interesting question is why the myth is so sticky. Part of the answer is pattern-matching: nearly every other object in HubSpot’s sales pipeline — deals, quotes, invoices — has a full CRUD API, so a “Contracts API” announcement reads, by default, as another one. Part of it is that the word “beta” flattens distinctions: an in-app object beta, an import-tool beta, and a read-API beta all compress into “HubSpot contracts are in beta now,” and each retelling rounds the capability upward.

03The April GotchaWhen the docs shipped before the access.

This isn’t hypothetical caution — the docs-versus-reality gap has already cost at least one integrator real debugging time. On April 9, 2026, a developer opened a HubSpot Community thread after hitting the documented contracts endpoints and receiving: “The scope needed for this API call isn’t available for public use. If you have questions, contact support or post in our developer forum.” The endpoints were in the documentation; the access behind them wasn’t live.

Six days later, on April 15, a HubSpot Senior Community Moderator confirmed what the community had suspected — the documentation had been published ahead of the actual release:

From the HubSpot Community thread · April 15, 2026
A senior community moderator, Shane, confirmed the docs had run ahead of the release: It would appear that Mike_Eastwood’s suggestion (that the docs were updated ahead of the release) is correct. … I do apologize for the confusion, and I’m hoping that this is released sooner rather than later! But I hope this at least clarifies that we don’t expect this to be accessible publicly as of yet, and now the team is aware of the misalignment within our documentation.

Four months on, the reference page has been actively edited — the August 10 last-modified stamp shows that — and third-party analysis of the same thread noted the inconsistency that quotes, deals, and invoices already had accessible APIs and OAuth scopes while contracts did not, speculating the API sat in a closed alpha or beta with docs published pre-launch. The operational lesson for integrators is blunt: for beta objects, a documented endpoint is a statement of intent, not a guarantee of access. Test the scope grant before you scope the project.

04Three BetasThree betas, one name.

Much of the confusion collapses once you separate the three distinct things HubSpot has put into beta under the “contracts” banner during 2026. They shipped at different times, through different channels, with very different developer implications.

In-app object
Contracts object
UI + workflow beta · ~Spring Spotlight 2026

A commerce-hub record connecting quotes, contract terms, and revenue tracking. Entered public beta around HubSpot’s Spring Spotlight 2026 event (April–May), per third-party recaps — we found no primary changelog entry pinning an exact date.

Where contracts live
CSV import
Contract Imports
Import-tool beta · July 31, 2026

Announced in HubSpot’s official July 2026 Rollup: bring active contracts from external systems into HubSpot via the import tool, then manage them with the same change-quote and renewal-quote workflows as native contracts.

How external contracts get in
Developer surface
Contracts API
Read-only API · docs modified Aug 10, 2026

The one genuinely API-shaped piece: list, get, and batch read under a single read scope. The recent last-modified stamp makes it current news for integrators — with the honest caveat that it only reads.

What developers can call

The in-app object is the strategic center of the story. It sits directly inside HubSpot’s Revenue Hub quote-to-cash flow: per third-party reporting, the object chain runs Deal → Quote → Contract (auto-created on quote acceptance) → Invoice → Subscription, with contracts tracking metrics like TCV, ACV, MRR, and ARR. The same reporting says the in-app beta requires a Commerce Hub Professional or Enterprise subscription with a paid seat, and is unavailable to accounts using HubSpot Payments or Stripe as their processor — we could not verify that tier gating against a primary HubSpot page, so treat it as reported rather than confirmed.

The pitch behind the object is real enough. HubSpot’s Commerce Hub general manager — in remarks quoted secondhand by Vantagepoint from a LinkedIn post — framed the problem as the questions sales and customer-success teams face after the initial sale: figuring out the upsell, handling proration, co-terming, making renewals turnkey, and knowing a customer’s lifetime value. Those are exactly the jobs a contracts object should do. The catch, for anyone integrating from outside, is that every one of those jobs currently runs through the interface: mid-contract amendments happen via change quotes created from the contract record, and renewals via renewal quotes that spawn a new linked contract on acceptance.

05Capability GridWhat’s programmable today, feature by feature.

No coverage we found lays out the API-versus-UI split as a single grid — most pieces either treat the whole contracts story as one beta or focus narrowly on the April scope bug. So here it is, assembled from HubSpot’s API reference, its knowledge base, and third-party reporting on the in-app workflows, as of publication:

HubSpot contracts capability grid comparing what is available through the public API versus the in-app interface, grouped into reading contract data and creating or changing contracts, with the mechanism behind each capability.
CapabilityPublic API todayIn-app UIMechanism
Reading contract data — the documented API surface
List all contractsYesYesGET /crm/objects/2026-03/contracts
Read one contract by IDYesYesGET .../contracts/{contractId}
Batch-read contractsYesPOST .../contracts/batch/read
Read named properties (name, effective date)Yes, via ?properties=YesDefaults return only createdate, lastmodifieddate, object ID
Creating and changing contracts — UI and workflow only
Create a contractNoYesAuto-created when a quote is accepted or signed
Import external contractsNoYesCSV import tool — public beta since July 31, 2026
Amend mid-contractNoYesChange quote created from the contract record
Renew a contractNoYesRenewal quote spawns a new linked contract on acceptance
Update, archive, or search via APINon/aNo endpoint documented as of publication

The sharpest evidence that this read-only shape is a deliberate staging decision — not just how HubSpot does betas — sits in the very same July 2026 Rollup that announced Contract Imports. That changelog also introduced a Payment Links API beta with a genuinely full surface: five documented endpoints covering create, get, list, update, and delete. When HubSpot considers an API beta-ready for writes, it publishes the write endpoints. The Contracts API, by that standard, isn’t there yet.

Documented endpoints per beta API · summer 2026

Source: HubSpot developer docs and July 2026 Rollup, as of publication
Payment Links APIPOST · GET · GET list · PATCH · DELETE — full CRUD beta
5
Contracts API — read endpointsList · get by ID · batch read
3
Contracts API — write endpointsCreate, update, archive, search: none documented
0

06Build TodayWhat read-only still enables.

A read-only API is not a useless API. Contract data is exactly the kind of record where the highest-value integrations are often reads: knowing what was agreed, when it ends, and what it’s worth. If your integration’s job is visibility rather than mutation, you can build it today — provided the beta is enabled on your portal. That caveat is the April thread’s lesson: confirm the read scope actually grants in your account before you scope the work.

Renewal alerting
Renewal-date sync and alerts

Poll contract properties like the effective date on a schedule, compute time-to-renewal in your own system, and fire alerts into Slack, email, or a task queue. The renewal action stays human-in-the-UI, but nobody misses the date.

Buildable today
Reporting & BI
Warehouse reporting

Batch-read contracts into a warehouse and join committed-revenue data against product usage, support tickets, or finance actuals — reporting HubSpot’s own dashboards can’t do because the other half of the data lives outside the CRM.

Buildable today
One-way sync
Push contract data outward

Mirror contract records into an ERP, a CPQ sidecar, or a customer portal on a one-way feed. Reads are all you need as long as HubSpot stays the system of record and nothing flows back.

Buildable today
Lifecycle automation
Programmatic renewals & amendments

Not possible via this API as of publication. Creation is quote-driven or CSV-imported; amendments and renewals are in-app quote workflows. Two-way sync from an external system has no write path to land on.

Not yet — see section 07

Two adjacent reads for anyone scoping this: our guide to contract management automation inside a CRM covers the workflow layer this API only partially exposes, and if you’re accessing HubSpot data through agents rather than hand-rolled REST calls, HubSpot’s MCP server for AI agents is the other programmatic surface worth knowing — with the same caveat that an agent can only call endpoints that exist.

07Buy vs BuildWhere custom-built stacks win.

The gap this beta leaves open is specific and worth naming: if your business needs contract lifecycle automation — renewals triggered by external billing events, amendments generated from a provisioning system, contracts created by a partner portal — the HubSpot Contracts object cannot receive those writes from outside as of publication. Every mutation runs through a human in the interface or a CSV upload. For low contract volume that’s fine. At scale, it’s a queue of manual steps sitting exactly where an integration should be.

This is where the buy-vs-build decision for CRM tooling gets concrete. A custom stack — a CRM with genuine write APIs plus a purpose-built app layer — can expose true create, update, and renewal endpoints for contract records today, because you control the schema and the API surface. We build exactly this kind of system in our CRM automation engagements, and the pattern also shapes how HubSpot, Salesforce, and Zoho compare for agentic CRM work: an AI agent is only as capable as the write surface underneath it.

Looking forward, two signals suggest HubSpot knows writes are the destination. First, the read API exists at all — you don’t version an object into your public API surface to leave it read-only forever. Second, HubSpot announced on August 11, 2026 that the 2026-09 API version (shipping September 8, 2026) will enforce admin-configured validation rules on CRM API write paths platform-wide — infrastructure that matters most when more objects accept writes. Our expectation, clearly labeled as projection rather than announcement: contract write endpoints are more likely a when than an if, but nothing HubSpot has published dates them. Plan around what’s documented, not what’s plausible.

If you build against a future write API
Whenever contract writes ship, expect the September 8, 2026 write-validation enforcement to already be in force — meaning admin-configured validation rules would apply to your payloads from day one. Design integrations that read validation errors gracefully now, and re-check the Contracts API reference before committing roadmap: its August 10 last-modified stamp shows the page is under active edit.

08ConclusionBeta means read the docs, literally.

The honest status, August 2026

The Contracts API reads. Everything else is a quote workflow.

The accurate version of the HubSpot contracts story is narrower than the circulating one, and more useful for it. As of publication: the Contracts API exposes three read endpoints under one read-only scope. Contracts are created by accepted quotes or CSV import, amended by change quotes, renewed by renewal quotes — all in-app. The write-capability claims in third-party summaries trace to no primary source, and HubSpot’s own moderators have confirmed the docs once ran ahead of access for this exact object.

For integrators, the practical playbook follows directly. Build the read-side wins now — renewal alerting, warehouse reporting, one-way sync — because they’re genuinely available and genuinely valuable. Verify scope access before scoping projects, because for beta objects a documented endpoint is intent, not access. And if contract lifecycle automation is a requirement rather than a nice-to-have, weigh a custom-built stack honestly: the capability gap between a read-only object and a write API you control is not a detail — it is the difference between automation and a reminder system.

Automate your contract lifecycle

When the platform API only reads, a custom stack is how the lifecycle gets automated.

Our team designs and builds CRM integrations and custom automation layers — including contract lifecycle systems HubSpot’s current API can’t power — delivered in weeks, not quarters.

Free consultationExpert guidanceTailored solutions
What we work on

CRM integration engagements

  • HubSpot read-API integrations — reporting, alerting, sync
  • Custom contract lifecycle systems with true write APIs
  • Zoho + custom-app stacks for quote-to-cash automation
  • Agentic CRM workflows on real write surfaces
  • Migration and integration audits before you commit
FAQ · HubSpot Contracts API

The questions integrators actually ask.

The Contracts API is HubSpot’s developer-facing surface for the contracts object, and as of publication it is read-only. The official reference page — last modified August 10, 2026 — documents three endpoints: GET /crm/objects/2026-03/contracts to list all contracts, GET with a contract ID to retrieve one, and POST .../batch/read for batch retrieval. The only OAuth scope on the page is crm.objects.contracts.read. Note that the broader contracts feature spans three separate betas: the in-app Contracts object (a commerce record connecting quotes, terms, and revenue), the Contract Imports CSV tool (public beta announced July 31, 2026), and this read API. They are different mechanisms, and conflating them is the root of most inaccurate coverage.
Related dispatches

Continue exploring CRM automation.