---
title: "Verify Badge Assertion"
method: GET
path: "/v1/badge_assertion/{badge_assertion_id}/verify"
tags: ["Badge Assertion"]
---

# Verify Badge Assertion

`GET /v1/badge_assertion/{badge_assertion_id}/verify`

## 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/{badge_assertion_id}/verify`
- Auth: none declared
- TypeScript: <https://skmtc.dev/navigatr/apis/navigatr-api/docs/v1/badge_assertion/:badge_assertion_id/verify/get.ts> (a function with typed inputs; its response is checked against the schema)

Public endpoint — no authentication required. Any user (logged in or not) may check
verification status of a badge assertion.

Verify a badge assertion against Open Badge criteria. Each failed criterion adds a key to
`reasons`, and `verified` is true only when there are none:
- `status`: the assertion is Claimed.
- `issue_date`: an issue date exists and is not in the future.
- `provider`: for a Navigatr-issued badge, the provider exists and is verified; for an
  imported badge, the issuer record exists and has a source URL.
- `recipient_name`: for a Navigatr-issued badge, the recipient name matches the linked
  account (fuzzy); for an imported badge, a recipient identifier in the credential matches
  one of the importer's verified emails.
- `source` (imported badges only): the source still verifies, by re-fetching the hosted
  assertion (OB 2.0) or re-checking the signature and revocation status (OB 3.0).
- `time_claimed`: a claim date exists and is not in the future. It is not compared with
  the issue date, which the issuer supplies.
- `time_updated`: if the assertion has been updated, the update is not before the claim.
- `end_date`: the assertion has not passed its expiry date.

`time_verified` reflects the current state: set when all criteria pass and cleared when any
fail. The exception is an imported badge whose only failure is a non-definitive `source`
result (for example, the source is unreachable), which leaves it intact.
The website renders a green tick next to the recipient avatar while it is set, so the flag
must follow the live verification result rather than stick on the first success.

Returns 403 for non-public assertions (e.g. Pending).

## Path parameters

- `badge_assertion_id` integer, required

## Response `200`

Successful Response

- BadgeAssertionVerifyResult
  - `verified` boolean
  - `reasons` object
  - `status` 'Pending' | 'Claimed' | 'Expired' | 'Revoked' | 'Deleted' | 'Failed' | 'Complained'
  - `issue_date` string, date-time, nullable
  - `issuer_verified` boolean, nullable
  - `issuing_method` 'Email' | 'Activity' | 'Autobadge' | 'Bulk' | 'API' | 'Pushed' | 'Migrated' | 'QR' | 'Library_Card' | 'Riddle' | 'Typeform' | 'Zoho_Forms' | 'Tally' | 'Imported' | 'Pathway'
  - `recipient_name` string, nullable
  - `issuer_name` string, nullable
  - `source_platform` string, nullable
  - `time_created` string, date-time, nullable
  - `time_claimed` string, date-time, nullable
  - `time_updated` string, date-time, nullable

## Other responses

- `403`: Forbidden
- `404`: Not Found
- `422`: Validation Error

## Changes

- **2026-08-06** `4039d06e340b`: 1 info
  - endpoint added

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