Skip to main content

Overview

This guide walks through issuing a credential with POST /v1/credentials. You’ll learn what goes in the request body, what comes back, and how the four credential types differ.

Prerequisites

  • A Beltic API key with credentials:write permission
  • A subject (the entity the credential is about) — an organisation, person, agent, or document
  • Knowledge of which credential_type you want to issue

Choosing a Credential Type

Step 1: Build the Request

The request body has three required fields plus a few optional ones:
British spelling matters: subject.type for a company is "organisation", not "organization". The schema follows the W3C VC business profile.

Subject Shapes by Type

The required fields on subject and claims depend on credential_type:
Required claims: kyb_status (one of pending | approved | declined | manual_review).

Step 2: Send the Request

Step 3: Inspect the Response

Fields worth knowing:
  • signed_payload — the JWT-VC. This is the artifact you hand to verifiers; it carries all the claims plus the signature.
  • credential_id — the globally unique identifier. Stable across the credential’s lifetime; use it in verify requests via by_credential_id.
  • status_list_index — the bit slot reserved in your org’s Status List 2021 bitstring. You don’t need this for verification, but it’s useful for audit.
  • expires_at — defaults to 90 days from issuance. Override it by passing expires_at (ISO 8601) in the request body. Passing a date in the past returns 422.

Idempotency

Issue requests support Stripe-style idempotency keys via the Idempotency-Key header. Retrying the same request with the same key within 24 hours returns the original response without minting a new credential. Concurrent retries with the same key return 409 conflict.

Error Codes

Next Steps

Verify a Credential

Validate the JWT-VC you just received.

Batch Issue

Issue thousands of credentials in a single async job.