---
title: "Issue Badge"
method: PUT
path: "/v1/badge/{badge_id}/issue"
tags: ["Badge"]
---

# Issue Badge

`PUT /v1/badge/{badge_id}/issue`

## Request

- Base URL: `https://api.navigatr.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.navigatr.app/v1/badge/{badge_id}/issue`
- Auth: OAuth 2
  - Password
  - Token URL: `/v1/token`

Create a badge assertion and issue a badge to a user (or organisation).

Issuing to an organisation follows the same functionally as issuing to a user,
except that the user will be accepting the badge on behalf of their organisation.

Required:
- `provider_id` - Assertions are issued from a provider. This ID must be one of the badge's providers.

If the user ID is known (the user has a Navigatr account):
- `recipient_id`

If the user ID is not known (the user may or may not have a Navigatr account):
- `recipient_email`
- `recipient_firstname`
- `recipient_lastname`

If the user QR code is known (the user has a Navigatr account):
- `qr_id`

If the user's Spydus library card barcode ID is known (the user has a Navigatr account):
- `spydus_barcode_id`

If the assertion is for an organisation:
- `recipient_organisation` - Name of the organisation (as it should appear on the assertion).

Optional:
- `issue_date` - the date when the assertion will become valid.
- `end_date` - the date when this assertion should expire.
- `evidence_text` - a plain text field to add evidence e.g. Recipient completed the course XYZ on ABC.
- `evidence_url` - a URL linking to the evidence. The API checks it when the badge is issued, and a link that cannot be reached (for example one that returns 404) stops the badge being issued.
- `score` - the score the user achieved. This is used to determine if the badge should be issued. Leave blank if the badge should be issued regardless of the score.
- `min_score` - the minimum score required to issue the badge. If the score is lower than this, the badge will not be issued. Leave blank if the badge should be issued regardless of the score.
- `grade` - Pass, Merit, Distinction or Distinction*. Leave blank to use the badge's grade; if the badge has a grade, a different one is refused (422).
- `credits_earned` - the credits the recipient earned, 0 or more and no more than the badge's `credits_available` when that is set (422 otherwise). Leave blank when not stated.

If the recipient already holds the badge, a supplied `grade` or `credits_earned` is applied to the badge they hold (as the details edit does: audit-logged and the recipient is emailed), then the usual 202 is returned.

Response:
- `claim_url` - the recipient's claim link while the assertion is pending, null once it is claimed. Handle it like the emailed link: whoever holds it can open the claim page, which shows the recipient's name and email.

## Path parameters

- `badge_id` integer, required

## Headers

- `X-Access-Token` string, nullable

## Request body

- BodyBadgeIssueBadge
  - `provider_id` integer, required
  - `qr_id` string
  - `spydus_barcode_id` string
  - `recipient_id` integer
  - `recipient_firstname` string
  - `recipient_lastname` string
  - `recipient_organisation` string
  - `recipient_email` string
  - `issue_date` string, date-time
  - `end_date` string, date-time
  - `evidence_text` string
  - `evidence_url` string
  - `score` integer
  - `min_score` integer
  - `grade` 'Pass' | 'Merit' | 'Distinction' | 'Distinction*'
  - `credits_earned` number, nullable

## Response `200`

Successful Response

- BadgeAssertionIssued: The single issue endpoints' response: the assertion plus the recipient's claim link. Only the issue response carries `claim_url`; Badge_Assertion itself does not, so no read, list or cache entry ever holds the link.
  - `recipient_email` string, nullable
  - `recipient_firstname` string, nullable
  - `recipient_lastname` string, nullable
  - `recipient_organisation` string, nullable
  - `recipient_id` integer, nullable
  - `end_date` string, date-time, nullable
  - `image_url` string, nullable
  - `image_url_2x` string, nullable
  - `image_url_original` string, nullable
  - `narrative` string, nullable
  - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
  - `external_id` string, nullable
  - `external_url` string, nullable
  - `badge_issuer_id` integer, nullable
  - `provider_id` integer, nullable
  - `evidence` BadgeAssertionEvidence[], nullable, required
    - `name` string, nullable
    - `description` string, nullable
    - `type` 'UrlEvidence' | 'PlainTextEvidence' | 'IdEvidence' | 'KeyValueGroupEvidence'
    - `narrative` string, nullable
    - `genre` string, nullable
    - `audience` string, nullable
    - `value` string, nullable
    - `external_id` string, nullable
    - `id` integer, required
    - `badge_assertion_id` integer
    - `values` BadgeAssertionEvidenceValues[], nullable, required
      - `key` string, nullable
      - `value` string, nullable
      - `url` string, nullable
  - `issue_date` string, date-time, nullable
  - `time_verified` string, date-time, nullable
  - `id` integer
  - `status` 'Pending' | 'Claimed' | 'Expired' | 'Revoked' | 'Deleted' | 'Failed' | 'Complained'
  - `issuing_method` 'Email' | 'Activity' | 'Autobadge' | 'Bulk' | 'API' | 'Pushed' | 'Migrated' | 'QR' | 'Library_Card' | 'Riddle' | 'Typeform' | 'Zoho_Forms' | 'Tally' | 'Imported' | 'Pathway'
  - `seo_keywords` string[], nullable
  - `seo_title` string, nullable
  - `seo_description` string, nullable
  - `grade` 'Pass' | 'Merit' | 'Distinction' | 'Distinction*'
  - `credits_earned` number, nullable
  - `recipient` UserDetailPublic
    - `id` integer
    - `firstname` string, nullable, required
    - `lastname` string, nullable, required
    - `avatar_url` string, nullable
    - `avatar_url_2x` string, nullable
    - `avatar_url_original` string, nullable
    - `interests` string[], nullable
    - `noindex_enabled` boolean, nullable
    - `visibility` 'Public' | 'Private': Who may see a user's human-readable public pages (profile, badge and pathway assertion). Deliberately NOT a User_Status value: a Private user is still Active, they can sign in, earn badges and be issued to exactly as before. Also independent of `noindex_enabled`, which only asks search engines not to index a page that stays publicly reachable. Enforced in crud_user_detail.can_read, so every existing "view this user" gate inherits it.
    - `time_created` string, date-time
    - `time_updated` string, date-time, nullable
    - `seo_keywords` string[], nullable
    - `seo_title` string, nullable
    - `seo_description` string, nullable
    - `social_handle_linkedin` string, nullable
    - `social_handle_twitter` string, nullable
    - `social_handle_facebook` string, nullable
    - `social_handle_instagram` string, nullable
  - `issuer` BadgeIssuer
    - `name` string, nullable
    - `type` 'Employer' | 'Learning_Provider' | 'Other'
    - `description` string, nullable
    - `address` string, nullable
    - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
    - `source_credly_id` integer, nullable
    - `external_id` string, nullable
    - `external_url` string, nullable
    - `email` string, nullable
    - `image_url` string, nullable
    - `banner_url` string, nullable
    - `image_url_2x` string, nullable
    - `banner_url_2x` string, nullable
    - `id` integer
    - `status` 'Active' | 'Suspended' | 'Deleted'
    - `created_by_id` integer, nullable
    - `updated_by_id` integer, nullable
    - `time_created` string, date-time
    - `time_updated` string, date-time, nullable
  - `provider` ProviderPublic
    - `id` integer
    - `status` 'Active' | 'Suspended' | 'Deleted'
    - `type` 'Learning_Provider' | 'Training_Provider' | 'Awarding_Body' | 'Employer' | 'Local_Authority' | 'University' | 'College' | 'Charity' | 'Department' | 'Project' | 'Other'
    - `name` string, nullable
    - `short_name` string, nullable
    - `description` string, nullable
    - `email` string, email, nullable
    - `external_url` string, nullable
    - `is_verified` boolean, nullable
    - `verification_text` string, nullable
    - `verification_url` string, nullable
    - `is_demo` boolean, nullable
    - `open_access` boolean
    - `enable_analytics` boolean, nullable
    - `community_id` integer, nullable
    - `community` CommunityPublic, required
      - `id` integer
      - `status` 'Active' | 'Suspended' | 'Deleted'
      - `type` 'City' | 'Region' | 'Local_Authority' | 'Membership_Organisation' | 'Awarding_Body' | 'Partnership' | 'Corporate' | 'Association' | 'University' | 'College' | 'Charity' | 'Other'
      - `name` string, nullable
      - `short_name` string, nullable
      - `description` string, nullable
      - `external_url` string, nullable
      - `address` string, nullable
      - `latitude` number, nullable
      - `longitude` number, nullable
      - `is_verified` boolean, nullable
      - `verification_text` string, nullable
      - `verification_url` string, nullable
      - `is_demo` boolean, nullable
      - `colour` string, nullable
      - `spydus_library_url` string, nullable
      - `referral_code` string, nullable
      - `image_url` string, nullable
      - `banner_url` string, nullable
      - `image_url_2x` string, nullable
      - `banner_url_2x` string, nullable
      - `image_url_original` string, nullable
      - `banner_url_original` string, nullable
      - `linkedin_organisation_id` integer, nullable
      - `social_handle_linkedin` string, nullable
      - `social_handle_twitter` string, nullable
      - `social_handle_facebook` string, nullable
      - `social_handle_instagram` string, nullable
      - `seo_title` string, nullable
      - `seo_description` string, nullable
      - `seo_keywords` string[], nullable
      - `url` string, nullable
    - `latitude` number, nullable
    - `longitude` number, nullable
    - `image_url` string, nullable
    - `banner_url` string, nullable
    - `image_url_2x` string, nullable
    - `banner_url_2x` string, nullable
    - `image_url_original` string, nullable
    - `banner_url_original` string, nullable
    - `brand_colours` string[], nullable
    - `qa_community_id` integer, nullable
    - `linkedin_organisation_id` integer, nullable
    - `social_handle_linkedin` string, nullable
    - `social_handle_twitter` string, nullable
    - `social_handle_facebook` string, nullable
    - `social_handle_instagram` string, nullable
    - `seo_title` string, nullable
    - `seo_description` string, nullable
    - `seo_keywords` string[], nullable
    - `url` string, nullable
  - `badge` Badge
    - `name` string, nullable
    - `design_standard` 'Generic' | 'Navigatr'
    - `type` 'Experience' | 'Learning' | 'Validation' | 'Certification' | 'Attendance' | 'Work_Experience' | 'Volunteering' | 'Job' | 'Apprenticeship' | 'Course' | 'Internship' | 'Workshop' | 'Campaigning' | 'Activism' | 'Other' | 'Informal_Learning' | 'Training' | 'Certified' | 'Qualification' | 'Membership'
    - `language` 'Arabic_Modern_Standard' | 'Bengali' | 'Bulgarian' | 'Chinese_Cantonese' | 'Chinese_Mandarin' | 'Chinese_Simplified' | 'Chinese_Traditional' | 'Croatian' | 'Czech' | 'Dutch' | 'English' | 'French' | 'German' | 'Greek' | 'Hungarian' | 'Irish_Gaeilge' | 'Italian' | 'Kurdish_Kurmanji' | 'Kurdish_Sorani' | 'Latvian' | 'Lithuanian' | 'Pashto' | 'Persian' | 'Polish' | 'Portuguese' | 'Punjabi' | 'Romanian' | 'Scottish_Gaelic_Gaidhlig' | 'Slovak' | 'Somali' | 'Spanish' | 'Tigrinya' | 'Turkish' | 'Ukrainian' | 'Urdu' | 'Welsh_Cymraeg'
    - `provider_ids` integer[], nullable
    - `community_ids` integer[], nullable
    - `recipient_type` 'User' | 'Organisation'
    - `description` string, nullable
    - `issuer_id` integer, nullable
    - `image_url` string, nullable
    - `image_url_2x` string, nullable
    - `image_url_original` string, nullable
    - `design_parameters` unknown
    - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
    - `earn_url` string, nullable
    - `external_url` string, nullable
    - `information_url` string, nullable
    - `embed` string, nullable
    - `external_id` string, nullable
    - `latitude` number, nullable
    - `longitude` number, nullable
    - `city` string, nullable
    - `country` string, nullable
    - `config` unknown
    - `address` string, nullable
    - `available_to_all` boolean, nullable
    - `availability` string, nullable
    - `end_date` string, date-time, nullable
    - `cost` 'Free' | 'Paid' | 'Other'
    - `level` 'Foundational' | 'Intermediate' | 'Advanced' | 'Other' | 'Explore' | 'Deepen' | 'Apply' | 'Teach' | 'Lead'
    - `time_to_earn` 'Hours' | 'Days' | 'Weeks' | 'Months' | 'Years' | 'Other'
    - `participation_type` 'Online' | 'Hybrid' | 'In_Person'
    - `qa_locked` boolean, nullable
    - `job_titles` string[], nullable
    - `specialized_occupations` string[], nullable
    - `title_names` string[], nullable
    - `is_demo` boolean, nullable
    - `certificates_enabled` boolean
    - `industries` string[], nullable
    - `occupation_groups` string[], nullable
    - `skill_category_names` string[], nullable
    - `edu_levels` string[], nullable
    - `qualification_code` string, nullable
    - `credits_available` number, nullable
    - `credits_unit` string, nullable
    - `qualification_type` 'Award' | 'Certificate' | 'Diploma'
    - `qualification_framework` 'RQF' | 'CQFW' | 'SCQF' | 'EQF' | 'QFEmirates'
    - `qualification_level` string, nullable
    - `grade` 'Pass' | 'Merit' | 'Distinction' | 'Distinction*'
    - `field_of_study_id` integer, nullable
    - `id` integer
    - `status` 'Initialising' | 'Draft' | 'Awaiting_Approval' | 'Published' | 'Deleted' | 'Expired'
    - `created_by` UserDetailPublic
      - `id` integer
      - `firstname` string, nullable, required
      - `lastname` string, nullable, required
      - `avatar_url` string, nullable
      - `avatar_url_2x` string, nullable
      - `avatar_url_original` string, nullable
      - `interests` string[], nullable
      - `noindex_enabled` boolean, nullable
      - `visibility` 'Public' | 'Private': Who may see a user's human-readable public pages (profile, badge and pathway assertion). Deliberately NOT a User_Status value: a Private user is still Active, they can sign in, earn badges and be issued to exactly as before. Also independent of `noindex_enabled`, which only asks search engines not to index a page that stays publicly reachable. Enforced in crud_user_detail.can_read, so every existing "view this user" gate inherits it.
      - `time_created` string, date-time
      - `time_updated` string, date-time, nullable
      - `seo_keywords` string[], nullable
      - `seo_title` string, nullable
      - `seo_description` string, nullable
      - `social_handle_linkedin` string, nullable
      - `social_handle_twitter` string, nullable
      - `social_handle_facebook` string, nullable
      - `social_handle_instagram` string, nullable
    - `submitted_by` UserDetailPublic
      - `id` integer
      - `firstname` string, nullable, required
      - `lastname` string, nullable, required
      - `avatar_url` string, nullable
      - `avatar_url_2x` string, nullable
      - `avatar_url_original` string, nullable
      - `interests` string[], nullable
      - `noindex_enabled` boolean, nullable
      - `visibility` 'Public' | 'Private': Who may see a user's human-readable public pages (profile, badge and pathway assertion). Deliberately NOT a User_Status value: a Private user is still Active, they can sign in, earn badges and be issued to exactly as before. Also independent of `noindex_enabled`, which only asks search engines not to index a page that stays publicly reachable. Enforced in crud_user_detail.can_read, so every existing "view this user" gate inherits it.
      - `time_created` string, date-time
      - `time_updated` string, date-time, nullable
      - `seo_keywords` string[], nullable
      - `seo_title` string, nullable
      - `seo_description` string, nullable
      - `social_handle_linkedin` string, nullable
      - `social_handle_twitter` string, nullable
      - `social_handle_facebook` string, nullable
      - `social_handle_instagram` string, nullable
    - `published_by` UserDetailPublic
      - `id` integer
      - `firstname` string, nullable, required
      - `lastname` string, nullable, required
      - `avatar_url` string, nullable
      - `avatar_url_2x` string, nullable
      - `avatar_url_original` string, nullable
      - `interests` string[], nullable
      - `noindex_enabled` boolean, nullable
      - `visibility` 'Public' | 'Private': Who may see a user's human-readable public pages (profile, badge and pathway assertion). Deliberately NOT a User_Status value: a Private user is still Active, they can sign in, earn badges and be issued to exactly as before. Also independent of `noindex_enabled`, which only asks search engines not to index a page that stays publicly reachable. Enforced in crud_user_detail.can_read, so every existing "view this user" gate inherits it.
      - `time_created` string, date-time
      - `time_updated` string, date-time, nullable
      - `seo_keywords` string[], nullable
      - `seo_title` string, nullable
      - `seo_description` string, nullable
      - `social_handle_linkedin` string, nullable
      - `social_handle_twitter` string, nullable
      - `social_handle_facebook` string, nullable
      - `social_handle_instagram` string, nullable
    - `updated_by` UserDetailPublic
      - `id` integer
      - `firstname` string, nullable, required
      - `lastname` string, nullable, required
      - `avatar_url` string, nullable
      - `avatar_url_2x` string, nullable
      - `avatar_url_original` string, nullable
      - `interests` string[], nullable
      - `noindex_enabled` boolean, nullable
      - `visibility` 'Public' | 'Private': Who may see a user's human-readable public pages (profile, badge and pathway assertion). Deliberately NOT a User_Status value: a Private user is still Active, they can sign in, earn badges and be issued to exactly as before. Also independent of `noindex_enabled`, which only asks search engines not to index a page that stays publicly reachable. Enforced in crud_user_detail.can_read, so every existing "view this user" gate inherits it.
      - `time_created` string, date-time
      - `time_updated` string, date-time, nullable
      - `seo_keywords` string[], nullable
      - `seo_title` string, nullable
      - `seo_description` string, nullable
      - `social_handle_linkedin` string, nullable
      - `social_handle_twitter` string, nullable
      - `social_handle_facebook` string, nullable
      - `social_handle_instagram` string, nullable
    - `issuer` BadgeIssuerPublic
      - `id` integer
      - `name` string, nullable
      - `type` 'Employer' | 'Learning_Provider' | 'Other'
      - `status` 'Active' | 'Suspended' | 'Deleted'
      - `external_url` string, nullable
      - `email` string, nullable
      - `image_url` string, nullable
      - `banner_url` string, nullable
      - `image_url_2x` string, nullable
      - `banner_url_2x` string, nullable
    - `ranking` integer, nullable
    - `time_created` string, date-time
    - `time_updated` string, date-time, nullable
    - `time_submitted` string, date-time, nullable
    - `time_published` string, date-time, nullable
    - `quality_assured_at` string, date-time, nullable
    - `time_issued` string, date-time, nullable
    - `postal_address` Address
      - `full_address` string, nullable
      - `name` string, nullable
      - `number` string, nullable
      - `street` string, nullable
      - `postcode` string, nullable
      - `locality` string, nullable
      - `city` string, nullable
      - `district` string, nullable
      - `region` string, nullable
      - `country` string, nullable
    - `created_by_id` integer, nullable
    - `submitted_by_id` integer, nullable
    - `published_by_id` integer, nullable
    - `updated_by_id` integer, nullable
    - `criteria` BadgeCriteria[], nullable
      - `external_id` string, nullable
      - `description` string, nullable
      - `type` 'Application' | 'Assessment' | 'Award' | 'Badge' | 'Course' | 'Credential' | 'Education_Experience' | 'Leadership' | 'Member' | 'Participant' | 'Pathway' | 'Payment' | 'Portfolio' | 'Presenter' | 'Project' | 'Professional_Experience' | 'Schedule_Registration' | 'Volunteer' | 'Other'
      - `external_url` string, nullable
      - `badge_id` integer, nullable
      - `id` integer, nullable
    - `tags` BadgeTag[], nullable
      - `name` string, nullable
      - `external_id` string, nullable
      - `type` string, nullable
      - `source` string, nullable
    - `alignments` BadgeAlignment[], nullable
      - `external_id` string, nullable
      - `name` string, nullable
      - `description` string, nullable
      - `url` string, nullable
      - `framework` string, nullable
      - `code` string, nullable
      - `id` integer, nullable
      - `badge_id` integer, nullable
    - `endorsements` BadgeEndorsement[], nullable
      - `external_id` string, nullable
      - `name` string, nullable
      - `description` string, nullable
      - `url` string, nullable
      - `image_url` string, nullable
      - `image_url_2x` string, nullable
      - `image_url_original` string, nullable
      - `id` integer, nullable
      - `badge_id` integer, nullable
    - `collections` CollectionLight[], nullable
      - `id` integer, required
      - `name` string, nullable
      - `badge_issuer_id` integer, nullable
    - `providers` ProviderLight[], nullable
      - `id` integer, required
      - `status` 'Active' | 'Suspended' | 'Deleted'
      - `type` 'Learning_Provider' | 'Training_Provider' | 'Awarding_Body' | 'Employer' | 'Local_Authority' | 'University' | 'College' | 'Charity' | 'Department' | 'Project' | 'Other'
      - `name` string, nullable
      - `short_name` string, nullable
      - `external_url` string, nullable
      - `is_verified` boolean, nullable
      - `verification_text` string, nullable
      - `verification_url` string, nullable
      - `is_demo` boolean, nullable
      - `open_access` boolean
      - `community_id` integer, nullable
      - `community` CommunityLight, required
        - `id` integer, required
        - `status` 'Active' | 'Suspended' | 'Deleted'
        - `type` 'City' | 'Region' | 'Local_Authority' | 'Membership_Organisation' | 'Awarding_Body' | 'Partnership' | 'Corporate' | 'Association' | 'University' | 'College' | 'Charity' | 'Other'
        - `name` string, nullable
        - `short_name` string, nullable
        - `is_verified` boolean, nullable
        - `image_url` string, nullable
        - `image_url_2x` string, nullable
        - `image_url_original` string, nullable
        - `linkedin_organisation_id` integer, nullable
        - `social_handle_linkedin` string, nullable
        - `social_handle_twitter` string, nullable
        - `social_handle_facebook` string, nullable
        - `social_handle_instagram` string, nullable
        - `url` string, nullable
      - `image_url` string, nullable
      - `banner_url` string, nullable
      - `image_url_2x` string, nullable
      - `banner_url_2x` string, nullable
      - `image_url_original` string, nullable
      - `banner_url_original` string, nullable
      - `qa_community_id` integer, nullable
      - `linkedin_organisation_id` integer, nullable
      - `social_handle_linkedin` string, nullable
      - `social_handle_twitter` string, nullable
      - `social_handle_facebook` string, nullable
      - `social_handle_instagram` string, nullable
      - `url` string, nullable
    - `interacted_with` boolean, nullable
    - `featured` boolean
    - `ai_generated` boolean
    - `url` string
    - `seo_keywords` string[], nullable
    - `seo_title` string, nullable
    - `seo_description` string, nullable
    - `field_of_study` SectorSubjectAreaEmbedded: A badge's field of study as embedded in badge reads and the Ofqual lookup (#1946). The website editor and the CLI read these names, so they are a contract.
      - `id` integer, required
      - `code` string, required
      - `name` string, required
      - `tier_1_name` string, nullable
      - `image_label` string, nullable
    - `display_level` string, nullable, required: The one level to show: the qualification level label when set, else `level` (#1915).
  - `time_created` string, date-time
  - `time_updated` string, date-time, nullable
  - `created_by_id` integer, nullable
  - `updated_by_id` integer, nullable
  - `reject_code` string, nullable, required
  - `revocation_reason` string, nullable
  - `url` string, nullable
  - `badge_id` integer, nullable
  - `reminder_emails_sent` integer, nullable
  - `time_claimed` string, date-time, nullable
  - `change_request` BadgeAssertionChangeRequest[], nullable
    - `id` string, required
    - `changes` BadgeAssertionChangeRequestItem[], required
      - `field` 'recipient_firstname' | 'recipient_lastname' | 'recipient_organisation' | 'extend_expiry', required
      - `value` string, nullable
      - `status` 'requested' | 'approved' | 'rejected'
      - `reason` string, nullable
    - `note` string, nullable
    - `time_created` string, date-time, required
    - `last_reminded_at` string, date-time, nullable
    - `reminder_count` integer, nullable
  - `restorable_until` string, date-time, nullable
  - `claim_url` string, nullable

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Content
- `423`: Locked

## Changes

- **2026-11-06** `04bf6727d360`: 1 info
  - added the optional property `badge/anyOf[subschema #1: Badge]/quality_assured_at` to the response with the `200` status
- **2026-10-22** `5b575d75af2b`: 17 info
  - added the new optional request property `credits_earned`
  - added the new optional request property `grade`
  - added the non-success response with the status `423`
  - added the optional property `badge/anyOf[subschema #1: Badge]/credits_available` to the response with the `200` status
  - …13 more
- **2026-10-07** `bb2b85ef4bd3`: 1 info
  - added the optional property `claim_url` to the response with the `200` status
- **2026-10-06** `d2127ead6e50`: 1 warning, 2 info
  - removed the optional property `badge/anyOf[subschema #1: Badge]/qa_required` from the response with the `200` status
  - added the optional property `badge/anyOf[subschema #1: Badge]/qa_locked` to the response with the `200` status
  - added the optional property `restorable_until` to the response with the `200` status
- **2026-09-29** `88bdee3363ad`: 1 info
  - added the optional property `badge/anyOf[subschema #1: Badge]/certificates_enabled` to the response with the `200` status

[Operation history](https://skmtc.dev/navigatr/apis/navigatr-api/changes/v1/badge/:badge_id/issue/put.md)

---

[API](https://skmtc.dev/navigatr/apis/navigatr-api.md) - [All operations](https://skmtc.dev/navigatr/apis/navigatr-api/llms.txt) - [OpenAPI document](https://skmtc.dev/navigatr/apis/navigatr-api/revisions/efbd3c328549?raw)
