Verify a quest task
Check a task whose action is verify, and complete it when the check passes.
POST /v1/player/quests/verify · for player session
Use it when the player presses the button of a task whose action is verify, as the Verify button does in Discord. The check reads a state: a role the member has, a badge, a balance, a follow on a platform. A quest the player has not started is started first, and the rules of Start a quest apply. The request needs the game loop. For the three conditions (game loop enabled for the game, member consent, server membership) and the error each returns, see What has to be true first.
Body parameters
Prop
Type
Returns
Prop
Type
When the last task is completed, the quest completes and grants its rewards: questCompleted is true and rewards contains:
Prop
Type
Example
curl -X POST https://ceejay.communitystudios.xyz/api/v1/player/quests/verify \
-H "Authorization: Bearer $CEEJAY_PLAYER_SESSION" \
-H "Content-Type: application/json" \
-d '{
"questId": 12,
"taskId": 45
}'The TypeScript example uses connect.hub.verifyQuestTask from the Connect client in the TypeScript SDK. The player must be connected first: the client manages and refreshes the player session. It returns the data of the response below.
{
"success": true,
"data": {
"questId": 12,
"taskId": 45,
"verified": true,
"questCompleted": true,
"tasksDone": 5,
"taskCount": 5,
"rewards": {
"xp": 100,
"coins": 50,
"badge": "Newcomer",
"roleGranted": false,
"leveledUp": true,
"newLevel": 12
}
}
}{
"success": true,
"data": {
"questId": 12,
"taskId": 44,
"verified": true,
"questCompleted": false,
"tasksDone": 4,
"taskCount": 5,
"rewards": null
}
}A task that is not done
A task that is not done yet returns 409 with the code quest_task_not_done, and message says why in a sentence the game can show. A task that cannot be verified this way returns 409 with the code quest_task_unavailable and a reason:
reason | What it means |
|---|---|
already_done | The player has already completed the task. Repeating the request for a completed task returns this, so the request is safe to repeat and takes no key |
in_review | The task is awaiting review by the community's team |
not_for_games | The task must be completed in Discord: its action is discord |
wrong_action | The task requires an answer, not a check: use Answer a quest task |
needs_connect | The member must first link an account in Discord. platform names it. A game never receives a link for this |
The other errors are the quest's rules, as on Start a quest. An error about a quest includes message, a sentence the game can show to the player. CEEJAY does not send the member a direct message.
Limits
20 writes a minute for one player session, shared by Start, Verify and Answer a quest task, Buy a shop item, Claim an item and Check in. The three X-RateLimit headers report that count. Every request made with a player session also counts toward 140 a minute. See Rate limits. Over a limit the response is 429 with the code rate_limited, retryAfter and a Retry-After header.
Errors
| Status | code | error | When |
|---|---|---|---|
400 | bad_request | The request body must be a JSON object | The body is JSON but not an object: null, text, a number or a list. A body that is not JSON at all returns bad_request with the message The request body must be JSON |
400 | bad_request | questId must be a whole number from 1 to 2147483647 | questId is missing, is not a whole number, or is outside 1 to 2,147,483,647 |
400 | bad_request | taskId must be a whole number from 1 to 2147483647 | taskId is not a whole number from 1 to 2,147,483,647 |
401 | connection_ended | This connection has ended | The connection or this device was ended since the player session was made. Discard the stored tokens and show the player as disconnected. See Renew a player session for the reasons |
404 | quest_not_found | Quest not found | The quest does not exist in this community, or the task is not one of its tasks |
409 | hub_not_enabled | This game does not show the community's quests, shop and rank | The game loop is disabled for the game. Do not show the community's quests, shop or rank in the game |
409 | sharing_needed | The member has not consented to sharing their data with this game | The member has not consented to share their quests, rewards, shop and rank with the game, or must consent again. The body includes manageUrl: send the player there |
409 | membership_required | The member has to be in the server to use this | The Discord account is not in the server. The body includes membership (pending, left or not_member) and, for left and not_member, joinUrl, the URL to send the player to |
409 | quest_not_active | Quest is not active | The quest is not open |
409 | quest_not_started | Quest has not started yet | The quest has not started yet |
409 | quest_ended | Quest has ended | The quest has ended |
409 | quest_already_completed | Quest already completed and is not repeatable | The player completed the quest and it cannot be repeated |
409 | quest_limit_reached | Max completions per user reached | The player completed the quest as many times as it allows |
409 | quest_requires_role | The member does not have the role this quest requires | The member lacks the role the quest needs |
409 | quest_requires_level | The member has not reached the level this quest requires | The member has not reached the level the quest needs |
409 | quest_requires_season_xp | The member has not earned the season XP this quest requires | The member has not earned the season XP the quest needs |
409 | quest_requires_program | The member is not in the program this quest belongs to | The member is not in the program the quest belongs to |
409 | quest_requires_quest | The member has not completed the quest that comes before this one | The quest that comes before this one is not done |
409 | quest_full | Quest has reached its completion limit | The quest reached its overall completion limit |
409 | quest_cooling_down | The member has to wait before completing this quest again | The player must wait before repeating the quest. The body includes availableAt |
409 | quest_daily_limit_reached | The member has reached this community's daily quest limit | The member reached the community's daily quest limit |
409 | quest_task_not_done | The task is not done yet | The check did not pass, or could not run. message says why, for example how to finish the task |
409 | quest_task_unavailable | This task cannot be done this way right now | The task cannot be done this way. The body includes reason, as in the table above, and platform for needs_connect |
413 | body_too_large | The request body is larger than 16 KB | The body is larger than 16 KB. Nothing was changed |
503 | bot_unavailable | This could not be done right now and nothing was changed. Try again in a few seconds | CEEJAY's bot could not be reached or was too busy, and nothing was changed. The body includes retryAfter, in seconds: retry after that many seconds |
504 | bot_timeout | The answer did not arrive in time, and the request may or may not have been done. Send the same request again: it is safe to repeat | The request timed out, so it is not known whether it was processed. Retry the same request: it is safe to repeat |
Every error body also includes requestId, and a 400 with the code bad_request identifies the invalid field in field. Match on code; message text can change.
The errors every request of a game shares (the key, the state of the game, the origin, 405, 429, 500) are on the Errors page, and the errors specific to the game loop are under Codes of the game loop.

