Scout SelectDeveloper Documentation
Certifications

Packages

Browse certification packages grouped into progression tracks and invite a candidate to all skills in a package at once.

A package track is a platform-curated progression, such as Cybersecurity. Each track has up to four packages: Fundamentals (Beginner), Practitioner (Intermediate), Professional (Advanced), and Expert. Each package contains certifications at one shared proficiency level. Skills and certifications inside a package are still tracked individually - a package invite creates one regular certification invite per skill, each with its own challenge link, attempt, and result.

Requires the CERTIFICATION_PACKAGE_READ scope to list packages, and CERTIFICATION_INVITE_CREATE to send a package invite - the same scope used for single-skill invites.

List packages

query CertificationPackageTracks($search: String, $trackSlug: String) {
  developerCertificationPackageTracks(search: $search, trackSlug: $trackSlug) {
    id
    name
    slug
    packages {
      id
      name
      level
      description
      skills {
        quizId
        skillName
        level
        durationMinutes
        enabledLanguages
        conceptsTested
      }
    }
  }
}

Only packages where every skill is currently enabled and ready to deliver are returned. search matches track and package names. Pass trackSlug to retrieve one track. Retain each skill's quizId for reference, but you don't need it to send a package invite - only the package id.

Example response

{
  "data": {
    "developerCertificationPackageTracks": [
      {
        "id": "cybersecurity-track-id",
        "name": "Cybersecurity",
        "slug": "cybersecurity",
        "packages": [
          {
            "id": "cybersecurity-fundamentals-id",
            "name": "Cybersecurity Fundamentals",
            "level": "BEGINNER",
            "skills": [
              { "quizId": "cybersecurity-beginner-id", "skillName": "Cybersecurity Fundamentals", "level": "BEGINNER", "durationMinutes": 30, "enabledLanguages": ["en"], "conceptsTested": ["Threats", "Access control"] }
            ]
          }
        ]
      }
    ]
  }
}

Send a package invite

mutation CreateCertificationPackageInvite($input: DeveloperCreateCertificationPackageInviteInput!) {
  developerCreateCertificationPackageInvite(input: $input) {
    packageId
    packageName
    invites {
      quizId
      skillName
      level
      inviteId
      status
      challengeUrl
      expiresAt
      emailSent
    }
  }
}
Variables
{
  "input": {
    "packageId": "backend-package-id",
    "candidate": { "name": "Jane Doe", "email": "[email protected]" },
    "sendInviteEmail": true
  }
}

Field notes

  • This is all-or-nothing: if the candidate already has an in-progress attempt or a currently-valid certification for any skill in the package, or any skill in the package is no longer enabled, the whole request fails with BAD_USER_INPUT and no invites are created. Resolve the conflicting skill (or invite the other skills individually via Invites) and retry.
  • On success, one CertificationInvite and one challenge link are created per skill, exactly as if you had called developerCreateCertificationInvite once per skill - each has its own expiresAt (14 days), its own attempt, and its own result. There is no combined "package result" - read each skill back individually via Results using its inviteId.
  • sendInviteEmail defaults to true and applies to every skill in the package; each skill's challenge link is emailed separately.
  • callbackUrl (optional, HTTPS only, API-key auth only) is applied to every invite created by this request - see Webhooks.

Example request

curl https://select.getscout.ai/api/developer/graphql \
  -H "x-api-key: sk_scout_..." \
  -H "content-type: application/json" \
  -d '{
    "query": "mutation CreateCertificationPackageInvite($input: DeveloperCreateCertificationPackageInviteInput!) { developerCreateCertificationPackageInvite(input: $input) { packageId packageName invites { quizId skillName level inviteId status challengeUrl expiresAt emailSent } } }",
    "variables": { "input": { "packageId": "backend-package-id", "candidate": { "name": "Jane Doe", "email": "[email protected]" }, "sendInviteEmail": true } }
  }'

On this page