Comments
Read the stored comments on a challenge post and refresh them from the platform.
Comments are scraped from the challenge post and stored. Read the stored list at any time; refresh when you want the latest comments, for example before a batch verify-and-reward.
List stored comments
GET /admin/challenges/{challengeId}/comments?page=1&limit=20
curl "{API_BASE_URL}/admin/challenges/1/comments?page=1&limit=50" \
-H "Authorization: Bearer <API_TOKEN>"{
"data": [
{
"id": 1,
"platformCommentId": "17890012345678",
"username": "creator_jane",
"commentText": "Love this product! #SummerVibes",
"commentedAt": "2026-06-02T14:21:07.000Z",
"createdAt": "2026-06-02T15:00:11.000Z"
}
],
"pagination": { "page": 1, "limit": 50, "total": 347 }
}| Field | Type | Meaning |
|---|---|---|
id | integer | Stored row id |
platformCommentId | string | The platform's comment id. Used for de-duplication |
username | string | Commenter's handle |
commentText | string | |
commentedAt | date-time | When the comment was posted |
createdAt | date-time | When the row was stored |
Refresh from the platform
POST /admin/challenges/{challengeId}/comments/refresh
Fetches every comment on the post (up to 500 pages) and, for Instagram, threaded replies on a best-effort basis. New comments are inserted; existing ones are matched on platformCommentId and left unchanged.
curl -X POST {API_BASE_URL}/admin/challenges/1/comments/refresh \
-H "Authorization: Bearer <API_TOKEN>"{ "data": { "totalFetched": 347 } }totalFetched is the number of comments read from the platform in this run, not the number inserted.
Errors
When the post cannot be read, the refresh route returns one of the scraping errors. 422 and 404 are permanent for that post; 429, 502, and 503 are worth retrying.