Verify API reference
The verify API is a public, unauthenticated endpoint that checks a credential's signature, revocation status, and validity.
POST https://vci.inflowra.com/verify/
Content-Type: application/json
Request
| Field | Type | Description |
|---|---|---|
credential |
string | The credential to verify — a compact JWT string or a serialized JSON-LD document. |
{ "credential": "eyJhbGciOiJFZERTQSIs..." }
Response — 200 OK
Returned for every recognizable credential, valid or not. The result is in
data:
| Field | Type | Description |
|---|---|---|
data.valid |
boolean | Overall verdict — signature, revocation, and validity window all pass. |
data.reason |
string | Human-readable explanation of the verdict. |
data.signature.verification_method |
string | DID URL of the key the signature was checked against (e.g. did:web:vci.inflowra.com#key-1). |
data.revocation.checked |
boolean | Whether the issuer's status list was consulted. |
data.revocation.flagged |
boolean | Whether the credential is revoked. |
data.metadata.issuer |
string | Issuer DID. |
data.metadata.type |
string | string[] | Credential type(s). |
data.metadata.subject |
object | Credential subject (DID and disclosed claims). |
data.metadata.valid_from |
string | ISO 8601 start of validity. |
data.metadata.schema |
string | Schema the credential was issued against. |
Example — a revoked credential (note: still 200):
{
"data": {
"valid": false,
"reason": "Credential has been revoked by the issuer.",
"signature": { "verification_method": "did:web:vci.inflowra.com#key-1" },
"revocation": { "checked": true, "flagged": true },
"metadata": {
"issuer": "did:web:vci.inflowra.com",
"type": ["VerifiableCredential", "CertificationCredential"],
"subject": { "id": "did:key:z6MktGy4b..." },
"valid_from": "2025-06-01T00:00:00Z",
"schema": "https://vci.inflowra.com/schemas/certification-v1"
}
}
}
Response — 400 Bad Request
Returned only when the input is not a recognizable credential at all (not
parseable as a JWT or a JSON-LD document). An invalid signature or a revoked
credential is not a 400 — those are 200 with data.valid: false.
CORS
Browser calls are restricted to allowlisted origins. If you are building a frontend against this API, its origin must be allowlisted first — otherwise the browser blocks the request before it reaches the API.
TODO: confirm — process for requesting an origin allowlist entry.
Rate limits
TODO: confirm — rate limits for unauthenticated verify calls.