Certifications
Invites
Create a certification invite and get back the challenge link.
Requires the CERTIFICATION_INVITE_CREATE scope.
mutation CreateCertificationInvite($input: DeveloperCreateCertificationInviteInput!) {
developerCreateCertificationInvite(input: $input) {
inviteId
status
challengeUrl
expiresAt
emailSent
}
}{
"input": {
"quizId": "react-intermediate-id",
"candidate": { "name": "Jane Doe", "email": "jane@example.com" },
"sendInviteEmail": true,
"externalReference": "seemesol-user-12345",
"callbackUrl": "https://api.seemesol.com/webhooks/scout-select"
}
}Field notes
quizIdcomes from the catalog response'slevels[].quizId. The quiz must currently beREADY(enabled) or the request fails withBAD_USER_INPUT.candidate.emailmust be a syntactically valid email address.sendInviteEmaildefaults totrue. Set it tofalseif you'd rather deliverchallengeUrlyourself and skip Scout Select's invite email.callbackUrlis optional and must behttps://- see Webhooks. It can only be set when authenticating with an API key (not an admin session).- The invite link expires in 14 days.
- A candidate can only have one in-progress attempt per quiz at a time, and can't be re-invited to a quiz
they already hold a currently-valid certification for - both cases return
BAD_USER_INPUT.
Example request
curl https://select.getscout.ai/api/developer/graphql \
-H "x-api-key: sk_scout_..." \
-H "content-type: application/json" \
-d '{
"query": "mutation CreateCertificationInvite($input: DeveloperCreateCertificationInviteInput!) { developerCreateCertificationInvite(input: $input) { inviteId status challengeUrl expiresAt emailSent } }",
"variables": { "input": { "quizId": "react-intermediate-id", "candidate": { "name": "Jane Doe", "email": "jane@example.com" }, "sendInviteEmail": true } }
}'Example response
{
"data": {
"developerCreateCertificationInvite": {
"inviteId": "clv2x...",
"status": "PENDING",
"challengeUrl": "https://select.getscout.ai/i/9f3a1c...",
"expiresAt": "2026-08-06T12:00:00.000Z",
"emailSent": true
}
}
}