Challenge data
Comments, likers, post metrics, and attempt administration for a challenge
List stored comments
Get paginated comments stored for a challenge post.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerQuery Parameters
pageinteger1limitinteger20Comment list
Get latest post metrics
Returns the most recent metrics snapshot for the challenge post (likes, comments, shares, views).
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerLatest metrics
Force-refresh post metrics
Fetches fresh metrics (Instagram post info or TikTok video info) and stores a new snapshot. Use this to get up-to-date like/comment/share/view counts.
If the scraping provider cannot read the post, the reason is propagated — see the ScrapingError schema. The most common case is an age-restricted Instagram post (422 POST_AGE_RESTRICTED), which can only be resolved by the creator reposting without the restriction.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerFreshly fetched metrics
Force-refresh comments
Fetches all comments (up to 500 pages) and Instagram threaded replies. Inserts new comments into the database (deduplicates by platform comment ID). Use this to pull the latest comments for verification.
If the scraping provider cannot read the post, the reason is propagated — see the ScrapingError schema.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerRefresh result
Create attempt for a user (admin)
Create an attempt on behalf of a specific creator. Caller must be admin. Identify the creator by either userId (internal integer id) or externalId (customer-side identifier stored on users.externalId).
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Request Body
application/jsonRequireduserIdintegerInternal user id. Mutually exclusive with externalId — provide one.
externalIdstringCustomer-side identifier stored on users.externalId. Mutually exclusive with userId — provide one.
Path Parameters
challengeIdRequiredintegerAttempt created
Get attempt by ID
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerattemptIdRequiredintegerAttempt details
Progress attempt for a user (admin)
Advance an attempt's state on behalf of the attempt's owning creator. Caller must be admin. The owning user is resolved from the attempt row — no userId/externalId needed in the body.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Request Body
application/jsonRequiredactionRequiredstring"target_opened" | "claim_completion"Path Parameters
challengeIdRequiredintegerattemptIdRequiredintegerAttempt updated
Force-verify attempt
Manually transitions a stuck attempt to verified state, schedules the reward, and dispatches the creator.verified webhook (followed by reward.issued once the reward is issued). Works on any non-terminal, non-verified, non-rewarded attempt.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerattemptIdRequiredintegerAttempt force-verified
Redeliver outbound webhooks for attempt
Re-sends outbound webhooks (creator.verified, reward.issued, verification.failed) for an attempt. Use after a receiver outage to replay deliveries that exhausted their delivery retries. If events is omitted, every event eligible for the attempt's current state is redelivered (rewarded → both verified + reward; verified → verified only; failed_* → verification.failed). Caller must be admin.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Request Body
application/jsonOptionaleventsarray<string>Path Parameters
challengeIdRequiredintegerattemptIdRequiredintegerRedelivery enqueued
Get attempt by social handle
Look up a creator's attempt for a challenge by their social media handle (e.g. creator_jane or @creator_jane). Returns null if no attempt found.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerhandleRequiredstringAttempt for this handle (or null)
Fetch likers for a challenge's Instagram post
Starts an asynchronous fetch of the likers of the Instagram post this challenge already references — the post is derived from the challenge, so no shortcode/URL is supplied. Returns 202 immediately; poll the status endpoint for progress.
Coverage caveat: this uses a public scraper, so the number of fetched liker profiles may be lower than Instagram's visible like count. Only supported for Instagram challenges.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerQuery Parameters
maxCountintegerMax likers to fetch. Defaults to 1000.
1000Minimum: 1Maximum: 5000Fetch accepted and started
Status of the latest likers fetch for a challenge
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerLatest fetch status, or null if none has been requested
List stored likers for a challenge (paginated)
Returns likers from the most recent completed fetch for the challenge. Empty if no fetch has succeeded yet.
Authorization
AuthorizationRequiredBearer <token>API token. Send it as Authorization: Bearer <API_TOKEN>.
In: header
Path Parameters
challengeIdRequiredintegerQuery Parameters
pageinteger1limitinteger20Maximum: 100Liker rows