Skip to main content
BLG
Step-by-Step Setup 10-15 minutes

Blog Post CRUD Setup

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

Blog Post CRUD Setup

Create, update, and list blog posts with full SEO metadata through the GHL API. This quick-start walks you through authentication, publishing your first blog post, and managing existing content programmatically.

Prerequisites

Before making your first Blog Post CRUD call, confirm you have:

  • A GoHighLevel sub-account with the Blogs feature enabled
  • At least one blog site configured in your sub-account (check 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)

You will also need a blogId from an existing blog site. Retrieve it using the Blog Sites endpoint.

Set Up Authentication

All Blog Post CRUD endpoints require a Private Integration Token (PIT) with the blogs scope.

Navigate to Settings > Integrations > Private Integrations. Click Create New Integration, name it “Blog 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 Content-Type: application/json and the Version: 2021-07-28 header.

Make Your First Call

Start by creating a blog post. Send a POST request to /blogs/post:

POST /blogs/post
Authorization: Bearer {your-pit-token}
Content-Type: application/json

{
  "locationId": "your-location-id",
  "blogId": "your-blog-id",
  "title": "Getting Started with the GHL API",
  "slug": "getting-started-ghl-api",
  "body": "<p>Your HTML blog content goes here.</p>",
  "status": "published",
  "author": "author-id",
  "categoryId": "category-id",
  "seo": {
    "title": "Getting Started with GHL API | Your Blog",
    "description": "Learn how to use the GoHighLevel API.",
    "keywords": ["GHL", "API", "automation"]
  }
}

Key fields: title and body are required. slug auto-generates from the title if omitted. status accepts "published" or "draft". The seo object lets you set meta title, description, and keywords independently from the post title.

To update a post, use PUT /blogs/post/{id}. To list posts, use GET /blogs/posts?locationId={id}&blogId={id}.

Handle the Response

A successful POST returns a 200 status with the full post object:

{
  "post": {
    "id": "post-789",
    "title": "Getting Started with the GHL API",
    "slug": "getting-started-ghl-api",
    "status": "published",
    "publishedAt": "2026-03-07T12:00:00Z",
    "seo": {
      "title": "Getting Started with GHL API | Your Blog",
      "description": "Learn how to use the GoHighLevel API."
    }
  }
}

Save the post.id for subsequent update operations. The slug value determines the post’s URL path on your blog site.

Common errors: 400 means required fields are missing or the blogId is invalid. 401 means your token is invalid. 422 means the slug conflicts with an existing post. Use the Blog Authors & Cats slug check endpoint to validate slugs before creating posts.

Test Your Setup

Run through this checklist to confirm everything works:

  1. Create a draft post with POST /blogs/post and status "draft"
  2. List posts with GET /blogs/posts and verify your draft appears
  3. Update the post to "published" status with PUT /blogs/post/{id}
  4. Visit your blog site to confirm the post is live
  5. Verify SEO metadata by inspecting the page source for meta tags

If posts fail to appear on the blog site, confirm the blog site is published and the post status is set to "published", not "draft".

Next Steps

Read the full Blog Post CRUD Guide for advanced patterns including bulk publishing, content scheduling, and SEO optimization. From here, explore Blog Authors & Cats for managing blog metadata and Blog Sites for listing your blog properties.

Stay sharp. New guides and playbooks as they drop.