Overview
This guide walks through issuing a credential withPOST /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:writepermission - A subject (the entity the credential is about) — an organisation, person, agent, or document
- Knowledge of which
credential_typeyou 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 onsubject and claims depend on credential_type:
- business
- user
- outcome_attestation
kyb_status (one of pending | approved | declined | manual_review).Step 2: Send the Request
Step 3: Inspect the Response
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 viaby_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 passingexpires_at(ISO 8601) in the request body. Passing a date in the past returns422.
Idempotency
Issue requests support Stripe-style idempotency keys via theIdempotency-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.