Skip to main content
GET
/
cms
/
v3
/
blogs
/
posts
Get all posts
curl --request GET \
  --url https://api.hubapi.com/cms/v3/blogs/posts \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.hubapi.com/cms/v3/blogs/posts"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.hubapi.com/cms/v3/blogs/posts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hubapi.com/cms/v3/blogs/posts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.hubapi.com/cms/v3/blogs/posts"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.hubapi.com/cms/v3/blogs/posts")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.hubapi.com/cms/v3/blogs/posts")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "results": [
    {
      "abTestId": "<string>",
      "archivedAt": 123,
      "archivedInDashboard": true,
      "attachedStylesheets": [
        {}
      ],
      "authorName": "<string>",
      "blogAuthorId": "<string>",
      "campaign": "<string>",
      "categoryId": 123,
      "contentGroupId": "<string>",
      "created": "2023-11-07T05:31:56Z",
      "createdById": "<string>",
      "currentlyPublished": true,
      "domain": "<string>",
      "dynamicPageDataSourceId": "<string>",
      "dynamicPageDataSourceType": 123,
      "dynamicPageHubDbTableId": "<string>",
      "enableDomainStylesheets": true,
      "enableGoogleAmpOutputOverride": true,
      "enableLayoutStylesheets": true,
      "featuredImage": "<string>",
      "featuredImageAltText": "<string>",
      "folderId": "<string>",
      "footerHtml": "<string>",
      "headHtml": "<string>",
      "htmlTitle": "<string>",
      "id": "<string>",
      "includeDefaultCustomCss": true,
      "layoutSections": {},
      "linkRelCanonicalUrl": "<string>",
      "mabExperimentId": "<string>",
      "metaDescription": "<string>",
      "name": "<string>",
      "pageExpiryDate": 123,
      "pageExpiryEnabled": true,
      "pageExpiryRedirectId": 123,
      "pageExpiryRedirectUrl": "<string>",
      "password": "<string>",
      "postBody": "<string>",
      "postSummary": "<string>",
      "publicAccessRules": [
        {}
      ],
      "publicAccessRulesEnabled": true,
      "publishDate": "2023-11-07T05:31:56Z",
      "publishImmediately": true,
      "rssBody": "<string>",
      "rssSummary": "<string>",
      "slug": "<string>",
      "state": "<string>",
      "tagIds": [
        123
      ],
      "themeSettingsValues": {},
      "translatedFromId": "<string>",
      "translations": {},
      "updated": "2023-11-07T05:31:56Z",
      "updatedById": "<string>",
      "url": "<string>",
      "useFeaturedImage": true,
      "widgetContainers": {},
      "widgets": {}
    }
  ],
  "total": 123,
  "paging": {
    "next": {
      "after": "<string>",
      "link": "<string>"
    }
  }
}
{
"message": "Invalid input (details will vary based on the error)",
"correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf",
"category": "VALIDATION_ERROR",
"links": {
"knowledge-base": "https://www.hubspot.com/products/service/knowledge-base"
}
}

Supported products

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Query Parameters

after
string

The paging cursor token of the last successfully read resource will be returned as the paging.next.after JSON property of a paged response containing more results.

archived
boolean

Specifies whether to return deleted blog posts. Defaults to false.

createdAfter
string<date-time>

Only return blog posts created after the specified time.

createdAt
string<date-time>

Only return blog posts created at exactly the specified time.

createdBefore
string<date-time>

Only return blog posts created before the specified time.

limit
integer<int32>

The maximum number of results to return. Default is 20.

property
string

Specific properties to return from the posts

sort
string[]

Specifies which fields to use for sorting results. Valid fields are createdAt (default), name, updatedAt, createdBy, updatedBy.

updatedAfter
string<date-time>

Only return blog posts last updated after the specified time.

updatedAt
string<date-time>

Only return blog posts last updated at exactly the specified time.

updatedBefore
string<date-time>

Only return blog posts last updated before the specified time.

Response

successful operation

Response object for collections of blog posts with pagination information.

results
object[]
required

Collection of blog posts.

total
integer<int32>
required

Total number of blog posts.

paging
object

Model definition for forward paging.

Last modified on March 30, 2026