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
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
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. |
limit
|
integer |
Page size, up to |
search
|
string |
Search author name, author email, or comment content. |
status
|
string |
Filter by moderation status. |
post_id
|
uuid |
Filter by Blog Post id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_PAGEPage must be a positive integer.
-
400VALIDATION_LIST_INVALID_LIMITLimit must be a positive integer.
-
400STORE_API_INVALID_REQUEST_BODYpost_id is not a valid UUID.
-
400BLOG_COMMENT_SEARCH_TOO_LONGSearch exceeds the contract maximum.
-
400BLOG_COMMENT_STATUS_INVALIDStatus is not supported.
Get blog comment counts
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
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. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYComment id is not a valid UUID.
-
404NOT_FOUNDComment does not exist in this store.
Moderate a blog comment
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. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
status
required
|
string |
New moderation status. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYComment id is not a valid UUID.
-
404NOT_FOUNDComment does not exist in this store.
-
400STORE_API_INVALID_REQUEST_BODYRequest body is malformed or contains an unknown field.
-
400BLOG_COMMENT_STATUS_INVALIDStatus is not pending, approved, spam, or trash.
Bulk moderate blog comments
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. |
status
required
|
string |
New moderation status. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body is malformed, contains an unknown field, or contains a malformed id.
-
400BLOG_COMMENT_BULK_NO_IDSNo comment ids were provided.
-
400BLOG_COMMENT_BULK_UPDATE_TOO_MANYBatch exceeds the bulk update cap.
-
400BLOG_COMMENT_STATUS_INVALIDStatus is not pending, approved, spam, or trash.
-
404NOT_FOUNDOne or more comments do not exist in this store.
Delete a blog comment
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. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYComment id is not a valid UUID.
-
404NOT_FOUNDComment does not exist in this store.
Bulk delete blog comments
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. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body is malformed, contains an unknown field, or contains a malformed id.
-
400BLOG_COMMENT_BULK_NO_IDSNo comment ids were provided.
-
400BLOG_COMMENT_BULK_DELETE_TOO_MANYBatch exceeds the bulk delete cap.
-
404NOT_FOUNDOne or more comments do not exist in this store.
Fields#
Field |
Type |
Create |
Update |
Required |
Translatable |
|---|---|---|---|---|---|
|
string |
No |
No |
No |
|
|
string |
No |
No |
No |
|
|
string |
No |
No |
No |
|
|
string (UUID) |
No |
No |
No |
|
|
string |
No |
No |
No |
|
|
string (UUID) |
No |
No |
No |
|
|
string |
No |
Yes |
update |
No |
|
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
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
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
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 |