Fetch a public signing key for independent, offline verification
Deliberately unauthenticated, like GET /audit/verify and GET /refusal/verify — a third party (regulator, auditor, customer tool) fetching the key it needs to independently verify a signature cannot be required to already hold a Parmana credential to reach it. Returns the current or any still-retained historical key’s public half; a keyId whose private key was rotated away from is still resolvable here as long as its files were not deleted (PQC audit RED-3, docs/VERIFICATION-GAPS.md). See packages/crypto/src/OfflineVerifier.ts (and its Python counterpart, python/parmana/crypto/ offline_verifier.py) for a reference verifier that consumes exactly this response’s pem field with zero further network calls.
Authorizations
Caller API key issued by scripts/generate-api-key.ts. Sent as Authorization: Bearer . Verified against a stored SHA-256 hash in constant time by packages/api/src/auth/StaticKeyAuthenticator.ts. Required on every route except GET /health. See /api-reference/authentication.
Path Parameters
Response
The requested public key.
The key's actual algorithm, derived from the key material itself (asymmetricKeyType), not a global config value.
sig PEM-encoded SPKI public key (RFC 7468).
Node's native JWK export for this key's algorithm, when available. Ed25519 exports as kty "OKP"; ML-DSA-65 exports as kty "AKP" (the IETF JOSE/COSE key type for ML-DSA — not an identifier this codebase invented). Omitted, not null, when unavailable.