How AI is applied across API Evangelist and APIs.io. Read my AI disclosure →
API Evangelist API Evangelist
Discovery
Learnings
Guidance
Toolbox
Alignment
API Evangelist LLC

HubSpot CMS Posts API

vNext REST API for Public Blog services

HubSpot CMS Posts API is one of 144 APIs that HubSpot publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 692 JSON Schema definitions.

Tagged areas include CMS and Posts. The published artifact set on APIs.io includes an OpenAPI specification, API documentation, code examples, and 692 JSON Schemas.

This API exposes 30 operations across 26 paths, organized into 4 resource areas, and defines 43 schemas. It is described by OpenAPI 3.0.1, at version 2026-09.

Requests are made against a single base URL, https://api.hubapi.com.

30 operations 26 paths 43 schemas 1 DELETE11 GET2 PATCH15 POST1 PUT

Metadata

The identity and technical contract details declared by the specification.

Specification
OpenAPI 3.0.1
API Version
2026-09
Base URL
https://api.hubapi.com
Authentication
API Key, OAuth 2.0, API Key, API Key
Resource Areas
4

Authentication & Security 4

HubSpot CMS Posts API declares 4 security schemes for authenticating requests. An API key is passed in the query as hapikey (developer_hapikey). It supports OAuth 2.0 (oauth2) using the authorizationCode flow, exposing 1 scope. An API key is passed in the header as private-app (private_apps). An API key is passed in the header as private-app-legacy (private_apps_legacy).

Paths & Operations 30

Across 26 paths, the API surfaces 30 operations — 1 DELETE, 11 GET, 2 PATCH, 15 POST, 1 PUT. They span 4 resource areas: Basic, Batch, Multi-language, Revisions. Each is listed below with its method, path, parameters, and response codes.

Basic 17
GET
/cms/blogs/2026-09/authors/cursor
get-/cms/blogs/2026-09/authors/cursor_/cms/blogs/v3/authors/cursor 11 params → 200default
GET
/cms/blogs/2026-09/authors/cursor/query
get-/cms/blogs/2026-09/authors/cursor/query_/cms/blogs/v3/authors/cursor/query 11 params → 200default
GET
/cms/blogs/2026-09/posts
Get all posts
get-/cms/blogs/2026-09/posts_getPage 11 params → 200default
POST
/cms/blogs/2026-09/posts
Create a new post
post-/cms/blogs/2026-09/posts_create body → 201default
POST
/cms/blogs/2026-09/posts/clone
Clone a blog post
post-/cms/blogs/2026-09/posts/clone_clone body → 200default
GET
/cms/blogs/2026-09/posts/cursor
get-/cms/blogs/2026-09/posts/cursor_/cms/blogs/v3/posts/cursor 11 params → 200default
GET
/cms/blogs/2026-09/posts/cursor/query
get-/cms/blogs/2026-09/posts/cursor/query_/cms/blogs/v3/posts/cursor/query 11 params → 200default
POST
/cms/blogs/2026-09/posts/schedule
Schedule a post to be published
post-/cms/blogs/2026-09/posts/schedule_schedule body → 204default
GET
/cms/blogs/2026-09/posts/{objectId}
Retrieve a blog post
get-/cms/blogs/2026-09/posts/{objectId}_getById 3 params → 200default
DELETE
/cms/blogs/2026-09/posts/{objectId}
Delete a blog post
delete-/cms/blogs/2026-09/posts/{objectId}_archive 2 params → 204default
PATCH
/cms/blogs/2026-09/posts/{objectId}
Update a post
patch-/cms/blogs/2026-09/posts/{objectId}_update 2 params body → 200default
GET
/cms/blogs/2026-09/posts/{objectId}/draft
Retrieve the full draft version of the Blog Post
get-/cms/blogs/2026-09/posts/{objectId}/draft_getDraftById 1 param → 200default
PATCH
/cms/blogs/2026-09/posts/{objectId}/draft
Update the draft of a post
patch-/cms/blogs/2026-09/posts/{objectId}/draft_updateDraft 1 param body → 200default
POST
/cms/blogs/2026-09/posts/{objectId}/draft/push-live
Publish blog post draft
post-/cms/blogs/2026-09/posts/{objectId}/draft/push-live_pushLive 1 param → 204default
POST
/cms/blogs/2026-09/posts/{objectId}/draft/reset
Reset post draft to the live version
post-/cms/blogs/2026-09/posts/{objectId}/draft/reset_resetDraft 1 param → 204default
GET
/cms/blogs/2026-09/tags/cursor
get-/cms/blogs/2026-09/tags/cursor_/cms/blogs/v3/tags/cursor 11 params → 200default
GET
/cms/blogs/2026-09/tags/cursor/query
get-/cms/blogs/2026-09/tags/cursor/query_/cms/blogs/v3/tags/cursor/query 11 params → 200default
Batch 4
POST
/cms/blogs/2026-09/posts/batch/archive
Delete a batch of blog posts
post-/cms/blogs/2026-09/posts/batch/archive_archive body → 204default
POST
/cms/blogs/2026-09/posts/batch/create
Create a batch of blog posts
post-/cms/blogs/2026-09/posts/batch/create_create body → 201207default
POST
/cms/blogs/2026-09/posts/batch/read
Retrieve a batch of Blog Posts
post-/cms/blogs/2026-09/posts/batch/read_read 1 param body → 200207default
POST
/cms/blogs/2026-09/posts/batch/update
Update a batch of Blog Posts
post-/cms/blogs/2026-09/posts/batch/update_update 1 param body → 200207default
Multi-language 5
POST
/cms/blogs/2026-09/posts/multi-language/attach-to-lang-group
Attach post to a multi-language group
post-/cms/blogs/2026-09/posts/multi-language/attach-to-lang-group_attachToLangGroup body → default
POST
/cms/blogs/2026-09/posts/multi-language/create-language-variation
Create a language variation
post-/cms/blogs/2026-09/posts/multi-language/create-language-variation_createLangVariation body → 200default
POST
/cms/blogs/2026-09/posts/multi-language/detach-from-lang-group
Detach post from a multi-language group
post-/cms/blogs/2026-09/posts/multi-language/detach-from-lang-group_detachFromLangGroup body → default
PUT
/cms/blogs/2026-09/posts/multi-language/set-new-lang-primary
Set a new primary language
put-/cms/blogs/2026-09/posts/multi-language/set-new-lang-primary_setLangPrimary body → 204default
POST
/cms/blogs/2026-09/posts/multi-language/update-languages
Update languages of multi-language group
post-/cms/blogs/2026-09/posts/multi-language/update-languages_updateLangs body → default
Revisions 4
GET
/cms/blogs/2026-09/posts/{objectId}/revisions
Retrieves all previous versions of a post
get-/cms/blogs/2026-09/posts/{objectId}/revisions_getPreviousVersions 4 params → 200default
GET
/cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId}
Retrieve a previous version of a blog post
get-/cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId}_getPreviousVersion 2 params → 200default
POST
/cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId}/restore
Restore a previous version
post-/cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId}/restore_restorePreviousVersion 2 params → 200default
POST
/cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId}/restore-to-draft
Restore a draft to a previous version
post-/cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId}/restore-to-draft_restorePreviousVersionToDraft 2 params → 200default

Schemas 43

The contract defines 43 schemas that model the data the API accepts and returns. The most detailed are BlogPost (62 properties), ContentLanguageVariation (15 properties), LayoutSection (13 properties), BatchResponseBlogPostWithErrors (8 properties). Each schema is shown below with its type and property counts.

Angle
object
2 properties 2 required
AttachToLangPrimaryRequestVNext
object
4 properties 3 required
BackgroundImage
object
3 properties 3 required
BatchInputBlogPost
object
1 property 1 required
BatchInputJsonNode
object
1 property 1 required
BatchInputString
object
1 property 1 required
BatchResponseBlogPost
object
6 properties 4 required
BatchResponseBlogPostWithErrors
object
8 properties 4 required
BlogPost
object
62 properties 62 required
BlogPostLanguageCloneRequestVNext
object
3 properties 1 required
BlogPostVersion
object
4 properties 4 required
BreakpointStyles
object
3 properties 3 required
CollectionResponseWithTotalBlogPostForwardPaging
object
3 properties 2 required
CollectionResponseWithTotalBlogPostVersion
object
3 properties 2 required
ColorStop
object
1 property 1 required
ContentCloneRequestVNext
object
2 properties 1 required
ContentLanguageVariation
object
15 properties 14 required
ContentScheduleRequestVNext
object
2 properties 2 required
CursorPagedResultBlogAuthorLong
object
CursorPagedResultBlogPostLong
object
CursorPagedResultTagLong
object
DetachFromLangGroupRequestVNext
object
1 property 1 required
Error
object
Represents an error response returned by the API when an operation fails. This component is used in various endpoints to provide detailed information about the…
7 properties 3 required
ErrorDetail
object
Represents detailed information about an error that occurred in the API. This component is used to provide additional context and specifics about errors, typic…
5 properties 1 required
ForwardPaging
object
Paging information for forward-only pagination. Contains the next page reference when more results are available; omitted or empty on the last page.
1 property
Gradient
object
3 properties 3 required
LayoutSection
object
13 properties 13 required
Margin
object
2 properties 2 required
NextPage
object
Specifies the paging information needed to retrieve the next set of results in a paginated API response
2 properties 1 required
Padding
object
4 properties 4 required
Paging
object
2 properties
PreviousPage
object
specifies the paging information needed to retrieve the previous set of results in a paginated API response
2 properties 1 required
PublicAccessRule
object
RGBAColor
object
4 properties 4 required
RowMetaData
object
2 properties 2 required
SetNewLanguagePrimaryRequestVNext
object
1 property 1 required
SideOrCorner
object
2 properties 2 required
Size
object
2 properties 2 required
StandardError
object
Ye olde error
8 properties 6 required
Styles
object
8 properties 7 required
UpdateLanguagesRequestVNext
object
2 properties 2 required
VersionBlogPost
object
4 properties 4 required
VersionUser
object
3 properties 3 required

Specification

The full machine-readable OpenAPI contract behind this narrative.

Source

hubspot-cms-posts-api-openapi.yml Raw ↑

Other APIs HubSpot publishes across the network.

HubSpot URL Redirects API
HubSpot Pipelines API
HubSpot Products API
HubSpot Line Items API
HubSpot Quotes API
HubSpot CRM Properties API
HubSpot Owners API
HubSpot CRM Imports API
HubSpot Custom Objects API
HubSpot Marketing Events API
HubSpot Forms API
HubSpot Workflows API
Where this information came from

This is an independent, third-party profile of HubSpot CMS Posts API, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.

The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.

Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.

info@apievangelist.com · Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.