Docs · Issue

Issuance quick start

Send credentials into holder wallets via `POST /v1/credentials/issue` or the dashboard. This page covers API usage, bulk uploads, and revocation.

Single issuance

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"],
    "end_date": "2026-12-31"
  },
  "presentation_methods": ["nfc", "qr"],
  "metadata": { "internal_id": "hr_12345" }
}

Response includes `credential_id`, `issuance_link`, and `qr_code`. Holders click the link or scan the QR to accept in their EUDI wallet.

Bulk CSV upload

email,name,employee_id,department,access_levels,end_date
john@acme.com,John Doe,EMP12345,Engineering,"office,lab,parking",2026-12-31
jane@acme.com,Jane Smith,EMP12346,Sales,"office,parking",2026-06-30

Upload inside `/dashboard/issue` or call `/v1/credentials/bulk-issue`. Each row becomes a credential; Nexiel emails claim links to recipients.

Revocation & expiration

  • POST /v1/credentials/{credential_id}/revoke updates status immediately and notifies holders.
  • • Include expires_at when issuing; Nexiel enforces expiry automatically.
  • • Dashboard exposes filters for pending/accepted/revoked/expired credentials.
  • • NFC taps call /v1/nfc/verify to confirm the credential is still valid.

Webhook events

  • • `credential.issued` – Nexiel signed the credential and created a claim link.
  • • `credential.accepted` – holder stored the credential in their wallet.
  • • `credential.revoked` / `credential.expired` – update downstream systems immediately.
  • • `nfc.tap.logged` – optional feed of reader events for analytics/audit.

Related guides