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

MethodPathSummary
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.