Single Issuance
When to use
You are issuing one credential to one subject — the most common case for ad-hoc certifications, manual KYC, etc.
Before you begin
- Issuer role.
- Subject DID (the holder shares it with you).
- A schema you can issue against.
Steps
- Navigate to
/issuer/credentials/issue. 2. Pick the Schema (and version) from the dropdown. - Pick your Issuer DID (auto-populated if you have only one).
- Enter the Subject DID.
- Fill the Claims form — the form is auto-generated from the schema’s properties.
- (Optional) Set Validity period:
validFrom— defaults to now.validUntil— optional explicit expiry.
- Toggle Anchor credential hash on chain if needed.
- Click Issue. The portal calls
POST /api/v1/credentials/issue(vc.go:96).
API & SDK
Response:
Verify
The issued VC appears in /issuer/credentials (your issuance log) and the holder sees it in their /credentials list.
Troubleshooting
4.3.2. Bulk Issuance from CSV ##### When to use
You have hundreds-to-millions of subjects and uniform claims (one row per subject). The bulk pipeline parses the CSV, validates each row, signs in batches, and (optionally) anchors per-batch on chain.
Before you begin
- A CSV file with header row matching the schema’s properties.
- One column for
subjectDid(orsubjectEmailif your platform deployment is configured to look-up DID from email — see ops config).
Steps
- Navigate to
/issuer/credentials/bulk. 2. Pick the Schema. - Drag-drop the CSV file (max 50 MB).
- The portal parses the headers and shows a Column mapping preview — drag schema fields onto CSV columns if needed.
- (Optional) Toggle Anchor batch hashes.
- Click Start issuance.
The pipeline:
Monitoring
The portal renders a live progress bar (SSE-driven) showing n / total processed, m failed.
API
Bulk uploads use a multi-part endpoint:
Verify
The job appears in /issuer/credentials/bulk?jobId=.... Once complete, download the success CSV (with credential IDs) and the failure CSV (with reasons per row).
Troubleshooting
4.3.3. Anchoring Credential Hashes ##### Why anchor?
Anchoring writes a keccak256(serializedVC) to the SchemaRegistry (or to a dedicated credentials index, depending on contract config). Verifiers can then prove a credential existed at a given time without the platform’s involvement.
ℹ️ Info — Anchoring credential hashes is opt-in per credential. For low-value credentials, skip it (saves gas). For high-stakes credentials (regulated KYC, real-estate ownership), always anchor.
How
- For single issuance: toggle Anchor on chain in the form.
- For bulk: toggle Anchor batch hashes (anchors one tx per batch of N rows; check ops for the current batch size).
- Programmatically:
anchorOnChain: trueon the issuance request.
Verify
Re-fetch the credential. The metadata.anchored: true flag and metadata.txHash should be populated.