The refresh endpoint returns a base64-encoded Credential. See
Credential Issuance for issuance details.
Encoding
Credentials are serialized as JSON and commonly wrapped in base64 when returned by API endpoints.Credential schema
The
claims array is fixed-length (16 entries) and padded with the zero field
element. The example above is shortened for readability.Field definitions
| Field | Type | Description |
|---|---|---|
id | uint64 | Issuer-scoped reference identifier. Not exposed to RPs. |
version | string | Credential version. Current value is V1. |
issuer_schema_id | uint64 | Identifier for the (issuer, schema) pair registered in CredentialSchemaIssuerRegistry. |
sub | FieldElement | Blinded subject identifier derived from a World ID leaf index and an issuer-specific blinding factor. |
genesis_issued_at | uint64 | Unix timestamp (seconds) of the first issuance of this credential. |
expires_at | uint64 | Unix timestamp (seconds) for expiration. |
claims | FieldElement[] | Up to 16 claim commitments. Unused indices are the zero field element. |
associated_data_hash | FieldElement | Poseidon2 hash of issuer-defined associated data. The data itself is not included. |
signature | string | 64-byte compressed EdDSA signature over the credential hash, hex-encoded (no 0x prefix). |
issuer | EdDSAPublicKey | Issuer public key that signed the credential. |
Claims are included for issuer-defined semantics and may not be enforced by
proofs today. Associated data is stored by authenticators and is not exposed
to RPs.
Field representations
- FieldElement values (
sub,claims,associated_data_hash) are hex strings with a0xprefix and 64 hex characters. - Issuer public key (
issuer.pk) is serialized as[x, y]decimal strings for BabyJubJub affine coordinates. - Signature is hex-encoded compressed bytes (128 hex chars).
Hashing and signing
Credentials are hashed with Poseidon2 and signed using EdDSA over the BabyJubJub curve (V1).sub is computed by hashing the World ID leaf index with a blinding factor:
How credentials are used in proofs
When an authenticator generates a proof, it includes the credential and enforces:- The credential signature matches the issuer key registered in
CredentialSchemaIssuerRegistry. - The credential
submatches the blinded leaf index for the holder. - The credential is not expired and meets any minimum
genesis_issued_atconstraints.
PoH credential usage
Proof-of-Human (PoH) credentials follow the issuer-defined structure. The current PoH issuer spec states:- The user first obtains an Orb credential (currently a PCP in v2.3 format).
claim[0]is a commitment to the Orb credential, currentlyH(hashes.json).- The PoH credential has no associated data, so
associated_data_hashis the zero field element. - The PoH credential subject is blinded and differs from the Orb credential subject.
- The issuer may require a proof for the requested
subto prevent bricking an identity.