Skip to main content
Comments are the feedback left on a promotion version, both Adclear AI findings and human review notes. Use the read endpoint to pull feedback into your own workflow, and the import endpoint to push external review comments back into Adclear.

Get comments

Response (200 OK):
Each thread has one top-level comment and its replies in chronological order. Threads are ordered oldest first. The promotionId and versionId in the path must belong to your workspace, or the request returns 404.

Query parameters

Page through with offset. Keep requesting until pagination.hasMore is false.

Comment fields

Author

Pagination fields

For cross-cutting errors (401, 403, 429, 502), see Errors & rate limits.

Import comments

Use this endpoint to push external review feedback (roots, replies, and action responses) onto the current latest version of a promotion. Each item is processed independently: one failure does not roll back the rest. Send externalCommentId on every item if you need safe sequential retries. If you omit it, a retry after an ambiguous failure may create duplicates. Two simultaneous duplicate requests can still race. Imported comments may not appear in Get comments immediately. Wait briefly before using GET to resolve parentCommentId.
Response (200 OK, partial success):

Author identity

Every human author must include author.email. The email must match an active Adclear user who belongs to your organization. Optional trace fields (displayName, sourceUserId, sourceRole) are accepted for logging but are not stored and never affect permissions. If the author cannot be resolved, the item is rejected with AUTHOR_UNAVAILABLE. The same message is used whether the email is unknown or the user is not a member, so the endpoint cannot be used to probe Adclear accounts.

Item types

Supported action values: agree_to_action, agree_will_action, dismiss, dispute, relevant_not_required, reply. To reply to an AI evaluation finding, use the commentId that each comment-backed issue carries in the evaluation-completed webhook as parentCommentId. Comment indexing is asynchronous, so a reply sent immediately after the webhook may be rejected with PARENT_NOT_FOUND; wait briefly and retry.

Location (roots only)

location must already be collapsed to a single point, timestamp, or exact text snippet. The server does not accept rectangles or time ranges, so collapse them before sending:
  • A region or bounding box → its centre point, as xRatio/yRatio.
  • A time range → its start, as timeSeconds.
Omit location entirely to create an unanchored thread, which appears in the comment sidebar rather than on the asset.

Per-item result codes

Whole-request errors use the standard envelope: 404 when the promotion or version is not found, 409 when the version is not the latest, and 502 when author identity lookup is temporarily unavailable (no items are written).