Blog Comments

Read, moderate, delete, bulk manage, and subscribe to blog comments through the Store API.

Use these endpoints to read, moderate, and delete blog comments. Reads require read_blog; moderation and deletion require write_blog. Responses include the author's email for moderation. Do not expose management responses as public comment data.

Comments have no replies. Shopper submissions use the hosted comment form and follow the store's comment and moderation settings. A repeated submission with the same receipt does not create a second comment. Spam and trash, and the commenter's personal data, expire. The store's settings response includes the retention notice.

Bulk moderation and deletion apply atomically to the requested existing comments. A moderation call that does not change status does not emit another webhook. Webhook events describe each changed or deleted comment. Deleting a blog post also deletes its comments and emits their deletion events.

Endpoints#

Blog Comment limits

GET read_blog

Fetch blog comment limits.

Returns pagination, search, bulk-operation, field, and moderation-status limits.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

List blog comments

GET read_blog

List blog comments for moderation.

Returns store-wide comments in newest-first order. Filter by status or post, or search author name, author email, and content.

Query parameters

Name Type Description
page integer

Page number.

Example: 1
limit integer

Page size, up to list_max_limit from the Blog Comment limits.

Example: 20
search string

Search author name, author email, or comment content.

Example: launch
status string

Filter by moderation status.

Example: pending
post_id uuid

Filter by Blog Post id.

Example: 3a588f80-fd8c-4d46-af1b-00a1c4a7f85a

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 VALIDATION_LIST_INVALID_PAGE

    Page must be a positive integer.

  • 400 VALIDATION_LIST_INVALID_LIMIT

    Limit must be a positive integer.

  • 400 STORE_API_INVALID_REQUEST_BODY

    post_id is not a valid UUID.

  • 400 BLOG_COMMENT_SEARCH_TOO_LONG

    Search exceeds the contract maximum.

  • 400 BLOG_COMMENT_STATUS_INVALID

    Status is not supported.

Get blog comment counts

GET read_blog

Fetch counts by moderation status.

Returns the current pending, approved, spam, and trash counts for the store.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Get a blog comment

GET read_blog

Fetch one blog comment.

Returns the comment only when it belongs to the token's store.

Path parameters

Name Type Description
id required uuid

Blog Comment id.

Example: 5ff7d4ea-3250-4a4d-9d26-07f64d917d31

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Comment id is not a valid UUID.

  • 404 NOT_FOUND

    Comment does not exist in this store.

Moderate a blog comment

PUT write_blog

Change one comment's moderation status.

Sets status to pending, approved, spam, or trash. The change, audit record, and update webhook commit atomically.

Path parameters

Name Type Description
id required uuid

Blog Comment id.

Example: 5ff7d4ea-3250-4a4d-9d26-07f64d917d31

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
status required string

New moderation status.

Example: approved

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Comment id is not a valid UUID.

  • 404 NOT_FOUND

    Comment does not exist in this store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is malformed or contains an unknown field.

  • 400 BLOG_COMMENT_STATUS_INVALID

    Status is not pending, approved, spam, or trash.

Bulk moderate blog comments

POST write_blog

Change the moderation status of multiple comments.

Updates every selected comment atomically. If an id is invalid, missing, or belongs to another store, none are changed.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
comment_ids required array<uuid>

Comment ids to update.

Example: ["5ff7d4ea-3250-4a4d-9d26-07f64d917d31"]
status required string

New moderation status.

Example: approved

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is malformed, contains an unknown field, or contains a malformed id.

  • 400 BLOG_COMMENT_BULK_NO_IDS

    No comment ids were provided.

  • 400 BLOG_COMMENT_BULK_UPDATE_TOO_MANY

    Batch exceeds the bulk update cap.

  • 400 BLOG_COMMENT_STATUS_INVALID

    Status is not pending, approved, spam, or trash.

  • 404 NOT_FOUND

    One or more comments do not exist in this store.

Delete a blog comment

DELETE write_blog

Permanently delete one comment.

Deletes the comment atomically with its audit record and delete webhook. This operation cannot be undone.

Path parameters

Name Type Description
id required uuid

Blog Comment id.

Example: 5ff7d4ea-3250-4a4d-9d26-07f64d917d31

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Comment id is not a valid UUID.

  • 404 NOT_FOUND

    Comment does not exist in this store.

Bulk delete blog comments

POST write_blog

Permanently delete multiple comments.

Deletes every selected comment atomically. If an id is invalid, missing, or belongs to another store, none are deleted.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
comment_ids required array<uuid>

Comment ids to delete.

Example: ["5ff7d4ea-3250-4a4d-9d26-07f64d917d31"]

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is malformed, contains an unknown field, or contains a malformed id.

  • 400 BLOG_COMMENT_BULK_NO_IDS

    No comment ids were provided.

  • 400 BLOG_COMMENT_BULK_DELETE_TOO_MANY

    Batch exceeds the bulk delete cap.

  • 404 NOT_FOUND

    One or more comments do not exist in this store.

Fields#

Field

Type

Create

Update

Required

Translatable

author_name

string

No

No

No

author_email

string

No

No

No

content

string

No

No

No

post_id

string (UUID)

No

No

No

post_title

string

No

No

No

customer_id

string (UUID)

No

No

No

status

string

No

Yes

update

No

created_at

string (RFC 3339)

No

No

No

Webhook events#

Subscribe to these events to keep your integration in sync with blog comments. Each event shows the required Store API scope and store permission, the available payload fields, and an example payload. Subscription setup is validated against those permissions; delivery is always restricted to the subscription's store.

Blog comment received

EVENT blog_comments/create App scope: read_blog Staff permission: blog:write

Fired when a shopper submits a blog comment (pending or approved per the store's moderation setting).

Payload fields

Field Type Description
blog_comment.id string Always present
blog_comment.post_id string Always present
blog_comment.post_title string Selectable in the Payload builder
blog_comment.post_slug string Selectable in the Payload builder
blog_comment.customer_id string Selectable in the Payload builder
blog_comment.author_name string Always present
blog_comment.content string Always present
blog_comment.status string Always present
blog_comment.created_at string Always present

Blog comment updated

EVENT blog_comments/update App scope: read_blog Staff permission: blog:write

Fired when a merchant changes a blog comment's moderation status.

Payload fields

Field Type Description
blog_comment.id string Always present
blog_comment.post_id string Always present
blog_comment.post_title string Selectable in the Payload builder
blog_comment.post_slug string Selectable in the Payload builder
blog_comment.customer_id string Selectable in the Payload builder
blog_comment.author_name string Always present
blog_comment.content string Always present
blog_comment.status string Always present
blog_comment.created_at string Always present

Blog comment deleted

EVENT blog_comments/delete App scope: read_blog Staff permission: blog:write

Fired when a merchant permanently deletes a blog comment, including when deleting one or more parent posts cascades their comments.

Payload fields

Field Type Description
blog_comment.id string Always present
blog_comment.post_id string Always present
blog_comment.post_title string Selectable in the Payload builder
blog_comment.post_slug string Selectable in the Payload builder
blog_comment.customer_id string Selectable in the Payload builder
blog_comment.author_name string Always present
blog_comment.content string Always present
blog_comment.status string Always present
blog_comment.created_at string Always present