Cohiva Credentials β Public API
Open Badges 2.0 verifiable credentials. Authenticate with your issuer API key
(Authorization: Bearer <key> or X-API-Key). Every response is a typed
JSON schema (see the machine-readable spec). Machine-readable spec:
openapi.json.
Endpoints
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/issuer/me |
Resolve the issuer for the presented API key π |
| POST | /api/v1/credentials |
Issue a credential π |
| GET | /api/v1/credentials |
List issued credentials (paginated + filterable) π |
| GET | /api/v1/credentials/{id} |
Get a credential π |
| POST | /api/v1/credentials/{id}/revoke |
Revoke a credential π |
| POST | /api/v1/credentials/{id}/reissue |
Reissue a credential (fresh assertion id) π |
| POST | /api/v1/definitions |
Create a credential definition (OB BadgeClass) π |
| GET | /api/v1/definitions |
List credential definitions π |
| GET | /api/v1/definitions/{id} |
Get a credential definition π |
| POST | /api/v1/ingest/csv |
CSV / manual import β batch issue (idempotent, per-row report). Set dryRun for a no-issue preview. π |
| POST | /api/v1/ingest/completions |
Generic REST ingest of a single completion event π |
| POST | /api/v1/connectors/jobready/completions |
ReadyTech / JobReady RECEIVE webhook β map pushed completion events β idempotent issuance π |
| POST | /api/v1/connectors/{provider}/completions |
Generic LMS/SMS connector RECEIVE (aXcelerate / eSkilled / generic) on the shared ingest seam π |
| POST | /api/v1/verify |
Verify a credential by assertion id (no auth) |
| POST | /api/v1/verify/bulk |
Bulk-verify assertion ids (no auth) β results returned in the same order |
| GET | /api/v1/webhooks/catalog |
The public webhooks-out catalog (no auth): subscribable events, signature scheme, headers, retry policy |
| POST | /api/v1/verify/premium |
Premium verification (authed, entitlement-gated, metered) β same result, reserved for plans that include it π |
| GET | /api/v1/usage |
The issuerβs own usage + plan (quota, consumption this period) π |
| POST | /api/v1/gdpr/export |
GDPR β export everything held for a recipient (email in body, hashed for lookup; raw email never stored/returned) π |
| POST | /api/v1/gdpr/erase |
GDPR β erase a recipient: null the personal label + revoke their credentials + audit (append-only record kept) π |
| GET | /api/v1/reports/issuance |
Per-issuer operational report (issuance / lifecycle / verifies / by definition) π |
| GET | /api/v1/reports/issuance.csv |
CSV export of the per-definition issuance report π |
| GET | /api/v1/analytics |
SQL-aggregated, time-series analytics (issuance/verifies/engagement over time, funnel, by-definition + by-pathway, geo) π |
| GET | /api/v1/analytics.csv |
CSV export of the analytics time-series (one row per UTC day) β the schedulable export π |
| POST | /api/v1/pathways |
CR-DEF+ β create a credential pathway (staged) π |
| GET | /api/v1/pathways |
List credential pathways π |
| GET | /api/v1/pathways/{id} |
Get a pathway with its stages π |
| POST | /api/v1/pathways/{id}/stages |
Add a stage (definition) to a pathway π |
| POST | /api/v1/pathways/{id}/progress |
A recipientβs progress through a pathway (email in body, hashed) π |
| POST | /api/v1/definitions/{id}/endorsements |
CR-DEF+ β endorse a definition (badge type) π |
| GET | /api/v1/definitions/{id}/endorsements |
List endorsements of a definition π |
| POST | /api/v1/credentials/{id}/endorsements |
CR-DEF+ β endorse a single credential π |
| GET | /api/v1/credentials/{id}/endorsements |
List endorsements of a credential π |
| POST | /api/v1/definitions/{id}/alignments |
CR-DEF+ β add a framework alignment to a definition π |
| GET | /api/v1/definitions/{id}/alignments |
List a definitionβs framework alignments π |
Quick start β issue a credential
curl -X POST https://api.credentials.cohiva.com/api/v1/credentials \
-H "Authorization: Bearer cvc_live_your_key" \
-H "Content-Type: application/json" \
-d '{"definitionId":"<uuid>","recipientEmail":"learner@example.com","completionKey":"jobready-2026-001"}'
π marks endpoints that require an API key. Verification endpoints (except premium) are open.
Authenticated endpoints are rate-limited per key β a 429 returns a Retry-After header.