Editorial comments
Requires a license with the
content-profeature. See pricing.
Editorial comments let your team talk about an entry where the entry is. A first comment opens a thread, and replies stay under it, one level deep. Resolve a thread when it is settled and reopen it if it is not. Mention a colleague and they get an email.
In the admin console
Section titled “In the admin console”Open an entry under Content. The Comments card below its fields holds the entry's threads, and its title counts the open ones. Open, Resolved and All choose which threads it lists.
- Write in New thread, pick anyone to notify under Mention, and choose Comment.
- Reply answers a thread.
- Resolve closes a thread, and Reopen brings a resolved one back.

How it works
Section titled “How it works”| Part | What it does |
|---|---|
| Thread | A first comment with no parent_id. It can be resolved and reopened. |
| Reply | A comment whose parent_id is the thread's first comment. A reply to a reply lands in the same thread. |
| Mention | A user id in mentions. Each person mentioned gets an email when email is set up. Without it the comment is still saved and nobody is mailed. |
Threads belong to the entry and are deleted with it. When a person's data is erased, their comments keep the text and lose the author.
Try it
Section titled “Try it”Run this on an install whose license carries content-pro. You need an admin
token in TOKEN. The quickstart shows how
to get one. Copy an entry's id into ENTRY_ID, for example from
Content lifecycle.
-
Open a thread:
Terminal window curl -X POST http://localhost:3001/api/admin/content/entries/$ENTRY_ID/comments \-H "Authorization: Bearer $TOKEN" \-H "Content-Type: application/json" \-d '{"body": "Can we shorten the second paragraph?"}'{"id": "f57403a3-5392-4663-90bb-9554fc919823","entry_id": "059b65ff-ef7e-4e3a-8ea8-fa543834804a","author_id": "3e7cc859-1207-4c7c-9af2-363fa5079e0b","body": "Can we shorten the second paragraph?","mentions": [],"resolved": false,"created_at": "2026-10-03T15:06:55Z","updated_at": "2026-10-03T15:06:55Z"}The answer is
201. Copy itsidintoTHREAD_ID. -
Reply to it:
Terminal window curl -X POST http://localhost:3001/api/admin/content/entries/$ENTRY_ID/comments \-H "Authorization: Bearer $TOKEN" \-H "Content-Type: application/json" \-d '{"body": "Done, it is two sentences now.", "parent_id": "'"$THREAD_ID"'"}' -
Resolve the thread:
Terminal window curl -X POST http://localhost:3001/api/admin/content/entries/$ENTRY_ID/comments/$THREAD_ID/resolve \-H "Authorization: Bearer $TOKEN"The answer is the first comment with
"resolved": true,resolved_byandresolved_at. -
List the resolved threads:
Terminal window curl "http://localhost:3001/api/admin/content/entries/$ENTRY_ID/comments?state=resolved" \-H "Authorization: Bearer $TOKEN"The answer is
{"data": [...]}, with the thread and its reply underreplies.
Comment, reply and mention
Section titled “Comment, reply and mention”| Field | Meaning |
|---|---|
body | The comment, required, at most 10,000 bytes. |
parent_id | The first comment of the thread to reply to. Leave it out to open a thread. |
mentions | Up to 20 user ids of people in your tenant. |
GET .../comments takes ?state=open, resolved or all, the default. Each
thread comes with its replies, oldest first. .../resolve and .../reopen
work on the first comment of a thread only.
If the license lapses
Section titled “If the license lapses”Your threads stay. Reading, resolving and reopening stay free. Writing a new
comment or a reply needs content-pro again.
Routes
Section titled “Routes”Every route needs the admin or super_admin role. An
admin token can list with the content:read grant
and write with content:write.
| Method | Path | Purpose | Needs content-pro |
|---|---|---|---|
GET | /api/admin/content/entries/{id}/comments | The entry's threads. | No |
POST | /api/admin/content/entries/{id}/comments | Open a thread or reply. Answers 201. | Yes |
POST | /api/admin/content/entries/{id}/comments/{commentID}/resolve | Resolve a thread. | No |
POST | /api/admin/content/entries/{id}/comments/{commentID}/reopen | Reopen a thread. | No |
Errors
Section titled “Errors”| Status | Message | Cause |
|---|---|---|
400 | invalid JSON body | The body does not parse. |
400 | state must be open, resolved or all | An unknown state. |
400 | a mentioned person has no account here | A mention is not an account of your tenant. |
400 | the comment replied to is not on this entry | parent_id belongs to another entry. |
400 | only the first comment of a thread can be resolved or reopened | Resolve the thread, not a reply. |
402 | payment_required, naming feature:content-pro | Writing a comment without content-pro. |
404 | entry or comment not found | No such entry or comment in your tenant. |
422 | body is required and at most 10000 bytes | Fix the body. |
422 | a comment mentions at most 20 people | Mention fewer people. |
Related
Section titled “Related”- Content lifecycle: the entries comments belong to.
- Content releases: the other part of
content-pro. - Editorial review: approvals in stages, with a comment at each decision.
- Content editing: the entry page in the admin console.