- Connection-based offer — issue a credential directly to a holder over an established DIDComm connection.
- Out-of-band (OOB) offer — generate a credential offer that can be accepted without a prior connection, delivered as a URL or QR code.
- OOB via email — send OOB credential offers to one or more holders by email.
- Bulk CSV issuance — upload a CSV file to issue credentials to many holders simultaneously.
credentialType query parameter (INDY or JSONLD).
Base path
All endpoints are rooted at/orgs/:orgId/credentials.
Authentication
Every endpoint requires a JWT bearer token.Role-based access
| Operation | Required roles |
|---|---|
| Issue credentials, OOB offers | owner, admin, issuer |
| Read issued credentials | owner, admin, issuer, verifier, member, holder |
| Delete issuance records | owner |
| Bulk upload templates | owner, admin, issuer, verifier |
Endpoints
Issue credential (connection)
POST /orgs/:orgId/credentials/offer — Issue to a connected holder.Issue credential (OOB)
POST /orgs/:orgId/credentials/oob/offer — Create an OOB credential offer.Issue via email (OOB)
POST /orgs/:orgId/credentials/oob/email — Send OOB offers via email.List credentials
GET /orgs/:orgId/credentials — Retrieve all issued credential records.Get credential
GET /orgs/:orgId/credentials/:credentialRecordId — Get a specific credential record.Bulk templates
GET /orgs/:orgId/credentials/bulk/template — List or download a CSV template for bulk issuance.Upload CSV
POST /orgs/:orgId/bulk/upload — Upload a filled CSV file for bulk issuance.Execute bulk issuance
POST /orgs/:orgId/:requestId/bulk — Trigger bulk credential issuance for an uploaded file.Delete issuance records
DELETE /orgs/:orgId/issuance-records — Delete all issuance records for an organization.Issue credential (connection-based)
POST /orgs/:orgId/credentials/offer
Issue one or more verifiable credentials to holders over established DIDComm connections.
Required roles: owner, admin, issuer
Path parameters
UUID of the issuing organization.
Query parameters
Credential format. Enum:
INDY (default) or JSONLD.Validate credential attributes against the schema before issuing. Defaults to
true.Request body
The ledger credential definition ID. Required when
credentialType is INDY. Example: "WgWxqztrNooG92RXvxSTWv:3:CL:123:default".Optional human-readable comment attached to the credential offer.
DIDComm protocol version. Example:
"v1" or "v2".Auto-acceptance mode. Enum:
always, contentApproved, never.A goal code for the credential offer thread.
Parent thread ID to attach this offer to an existing thread.
Whether the issuer confirms receipt of the presentation.
Label for the credential offer message.
Image URL to include with the credential offer.
Reuse an existing connection if available. Defaults to
true.Shorten the OOB URL in the response.
Array of credential offers. Each element targets a specific connection.
Examples
201 response
| Status | Description |
|---|---|
400 Bad Request | Missing credentialDefinitionId for INDY type, or missing credential/options for JSONLD. |
401 Unauthorized | Missing or invalid bearer token. |
403 Forbidden | User lacks the required role. |
404 Not Found | Invalid credentialType value. |
Create out-of-band credential offer
POST /orgs/:orgId/credentials/oob/offer
Create an out-of-band credential offer that can be accepted by a holder without a pre-existing connection. The response contains an invitation URL.
Required roles: owner, admin, issuer
Path parameters
UUID of the issuing organization.
Query parameters
Credential format. Enum:
INDY (default) or JSONLD.Validate attributes against the schema. Defaults to
true.Request body
Ledger credential definition ID. Required for
INDY type.Optional comment attached to the credential offer.
DIDComm protocol version.
Auto-acceptance mode. Enum:
always, contentApproved, never.Whether to return a shortened invitation URL.
Attempt to reuse an existing connection.
Credential attribute name/value pairs. Required for
INDY type.W3C Verifiable Credential object. Required for
JSONLD type.Linked Data proof options. Required for
JSONLD type.Examples
201 response
Issue credential via email
POST /orgs/:orgId/credentials/oob/email
Create OOB credential offers and deliver them to holders by email. Each element in credentialOffer targets a specific email address.
Required roles: owner, admin, issuer
Path parameters
UUID of the issuing organization.
Query parameters
Credential format. Enum:
INDY (default) or JSONLD.Validate attributes against the schema. Defaults to
true.Request body
Ledger credential definition ID. Required for
INDY type.Optional comment for all offers in this batch.
DIDComm protocol version.
Attempt to reuse an existing connection with each recipient.
Array of per-recipient credential offers. The maximum number of entries is controlled by the
OOB_BATCH_SIZE environment variable.Examples
201 response
List issued credentials
GET /orgs/:orgId/credentials
Retrieve all issued credential records for an organization. Supports pagination, search, and sorting.
Required roles: owner, admin, issuer, verifier, member, holder
Path parameters
UUID of the organization.
Query parameters
Page to retrieve. Min
1. Defaults to 1.Records per page. Min
1, max 100. Defaults to 10.Free-text search across credential records.
Field to sort by. Enum:
createDateTime (default).Sort direction.
ASC or DESC (default).Examples
200 response
Get credential by record ID
GET /orgs/:orgId/credentials/:credentialRecordId
Retrieve the details of a single credential issuance record.
Required roles: owner, admin, issuer, verifier, member, holder
Path parameters
UUID of the organization.
UUID of the credential record to retrieve.
Examples
200 response
| Status | Description |
|---|---|
400 Bad Request | credentialRecordId is not a valid UUID. |
404 Not Found | No credential record found with that ID. |
Bulk issuance
CREDEBL supports issuing credentials to large numbers of holders by uploading a filled CSV file. The bulk issuance flow has three steps:Download a CSV template
Use
GET /orgs/:orgId/credentials/bulk/template to list available templates, or POST /orgs/:orgId/credentials/bulk/template to download a CSV template file pre-filled with the correct column headers for a specific credential definition.Upload the filled CSV
Fill in the CSV with one row per holder and upload it via
POST /orgs/:orgId/bulk/upload. The server returns a requestId.Download CSV template
POST /orgs/:orgId/credentials/bulk/template
Download a CSV template with column headers derived from a credential definition’s schema.
Required roles: owner, admin, issuer, verifier
Request body
The ledger credential definition ID to use as a template. Example:
"WgWxqztrNooG92RXvxSTWv:3:CL:123:default".Schema type. Enum:
INDY or W3C.Examples
Upload CSV for bulk issuance
POST /orgs/:orgId/bulk/upload
Upload a filled CSV file for bulk issuance. The file is uploaded as multipart/form-data.
Required roles: owner, admin, issuer, verifier
Path parameters
UUID of the organization.
Query parameters
Schema type of the CSV data. Enum:
INDY or W3C.The credential definition ID used as the template.
Validate rows against the schema on upload. Defaults to
true.Request body
Upload afile field as multipart/form-data containing the CSV binary. Optionally include a fileName field.
Examples
201 response
Execute bulk issuance
POST /orgs/:orgId/:requestId/bulk
Start the bulk credential issuance process for a previously uploaded CSV file.
Required roles: owner, admin, issuer, verifier
Path parameters
UUID of the organization.
The
requestId returned when the CSV was uploaded.Query parameters
Validate rows against the schema before issuing. Defaults to
true.Override the credential definition ID for this issuance run.
Request body
Client identifier for tracking the bulk job.
Name of the CSV file being processed.
When
true, allows selective issuance for specific rows.URL of the organization’s logo to include in credential emails.
Platform name to include in credential emails.
Delete issuance records
DELETE /orgs/:orgId/issuance-records
Delete all issuance records for an organization. This action is irreversible.
Required roles: owner
Path parameters
UUID of the organization.
Examples
200 response
| Status | Description |
|---|---|
400 Bad Request | orgId is not a valid UUID. |
401 Unauthorized | Missing or invalid bearer token. |
403 Forbidden | User does not have the owner role. |