Complete a quest task (legacy endpoint)
The endpoint Complete a quest task used before it moved under /v1. It still works and returns the same response.
POST /api/quests/external/complete · requires quests:complete
This is the endpoint Complete a quest task used first. It still works, and remains available for as long as version 1 exists. It takes the same body and returns the same response as POST /v1/quests/tasks/complete: the same fields and deprecated aliases, the same 200 and 202, the same errors and the same idempotencyKey.
New code should use /v1/quests/tasks/complete. Nothing has to be changed in code that calls this endpoint today.
This endpoint is not under /v1
The other reference pages show a path that starts with /v1, and their examples use a base URL that ends in /api/v1. This endpoint has no version in its path, so that base URL does not reach it. The full URL is your dashboard's URL followed by /api/quests/external/complete. On the shared CEEJAY service that is https://ceejay.communitystudios.xyz/api/quests/external/complete. The API key is the same kind of key as for every other call, with the quests:complete scope.
Example
curl -X POST https://ceejay.communitystudios.xyz/api/quests/external/complete \
-H "Authorization: Bearer $CEEJAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"taskKey": "tk_4k2m9x7qzb",
"discordId": "409876543210987654",
"evidence": "https://acme.example/players/nova/tutorial",
"idempotencyKey": "tutorial-88213004"
}'{
"success": true,
"matched": 1,
"completed": [
{
"questId": 42,
"title": "Finish the Acme tutorial"
}
],
"data": {
"matched": 1,
"completed": [
{
"questId": 42,
"questTitle": "Finish the Acme tutorial"
}
],
"sentForReview": [],
"duplicate": false
}
}Everything else about the request is on Complete a quest task: the body, who the member is found by, what CEEJAY checks, review, retries and the errors.

