Ghost CMS Comments API: What's Available and How to Work Around the Gaps

Ghost CMS Comments API Guide

You're building a headless Ghost site. You've got the Content API working, posts loading beautifully, and then you hit a wall: where do comments go?

This exact question popped up on the Ghost forum in March 2026: a developer working on a headless Ghost project couldn't find any documented endpoint for creating comments via the Admin API or Members API. The thread quickly surfaced something Ghost users keep running into — the comments system sits in an awkward place, half-integrated and mostly undocumented from an API standpoint.

Here's what's actually available, what's not, and how to handle comments in a headless Ghost setup without losing your mind.

Quick answer: Ghost's native comments don't have official API endpoints for creating or managing them programmatically. You can read comments via the undocumented Members API at {site.url}/members/api/comments/, but writing comments through the API requires reverse-engineering network calls or using the database directly. For most headless setups, a third-party solution is the practical path.

Ghost CMS Comments API Guide

How does Ghost's native commenting system work?

Ghost added native member-based comments in 2022. They're tied to the Members feature — only signed-in members can comment, and the system requires a Ghost front-end (or at minimum, the Ghost portal script) to handle authentication.

Under the hood, when a user submits a comment, the browser makes a POST request to an internal endpoint using the member's session token. Ghost's comments-ui package handles this — it's a separate React application that embeds via an iframe with cross-origin messaging between the frontend and the Ghost admin context.

The Handlebars helper {{comments}} drops this whole system into your theme with a single line. If you're using the default Ghost front-end, it just works. The problem starts when you're headless.

Is there an official Ghost comments API endpoint?

No. As of March 2026, Ghost has no documented API endpoints for creating, editing, or deleting native comments through the Admin API or Content API.

What does exist is an undocumented Members API endpoint for reading comments:

GET {site_url}/members/api/comments/?filter=post_id:[POST_ID]

This endpoint returns paginated comment data and supports the same filter/order syntax as the Content API. A Ghost forum moderator confirmed this in a 2024 thread. But it's undocumented, meaning Ghost can change or remove it without notice.

There's also an existing GitHub issue requesting CRUD API endpoints for native comments, filed in 2023 — it's still open with no committed timeline.

ActionOfficial API SupportWorkaround Available
Read commentsPartial (Members API, undocumented)Yes
Create commentsNoDirect DB / reverse-engineer
Delete commentsNoDirect DB / Ghost Admin UI
Moderate commentsNoGhost Admin UI only

How do I read Ghost comments via the Members API?

If you just need to display existing comments in a headless build, the undocumented Members API is your best bet for now. Here's how it works:

// Fetch comments for a specific post
const response = await fetch(
  `${ghostUrl}/members/api/comments/?filter=post_id:${postId}&order=created_at asc`,
  {
    headers: {
      // Include the member's session cookie for authenticated requests
      'Cookie': memberSessionCookie
    }
  }
);

const data = await response.json();
// data.comments contains the comment objects
// data.meta.pagination has total/pages info

Without a member session, you'll only get approved public comments (if that setting exists). The response shape mirrors Ghost's standard API responses — each comment has id, post_id, member, html, replies, and timestamps.

For a server-side integration like n8n, you can poll this endpoint on a schedule to sync comments to an external database.

How do I create comments programmatically in Ghost?

There are three approaches, none of them clean:

Option 1: Direct database access (SQL)

Ghost stores comments in the comments table with a standard relational structure. If you have database access — which you do on self-hosted Ghost — you can insert rows directly. One forum user successfully migrated WordPress comments this way using n8n.

-- Basic structure for inserting a Ghost comment
INSERT INTO comments (id, post_id, member_id, html, status, created_at, updated_at)
VALUES (
  '<uuid>',
  '<post-id>',
  '<member-id>',
  '<p>Comment text here</p>',
  'published',
  NOW(),
  NOW()
);

The caveat: Ghost's database schema can change between versions. Always check your Ghost version's migrations before using this approach.

Option 2: Reverse-engineer the comments-ui API

Open browser DevTools on a Ghost site with comments enabled, submit a comment, and watch the Network tab. Ghost's comments-ui makes a POST request to an internal endpoint using the authenticated member session. You can replicate this call with the right session token — but you need a valid member session, which means you need the member to be logged in first.

Option 3: Replace native comments with a third-party solution

For headless setups, this is honestly the path of least friction. The existing Ghost add comments guide covers Disqus and other options that work independently of the Ghost front-end.

What are the best comment solutions for a headless Ghost setup?

If you're going headless, you have real flexibility to pick the right comment system for your stack:

SolutionSelf-hostedFree tierAPI-first
Remark42YesYes (open source)Yes
GiscusNo (GitHub-based)YesVia GitHub API
CommentoYesNoYes
DisqusNoYes (with ads)Limited
UtterancesNo (GitHub-based)YesVia GitHub Issues

Remark42 pairs well with Ghost headless setups because it has a proper REST API, supports SSO via JWT (so you can authenticate Ghost members without separate accounts), and stores data in your own database. You'd run it as a sidecar service alongside Ghost.

Giscus works well for developer-focused content where your audience has GitHub accounts. No server needed.

Can I use the Ghost Admin API to moderate comments?

Not yet. Comment moderation — approving, hiding, or deleting comments — happens exclusively through Ghost Admin's UI. There's no Admin API endpoint to do this programmatically as of 2026.

If you need automated moderation (spam filtering, keyword blocking), your options are:

  • Use a third-party comment system with its own moderation API
  • Write a webhook listener that triggers on comment.added events (if Ghost supports it) and use the database approach to update status
  • Accept that moderation happens manually in Ghost Admin

Ghost does fire webhooks on various events. Check your Ghost webhook configuration — a comment.added webhook could let you build an external moderation workflow even without a proper API.

How do I migrate WordPress comments to Ghost?

This is one of the most common reasons developers want comment API access. The confirmed working method as of 2025:

  1. Export WordPress comments (WP Admin → Tools → Export, or via SQL)
  2. Create Ghost member accounts for each commenter via the Ghost Admin API members endpoint
  3. Insert comments directly into Ghost's database using the SQL approach above
  4. Match member_id from step 2 with comments from step 1

The Ghost forum confirms this works. One user ran the entire process through n8n, mapping WordPress comment data to Ghost's database schema field by field.

The relationship fields to map:

WordPress                Ghost DB
comment_ID         →    id (new UUID)
comment_post_ID    →    post_id (Ghost post UUID)
user_id / email    →    member_id (Ghost member UUID)
comment_content    →    html (wrap in <p> tags)
comment_date_gmt   →    created_at
comment_parent     →    parent_id (for threaded comments)

Will Ghost add official comment API endpoints?

There's a feature request on the Ghost ideas board for full CRUD API endpoints for native comments. The Ghost team hasn't committed to a timeline. Given that Ghost's comments feature is relatively young (launched 2022) and they're focused on membership and newsletter growth, comment API access isn't in the near-term roadmap publicly.

If this matters to your project, the pragmatic answer is to not block on it. Either use the database approach for one-time migrations, or adopt a third-party comment solution that gives you the API access you need today.

Frequently Asked Questions

Does Ghost have a comments API?

Ghost doesn't have official documented API endpoints for comments. There's an undocumented Members API endpoint for reading comments at {site_url}/members/api/comments/, but no supported way to create or moderate comments via API.

How do I get comments from a Ghost post via API?

Use the undocumented Members API: GET {site_url}/members/api/comments/?filter=post_id:[id]. This returns paginated comment data but requires a valid member session for private comments.

Can I add comments to Ghost without the Ghost front-end?

Yes, but not using native Ghost comments — those require the Ghost portal and authentication system. Use a third-party comment tool (Remark42, Giscus, Disqus) that works independently via JavaScript embed.

How do I migrate WordPress comments to Ghost?

The confirmed method: create Ghost member accounts via the Admin API, then insert comments directly into Ghost's database using SQL. Map WordPress comment fields to Ghost's comments table schema manually.

Does Ghost support comment webhooks?

Ghost's webhook system covers posts, members, and subscriptions. Comment-specific webhooks aren't widely documented — check Ghost Admin → Settings → Integrations for the current list of available webhook events on your version.

What's the best comment system for a headless Ghost site?

Remark42 works well because it has a full REST API, JWT-based SSO (so you can integrate Ghost member auth), and stores data self-hosted. Giscus works for developer audiences with GitHub accounts at zero infrastructure cost.

Can I moderate Ghost comments via API?

No. Comment moderation is only available through the Ghost Admin UI as of 2026. If you need programmatic moderation, use a third-party comment system that provides moderation APIs.

Where are Ghost comments stored in the database?

Ghost stores comments in a comments table with fields including id, post_id, member_id, html, status, parent_id (for threading), and standard timestamps.

If you need comments in a headless Ghost setup now, skip waiting for official API support. Either use the database approach for data migrations, integrate Remark42 with Ghost JWT auth for a fully API-driven comment system, or reach for Giscus if your audience skews technical. The native Ghost comments path is great for standard Ghost themes — but headless builds need a different tool for a job Ghost's API simply doesn't cover yet.

Subscribe to Ghost SEO

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe