vlayer logovlayer

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 }
}
FieldTypeMeaning
idintegerStored row id
platformCommentIdstringThe platform's comment id. Used for de-duplication
usernamestringCommenter's handle
commentTextstring
commentedAtdate-timeWhen the comment was posted
createdAtdate-timeWhen 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.