Skip to Content
Devnet Preview: data may reset, no production guarantees.
API ReferencePOST /agent/passport/verify

POST /api/v1/agent/passport/verify

Server-side passport freshness check. Verifies signature, expiry, agent status, and authority key revocation.

Auth: None (public)

Base URL: https://provenonce.io

Use this when you need real-time verification of a passport’s validity. For offline verification, use BeatAgent.verifyPassportLocally() from the SDK.

Request

curl -X POST https://provenonce.io/api/v1/agent/passport/verify \ -H "Content-Type: application/json" \ -d '{ "passport": { "format_version": 1, "agent_hash": "0xfd752396...", "agent_public_key": "DAsDZb5p...", "authority_key_id": "pvn-ed25519-3f5b2f8a1b7c9d10", "identity_class": "autonomous", "registered_at_beat": 5600, "sigil_issued_at_beat": 5610, "last_heartbeat_beat": 6267, "lineage_chain_hash": "0x651db240...", "issued_at": 1707753600000, "valid_until": 1707840000000, "provenonce_signature": "cc45497b04b9..." } }'

Request body

FieldTypeRequiredDescription
passportobjectYesA signed Passport object (all fields required)

Response

{ "valid": true, "checks": { "signature": true, "not_expired": true, "agent_active": true, "key_not_revoked": true }, "agent_status": "active", "checked_at": "2026-02-12T12:05:00.000Z" }

Response fields

FieldTypeDescription
validbooleanOverall validity (all checks pass)
checks.signaturebooleanEd25519 signature is valid
checks.not_expiredbooleanvalid_until is in the future
checks.agent_activebooleanAgent is not frozen or refused
checks.key_not_revokedbooleanAuthority key is not on the CRL
agent_statusstring | nullCurrent agent status, or null if lookup failed
checked_atstringISO 8601 timestamp of the check

Error responses

StatusBodyCause
400{"error": "...", "code": "INVALID_JSON"}Malformed JSON
400{"error": "...", "code": "PASSPORT_INVALID"}Missing or malformed passport
413{"error": "...", "code": "BODY_TOO_LARGE"}Request exceeds 8 KB
429{"error": "...", "code": "RATE_LIMITED"}Rate limit exceeded

Rate limit: 60/min per IP