---
title: "Create Badge"
method: POST
path: "/v1/badge/"
tags: ["Badge"]
---

# Create Badge

`POST /v1/badge/`

## 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/`
- Auth: OAuth 2
  - Password
  - Token URL: `/v1/token`
- TypeScript: <https://skmtc.dev/navigatr/apis/navigatr-api/docs/v1/badge/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new badge. This is metadata describing a **Badge** provided on a digital credentialing platform. A **provider_id**
can be specified for internal and Open University badges. That provider will have access to edit and issue the badge. More providers can be added later by
platform admins.

    available_to_all (bool) : Defaults to True.
    availability (str): Optional field. If not None, available_to_all is automatically set to False.
    type (Badge_Type): Mandatory field.
    recipient_type (Recipient_Type): Optional field. Defaults to User.
    source (Source_Type): Optional field. Defaults to Internal. Other options are Credly and Open_University. If External, external_id and external_url are mandatory.
    external_id (str): Optional field. The unique ID on the external platform. If the badge already exists on Navigatr, it will be updated. If not, it will be created. External ID is required for all external badges.
    external_url (str): Optional field. URL of the badge on the external platform. External URL is required for all external badges.
    earn_url (str): Optional field. URL to earn the badge. Defaults to None.
    information_url (str): Optional field. A link to display additional information about this badge. Defaults to None.
    cost (Badge_Cost): Optional field. Defaults to Free
    level (Badge_Level): Optional field. Defaults to Foundational
    time_to_earn (Time_To_Earn): Optional field. Defaults to Hours
    participation_type (Participation_Type): Optional field. Defaults to In_Person
    end_date (datetime): Optional field. Defaults to None
    time_created (datetime): Optional field. Defaults to the current time. For external badges, set the time created to match with the external platform.
    tags (List[Tag]): Optional field. Defaults to None.
    criteria (List[Criteria]): Optional field. Defaults to None.
    alignments (List[Alignment]): Optional field. Defaults to None.
    endorsements (List[Endorsement]): Optional field. Defaults to None.
    design_parameters (object): Optional field. An object or null. Its `qa` (the QA mark, a bool) may be set to true only by a platform admin (403 otherwise); false, null or omitted is accepted from anyone.
    qualification_code (str): Optional field, max 100 characters. Emitted in Open Badges 3.0 as otherIdentifier.
    credits_available (float): Optional field, >= 0, stored rounded to two decimal places. Also used for CPD points.
    credits_unit (str): Optional field, max 20 characters. What credits_available counts; null means "credits".
    qualification_type (Qualification_Type): Optional field. Only accepted when type is Qualification (422 otherwise).
    qualification_framework (Qualification_Framework): Optional field. RQF, CQFW, SCQF, EQF or QFEmirates. Defaults to RQF only when a qualification_level is sent without it; sent as null with a level is a 422.
    qualification_level (str): Optional field. Must be valid for the framework (RQF and CQFW: Entry 1-3 and 1-8; SCQF 1-12; EQF and QFEmirates 1-8), 422 otherwise. Adds one system-managed alignment for the framework, replacing any alignment of that framework in the body.
    grade (Badge_Grade): Optional field. Pass, Merit, Distinction or Distinction*. Shown on every issued badge of this badge, which cannot then be issued with a different grade.
    field_of_study_id (int): Optional field, any badge type. An active tier 2 Ofqual Sector Subject Area id from GET /sector_subject_area (a tier 1, inactive or unknown id is a 422). Returned embedded as field_of_study and emitted in Open Badges 3.0 as fieldOfStudy.

generate_image (bool): Query param, defaults to False. If True, renders and uploads the
Navigatr Badge Framework image immediately after creation, using provider_id's default
branding. Requires design_standard=Navigatr, source=Internal (the default), no explicit
image_url/image_url_2x/image_url_original, and no design_parameters.subtitle override in
the body unless the subtitle query param is also passed - any mismatch 422s up front,
before any write. A failure in the render itself (e.g. the provider's logo URL is
unreachable) does not fail badge creation - the badge is still created without an image.

title / subtitle (str, optional query params): the artwork text saved in
design_parameters at creation, before any render, in both this and the AI route. They
override the same keys in the body's design_parameters. Per key: omit to leave the body's
value as sent, pass "" to remove it (title
then falls back to the auto-filled field of study and qualification type on a Qualification
badge that has both, else the badge name; subtitle to the auto-filled qualification line, if
any), pass any other string to save it.
A subtitle supplied here is the caller's own, so it is not subject to the saved-subtitle
guard. Not validated against the render limits below (each param is capped at 200
characters); the renderer fits a title on at most 2 lines of 23
characters (17 on a Training badge); a subtitle is upper-cased and cut to 22 characters,
then wrapped at 22 per line (16 on a Training badge). An over-long second line is cut to
end in "...". Those are character counts
calibrated for common English letters, so wide letters can still overflow: keep the title
to one or two short words. A forced line break in
the TITLE is the two-character sequence backslash-n stored in the string (%5Cn in the query
string; no JSON escaping applies to a query parameter); the segment before it is not
length-checked, and a real newline is drawn inline over the subtitle. The marker does not
work in a subtitle, which is upper-cased before the check.
Saved whether or not generate_image is set, so the website's first-view render uses them.
Internal-source, Navigatr-standard badges only (422 otherwise, with or without generate_image):
external-source badges carry their own image and Generic badges have no framework render.

**Badge_Type**:

    Generic Types:

        Experience, Learning, Validation, Certification, Attendance, Work_Experience, Volunteering, Job,
        Apprenticeship, Course, Membership, Internship, Workshop, Campaigning, Activism, Other

    Navigatr Standard Types:

        Informal_Learning, Training, Certified, Qualification

**Source_Type**:

    Internal, Credly, Open_University

**Recipient_Type**:

    User, Organisation

**Badge_Cost**:

    Free, Paid, Other

**Badge_Level**:

    Generic Levels:

        Foundational, Intermediate, Advanced, Other

    Navigatr Standard Levels:

        Explore, Deepen, Apply, Teach, Lead

**Time_To_Earn**:

    Hours, Days, Weeks, Months, Years, Other

**Participation_Type**:

    In_Person, Hybrid, Online

**Qualification_Type**:

    Award, Certificate, Diploma

## Query parameters

- `provider_id` integer
- `generate_image` boolean
- `title` string, nullable
- `subtitle` string, nullable

## Headers

- `X-Access-Token` string, nullable

## Request body

- BadgeCreate
  - `name` string, required
  - `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', required
  - `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, required
  - `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
  - `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
  - `featured` boolean
  - `ai_generated` boolean
  - `time_created` string, date-time
  - `criteria` BadgeCriteriaCreate[], nullable
    - `external_id` string, nullable
    - `description` string, required
    - `type` 'Application' | 'Assessment' | 'Award' | 'Badge' | 'Course' | 'Credential' | 'Education_Experience' | 'Leadership' | 'Member' | 'Participant' | 'Pathway' | 'Payment' | 'Portfolio' | 'Presenter' | 'Project' | 'Professional_Experience' | 'Schedule_Registration' | 'Volunteer' | 'Other', required
    - `external_url` string, nullable
    - `badge_id` integer, nullable
  - `alignments` BadgeAlignmentCreate[], nullable
    - `external_id` string, nullable
    - `name` string, required
    - `description` string, required
    - `url` string, required
    - `framework` string, nullable
    - `code` string, nullable
  - `endorsements` BadgeEndorsementCreate[], nullable
    - `external_id` string, nullable
    - `name` string, required
    - `description` string, required
    - `url` string, nullable
    - `image_url` string, nullable
    - `image_url_2x` string, nullable
    - `image_url_original` string, nullable
  - `tags` BadgeTagCreate[], nullable
    - `name` string, required
    - `external_id` string, nullable
    - `type` string, nullable
    - `source` string, nullable

## Response `200`

Successful Response

- 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).

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `422`: Unprocessable Content

## Changes

- **2026-11-06** `04bf6727d360`: 1 info
  - added the optional property `quality_assured_at` to the response with the `200` status
- **2026-10-22** `5b575d75af2b`: 18 info
  - added the new optional request property `credits_available`
  - added the new optional request property `credits_unit`
  - added the new optional request property `field_of_study_id`
  - added the new optional request property `grade`
  - …14 more
- **2026-10-06** `d2127ead6e50`: 2 warning, 2 info
  - removed the request property `qa_required`
  - removed the optional property `qa_required` from the response with the `200` status
  - added the new optional request property `qa_locked`
  - added the optional property `qa_locked` to the response with the `200` status
- **2026-09-29** `88bdee3363ad`: 2 info
  - added the new optional request property `certificates_enabled`
  - added the optional property `certificates_enabled` to the response with the `200` status
- **2026-09-24** `2e7136176810`: 6 info
  - added the new optional `query` request parameter `subtitle`
  - added the new optional `query` request parameter `title`
  - added the optional property `created_by/anyOf[subschema #1: User_Detail_Public]/visibility` to the response with the `200` status
  - added the optional property `published_by/anyOf[subschema #1: User_Detail_Public]/visibility` to the response with the `200` status
  - …2 more

[Operation history](https://skmtc.dev/navigatr/apis/navigatr-api/changes/v1/badge/post.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)
