TCS uses three authentication methods depending on the endpoint you are calling:
API Key — A static key sent in the X-API-Key header. Use this for issuer and verifier admin operations.
Bearer JWT — An access token sent in the Authorization header. Use this for Trust Registry DID operations and credential requests.
DPoP (Demonstrating Proof-of-Possession) — A proof-of-possession mechanism (RFC 9449) that binds the access token to the client’s key pair, preventing token theft and replay. DPoP is per-token, not a deployment-wide flag — whether a given /credential request must use DPoP is decided by the issuer’s signing profile and the token type, not a global switch. Required by HAIP v1 (X.509 / ES256 issuers); optional on the EdDSA / DID path. See the endpoint mapping below.
Most discovery and protocol endpoints are public and require no authentication.
Send your API key in the X-API-Key header. You receive an API key when your organization is onboarded into the Trust Registry by the TCS team — there is no self-service apply endpoint; contact us to register. The server hashes your key with SHA-256 before storing it — the plaintext key is never persisted.
DPoP (RFC 9449) binds the access token to the client’s key pair, so a stolen token cannot be used by another party. It is required by HAIP v1 and recommended for all credential endpoint interactions. Two headers are required: Authorization: DPoP {access_token} and DPoP: {proof_jwt}.
Pre-authorized code is expired or has already been used
400
invalid_dpop_proof
DPoP proof structure, signature, or ath validation failed
400
use_dpop_nonce
Server requires a DPoP nonce — check the DPoP-Nonce response header
401
invalid_token
Access token is invalid or expired
401
invalid_token (DPoP path)
Token is structurally valid but the endpoint requires DPoP binding — the issuer is registered on the HAIP / X.509 / ES256 path. Re-request with Authorization: DPoP <token> plus a DPoP: proof header (see §3).
401
API Key is required
Missing X-API-Key header
401
Invalid API Key
API key not found or hash mismatch
401
Account is not approved
API key is valid but the account is pending approval