For Relying Parties
Issuance API
Use `POST /v1/credentials/issue` for single credentials or hit `/v1/credentials/bulk-issue` with CSV payloads. Issuance links open the wallet, handle acceptance, and log audit events automatically.
POST /v1/credentials/issue
Authorization: Bearer <ISSUER_TOKEN>
Content-Type: application/json
{
"credential_type": "staff_id",
"subject": {
"email": "john@example.com",
"name": "John Doe"
},
"attributes": {
"employee_id": "EMP12345",
"department": "Engineering",
"access_levels": ["office", "lab", "parking"],
"start_date": "2025-01-15",
"end_date": "2026-12-31"
},
"presentation_methods": ["nfc", "qr"],
"metadata": {
"internal_id": "hr_12345",
"batch_id": "batch_jan_2025"
}
}{
"credential_id": "cred_abc123",
"issuance_link": "https://nexiel.io/claim/cred_abc123",
"wallet_url": "openid-credential-offer://?credential_offer=...",
"qr_code_url": "https://api.nexiel.io/v1/credentials/offers/cred_abc123/qr",
"status": "pending_acceptance",
"expires_at": "2026-12-31T23:59:59Z"
}credential.issued
Signed credential ready for collection.
credential.accepted
Holder added it to their wallet.
credential.revoked
Issuer revoked or superseded the credential.
nfc.tap.logged
Reader verified the credential (optional).
Encodes the `openid-credential-offer://` link defined by EUDI / OpenID4VCI profile for wallets.
GET /v1/credentials/offers/cred_abc123/qr?size=360 HTTP/1.1 Host: api.nexiel.io Authorization: Bearer <ISSUER_TOKEN> Accept: image/png
Pass an optional `size` (160–1024px). The endpoint regenerates the QR on every request so display kiosks always show the latest pre-authorised offer.