Skip to main content
BST
Step-by-Step Setup 5-10 minutes

Blog Sites Setup

Content & Email Basic
Need more detail? Read the full guide for config deep-dives and best practices.

Blog Sites Setup

List all blog sites configured in your GoHighLevel sub-account. Each sub-account can host multiple blog sites, and this endpoint returns their IDs, names, and URLs. This quick-start covers authentication and retrieving your blog site list.

Prerequisites

Before making your first Blog Sites call, confirm you have:

  • A GoHighLevel sub-account with at least one blog site created under Sites > Blogs
  • Access to Settings > Integrations > Private Integrations in your sub-account
  • A REST client such as Postman, Insomnia, or curl in your terminal
  • Your sub-account’s locationId (found in Settings > Business Profile)

If you do not have a blog site yet, create one in Sites > Blogs through the GHL dashboard before proceeding.

Set Up Authentication

The Blog Sites endpoint requires a Private Integration Token (PIT) with the blogs scope.

Navigate to Settings > Integrations > Private Integrations. Click Create New Integration, name it “Blog Sites API,” and enable the blogs scope. Click Save and copy the generated token.

Pass this token in the Authorization header as a Bearer token. Set your base URL to https://services.leadconnectorhq.com. Include the Version: 2021-07-28 header with your request.

Make Your First Call

List all blog sites for your sub-account with a simple GET request:

GET /blogs/sites?locationId=your-location-id
Authorization: Bearer {your-pit-token}

This returns all blog sites associated with your location. No additional parameters are needed. Each site object includes the id, name, url, and publishing status.

The id value from this response is the blogId you need for all other blog endpoints, including Blog Post CRUD and Blog Authors & Cats. Always call this endpoint first if you do not already have your blog site ID stored.

Handle the Response

A successful call returns a 200 status with an array of blog site objects:

{
  "sites": [
    {
      "id": "blog-001",
      "name": "Company Blog",
      "url": "https://yourdomain.com/blog",
      "status": "published",
      "postsCount": 24
    },
    {
      "id": "blog-002",
      "name": "Resource Center",
      "url": "https://yourdomain.com/resources",
      "status": "draft",
      "postsCount": 8
    }
  ]
}

Note the status field. A blog site with "draft" status is not publicly visible even if it contains published posts. The postsCount gives you a quick count of total posts per site.

Common errors: 401 means your token is invalid or the blogs scope is not enabled. An empty sites array means no blog sites have been created in this sub-account. 400 means the locationId parameter is missing or invalid.

Test Your Setup

Run through this checklist to confirm everything works:

  1. List sites with GET /blogs/sites and verify the response contains your blog(s)
  2. Copy the blog ID from the first result for use in other endpoints
  3. Cross-reference the results with what you see in Sites > Blogs in the GHL dashboard
  4. Test the blog URL by visiting it in a browser to confirm it resolves
  5. Use the blog ID in a GET /blogs/posts?blogId={id} call to verify the connection

If the sites list is empty, create a blog site through the GHL dashboard at Sites > Blogs, then re-test the API.

Next Steps

Read the full Blog Sites Guide for multi-site management strategies. From here, explore Blog Post CRUD for creating and managing posts and Blog Authors & Cats for configuring blog metadata.

Stay sharp. New guides and playbooks as they drop.