/discovery
Discovery document for standards-aware clients.
OB3 reference
Reference for API-key issue and revoke flows, idempotent writes, and assertion lifecycle operations.
Discovery document for standards-aware clients.
Credential read access for the authenticated subject.
Profile synchronization for issuer-managed records.
Institution systems use tenant API keys with explicit scopes for issue and revoke operations.
Programmatic issue and revoke requests are queued, then converted into signed credential records when processed.
Assertions track the lifecycle behind each signed credential: active, suspended, revoked, or expired.
Use this model when a SIS, LMS, registrar workflow, or departmental script determines that a learner completed the requirement and then calls CredTrail to issue or revoke the badge. CredTrail stores the assertion as the operational record and publishes the signed OB3 credential and public badge URL from that record.
If you need subject-scoped OB3 access, learner wallet delivery, or public verification payloads, use the dedicated guides instead of the tenant automation routes below.
Lists active and revoked API keys for the tenant.
Creates a new tenant API key. Plaintext key material is returned only once on creation.
Revokes a tenant API key so it can no longer issue or revoke credentials.
Queues a badge issuance request using the tenant API key scope queue.issue.
Queues a badge revocation request using the tenant API key scope queue.revoke.
Returns current lifecycle state plus the recorded lifecycle event history.
Applies a manual lifecycle transition such as suspension, revocation, or reinstatement.
Issues a badge through an authenticated issuer/admin session instead of an API key.
DataIntegrityProof using eddsa-rdfc-2022./credentials/v1/:credentialId routes still resolve tenant-scoped assertion IDs.x-api-key on programmatic write requests.idempotencyKey is required on all programmatic writes./v1/issue and /v1/revoke routes are not public integration APIs.202 Accepted with queue metadata.Create and store a tenant API key. A tenant admin creates the key once, records the plaintext secret securely, and grants only the scopes needed by the integration.
Queue issuance when your source system confirms eligibility. Your SIS, LMS, registrar script, or departmental workflow calls the programmatic issue route. The worker later signs the OB3 credential and stores the assertion-backed artifact.
Monitor assertion state and apply lifecycle changes when needed. Use lifecycle reads for operational visibility and transitions for holds, revocations, or reinstatement.
curl -sS https://credtrail.org/v1/programmatic/issue \ -H "content-type: application/json" \ -H "x-api-key: $CREDTRAIL_API_KEY" \ -d '{ "tenantId": "tenant_example", "badgeTemplateId": "badge_template_sakai_commits", "recipientIdentity": "learner@example.edu", "recipientIdentityType": "email", "recipientIdentifiers": [ { "identifierType": "studentId", "identifier": "12345678" } ], "idempotencyKey": "sis-issue-tenant_example-12345678-20260307" }' | jq{ "status": "queued", "channel": "programmatic_api_key", "jobType": "issue_badge", "assertionId": "tenant_example:7df18c9c-1d19-42d7-9aa7-bd17e6d3cf74", "idempotencyKey": "sis-issue-tenant_example-12345678-20260307"}curl -sS https://credtrail.org/v1/programmatic/revoke \ -H "content-type: application/json" \ -H "x-api-key: $CREDTRAIL_API_KEY" \ -d '{ "tenantId": "tenant_example", "assertionId": "tenant_example:7df18c9c-1d19-42d7-9aa7-bd17e6d3cf74", "reason": "Credential revoked by issuer after policy review", "idempotencyKey": "sis-revoke-tenant_example-12345678-20260307" }' | jq{ "status": "queued", "channel": "programmatic_api_key", "jobType": "revoke_badge", "assertionId": "tenant_example:7df18c9c-1d19-42d7-9aa7-bd17e6d3cf74", "revocationId": "tenant_example:0f9a0e8b-39db-4b6f-845f-9ec0f4442de2", "idempotencyKey": "sis-revoke-tenant_example-12345678-20260307"}curl -sS https://credtrail.org/v1/tenants/tenant_example/assertions/tenant_example:7df18c9c-1d19-42d7-9aa7-bd17e6d3cf74/lifecycle \ -H "Authorization: Bearer $ISSUER_SESSION_TOKEN" | jq{ "assertionId": "tenant_example:7df18c9c-1d19-42d7-9aa7-bd17e6d3cf74", "tenantId": "tenant_example", "state": "active", "source": "default_active", "reasonCode": null, "reason": null, "transitionedAt": "2026-03-07T18:02:11.000Z", "revokedAt": null, "events": []}curl -sS https://credtrail.org/v1/tenants/tenant_example/assertions/tenant_example:7df18c9c-1d19-42d7-9aa7-bd17e6d3cf74/lifecycle/transition \ -H "Authorization: Bearer $ISSUER_SESSION_TOKEN" \ -H "content-type: application/json" \ -d '{ "toState": "revoked", "reasonCode": "issuer_requested", "reason": "Credential revoked by issuing office", "transitionSource": "manual" }' | jq