---
title: "Read Badge Assertions"
method: GET
path: "/v1/badge_assertion/"
tags: ["Badge Assertion"]
---

# Read Badge Assertions

`GET /v1/badge_assertion/`

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

Retrieve an array of badges that has been issued to users.
Optional parameters may be passed to filter the query.

Provider and community admins can only access badges issued by their own organisation(s).

| Filter | Description |
| --- | --- |
| `badge_id (integer) - optional` | Retrieve the assertions for a certain badge. |
| `provider_id (integer) - optional` | Retrieve the assertions issued by a certain provider. |
| `recipient_id (integer) - optional` | Retrieve the assertions issued to a certain user. |
| `status (string) - optional` | A comma separated list of badge statuses. Filter by badge assertion status. If none are provided, will default to showing all assertions the user has access to. `Deleted` is platform admins only, except that a recipient listing their own assertions (`recipient_id` = themselves) gets the ones they deleted themselves and that the restore route could accept (the filter is in `get_multi_by_recipient`); the restore route can still refuse one, with a message saying why. |
| `recipient_email (string) - optional` | Get the assertions issued to a certain email address. Admins, and a user for a verified address on their own account. |
| `keyword (string) - optional` | Get badge assertions for badges with names similar to the provided string. |
| `order_by (string) - optional` | By default, badge assertions are ordered by newest first. Results can be ordered by name of badge or time_created, either ascending or descending by passing a value into `order_by`. See below. |

**Badge_Assertion_Status**:

    Pending, Claimed, Revoked, Expired, Deleted

**Badge_Assertion_Order_By**:

    Time_Created_Asc, Time_Created_Desc, Name_Asc, Name_Desc

## Query parameters

- `recipient_id` integer
- `badge_id` integer
- `provider_id` integer
- `recipient_email` string
- `order_by` 'Time_Created_Asc' | 'Time_Created_Desc' | 'Name_Asc' | 'Name_Desc'
- `keyword` string
- `status` string
- `paginated` boolean
- `page` integer
- `size` integer

## Headers

- `X-Access-Token` string, nullable

## Response `200`

Successful Response

- union
  - PageUnionBadgeAssertionLightBadgeAssertionLightPublic
    - `items` union[], required
      - union
        - BadgeAssertionLight
          - `id` integer, required
          - `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
          - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
          - `badge_issuer_id` integer, nullable
          - `provider_id` integer, nullable
          - `issue_date` string, date-time, nullable
          - `time_verified` string, date-time, nullable
          - `time_claimed` string, date-time, nullable
          - `recipient` UserDetailLight
            - `id` integer, required
            - `status` 'Active' | 'Suspended' | 'Deleted'
            - `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.
            - `firstname` string, nullable, required
            - `lastname` string, nullable, required
            - `avatar_url` string, nullable
            - `avatar_url_2x` string, nullable
            - `avatar_url_original` string, nullable
            - `time_created` string, date-time
            - `time_updated` string, date-time, nullable
            - `noindex_enabled` boolean, nullable
          - `provider` ProviderLight
            - `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
              - …
            - `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
          - `badge` BadgeLight
            - `id` integer, required
            - `status` 'Initialising' | 'Draft' | 'Awaiting_Approval' | 'Published' | 'Deleted' | 'Expired'
            - `name` string, nullable
            - `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
            - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
            - `earn_url` string, nullable
            - `external_url` string, nullable
            - `information_url` string, nullable
            - `latitude` number, nullable
            - `longitude` number, nullable
            - `city` string, nullable
            - `country` string, nullable
            - `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
            - `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
            - `created_by_id` integer, nullable
            - `submitted_by_id` integer, nullable
            - `published_by_id` integer, nullable
            - `updated_by_id` integer, nullable
            - `interacted_with` boolean, nullable
            - `featured` boolean
            - `ai_generated` boolean
            - `certificates_enabled` boolean
            - `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
            - `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.
              - …
            - `url` string
            - `collections` CollectionLight[], nullable
              - …
            - `display_level` string, nullable, required: The one level to show: the qualification level label when set, else `level` (#1915).
          - `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'
          - `time_created` string, date-time
          - `time_updated` string, date-time, nullable
          - `created_by_id` integer, nullable
          - `updated_by_id` integer, nullable
          - `revocation_reason` string, nullable
          - `url` string, nullable
          - `badge_id` integer, nullable
          - `reminder_emails_sent` integer, nullable
          - `change_request` BadgeAssertionChangeRequest[], nullable
            - `id` string, required
            - `changes` BadgeAssertionChangeRequestItem[], required
              - …
            - `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
          - `grade` 'Pass' | 'Merit' | 'Distinction' | 'Distinction*'
          - `credits_earned` number, nullable
        - BadgeAssertionLightPublic
          - `id` integer, required
          - `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
          - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
          - `badge_issuer_id` integer, nullable
          - `provider_id` integer, nullable
          - `issue_date` string, date-time, nullable
          - `time_verified` string, date-time, nullable
          - `time_claimed` string, date-time, nullable
          - `recipient` UserDetailLight
            - `id` integer, required
            - `status` 'Active' | 'Suspended' | 'Deleted'
            - `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.
            - `firstname` string, nullable, required
            - `lastname` string, nullable, required
            - `avatar_url` string, nullable
            - `avatar_url_2x` string, nullable
            - `avatar_url_original` string, nullable
            - `time_created` string, date-time
            - `time_updated` string, date-time, nullable
            - `noindex_enabled` boolean, nullable
          - `provider` ProviderLight
            - `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
              - …
            - `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
          - `badge` BadgeLight
            - `id` integer, required
            - `status` 'Initialising' | 'Draft' | 'Awaiting_Approval' | 'Published' | 'Deleted' | 'Expired'
            - `name` string, nullable
            - `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
            - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
            - `earn_url` string, nullable
            - `external_url` string, nullable
            - `information_url` string, nullable
            - `latitude` number, nullable
            - `longitude` number, nullable
            - `city` string, nullable
            - `country` string, nullable
            - `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
            - `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
            - `created_by_id` integer, nullable
            - `submitted_by_id` integer, nullable
            - `published_by_id` integer, nullable
            - `updated_by_id` integer, nullable
            - `interacted_with` boolean, nullable
            - `featured` boolean
            - `ai_generated` boolean
            - `certificates_enabled` boolean
            - `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
            - `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.
              - …
            - `url` string
            - `collections` CollectionLight[], nullable
              - …
            - `display_level` string, nullable, required: The one level to show: the qualification level label when set, else `level` (#1915).
          - `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'
          - `time_created` string, date-time
          - `time_updated` string, date-time, nullable
          - `revocation_reason` string, nullable
          - `url` string, nullable
          - `badge_id` integer, nullable
          - `restorable_until` string, date-time, nullable
          - `grade` 'Pass' | 'Merit' | 'Distinction' | 'Distinction*'
          - `credits_earned` number, nullable
    - `total` integer, required
    - `page` integer, required
    - `size` integer, required
    - `pages` integer, required
  - union[]
    - union
      - BadgeAssertionLight
        - `id` integer, required
        - `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
        - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
        - `badge_issuer_id` integer, nullable
        - `provider_id` integer, nullable
        - `issue_date` string, date-time, nullable
        - `time_verified` string, date-time, nullable
        - `time_claimed` string, date-time, nullable
        - `recipient` UserDetailLight
          - `id` integer, required
          - `status` 'Active' | 'Suspended' | 'Deleted'
          - `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.
          - `firstname` string, nullable, required
          - `lastname` string, nullable, required
          - `avatar_url` string, nullable
          - `avatar_url_2x` string, nullable
          - `avatar_url_original` string, nullable
          - `time_created` string, date-time
          - `time_updated` string, date-time, nullable
          - `noindex_enabled` boolean, nullable
        - `provider` ProviderLight
          - `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
        - `badge` BadgeLight
          - `id` integer, required
          - `status` 'Initialising' | 'Draft' | 'Awaiting_Approval' | 'Published' | 'Deleted' | 'Expired'
          - `name` string, nullable
          - `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
          - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
          - `earn_url` string, nullable
          - `external_url` string, nullable
          - `information_url` string, nullable
          - `latitude` number, nullable
          - `longitude` number, nullable
          - `city` string, nullable
          - `country` string, nullable
          - `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
          - `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
          - `created_by_id` integer, nullable
          - `submitted_by_id` integer, nullable
          - `published_by_id` integer, nullable
          - `updated_by_id` integer, nullable
          - `interacted_with` boolean, nullable
          - `featured` boolean
          - `ai_generated` boolean
          - `certificates_enabled` boolean
          - `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
          - `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
          - `url` string
          - `collections` CollectionLight[], nullable
            - `id` integer, required
            - `name` string, nullable
            - `badge_issuer_id` integer, nullable
          - `display_level` string, nullable, required: The one level to show: the qualification level label when set, else `level` (#1915).
        - `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'
        - `time_created` string, date-time
        - `time_updated` string, date-time, nullable
        - `created_by_id` integer, nullable
        - `updated_by_id` integer, nullable
        - `revocation_reason` string, nullable
        - `url` string, nullable
        - `badge_id` integer, nullable
        - `reminder_emails_sent` integer, 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
        - `grade` 'Pass' | 'Merit' | 'Distinction' | 'Distinction*'
        - `credits_earned` number, nullable
      - BadgeAssertionLightPublic
        - `id` integer, required
        - `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
        - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
        - `badge_issuer_id` integer, nullable
        - `provider_id` integer, nullable
        - `issue_date` string, date-time, nullable
        - `time_verified` string, date-time, nullable
        - `time_claimed` string, date-time, nullable
        - `recipient` UserDetailLight
          - `id` integer, required
          - `status` 'Active' | 'Suspended' | 'Deleted'
          - `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.
          - `firstname` string, nullable, required
          - `lastname` string, nullable, required
          - `avatar_url` string, nullable
          - `avatar_url_2x` string, nullable
          - `avatar_url_original` string, nullable
          - `time_created` string, date-time
          - `time_updated` string, date-time, nullable
          - `noindex_enabled` boolean, nullable
        - `provider` ProviderLight
          - `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
        - `badge` BadgeLight
          - `id` integer, required
          - `status` 'Initialising' | 'Draft' | 'Awaiting_Approval' | 'Published' | 'Deleted' | 'Expired'
          - `name` string, nullable
          - `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
          - `source` 'Internal' | 'Credly' | 'Open_University' | 'Imported'
          - `earn_url` string, nullable
          - `external_url` string, nullable
          - `information_url` string, nullable
          - `latitude` number, nullable
          - `longitude` number, nullable
          - `city` string, nullable
          - `country` string, nullable
          - `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
          - `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
          - `created_by_id` integer, nullable
          - `submitted_by_id` integer, nullable
          - `published_by_id` integer, nullable
          - `updated_by_id` integer, nullable
          - `interacted_with` boolean, nullable
          - `featured` boolean
          - `ai_generated` boolean
          - `certificates_enabled` boolean
          - `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
          - `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
          - `url` string
          - `collections` CollectionLight[], nullable
            - `id` integer, required
            - `name` string, nullable
            - `badge_issuer_id` integer, nullable
          - `display_level` string, nullable, required: The one level to show: the qualification level label when set, else `level` (#1915).
        - `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'
        - `time_created` string, date-time
        - `time_updated` string, date-time, nullable
        - `revocation_reason` string, nullable
        - `url` string, nullable
        - `badge_id` integer, nullable
        - `restorable_until` string, date-time, nullable
        - `grade` 'Pass' | 'Merit' | 'Distinction' | 'Distinction*'
        - `credits_earned` number, nullable

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Validation Error

## Changes

- **2026-11-06** `04bf6727d360`: 4 info
  - added the optional property `anyOf[subschema #1: Page[Union[Badge_Assertion_Light, Badge_Assertion_Light_Public]]]/items/items/anyOf[subschema #1: Badge_Assertion_Light]/badge/anyOf[subschema #1: Badge_Light]/quality_assured_at` to the response with the `200` status
  - added the optional property `anyOf[subschema #1: Page[Union[Badge_Assertion_Light, Badge_Assertion_Light_Public]]]/items/items/anyOf[subschema #2: Badge_Assertion_Light_Public]/badge/anyOf[subschema #1: Badge_Light]/quality_assured_at` to the response with the `200` status
  - added the optional property `anyOf[subschema #2]/items/anyOf[subschema #1: Badge_Assertion_Light]/badge/anyOf[subschema #1: Badge_Light]/quality_assured_at` to the response with the `200` status
  - added the optional property `anyOf[subschema #2]/items/anyOf[subschema #2: Badge_Assertion_Light_Public]/badge/anyOf[subschema #1: Badge_Light]/quality_assured_at` to the response with the `200` status
- …earlier changes not shown

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