Skip to main content
GET /v1/mandates/{mandate_id}/evidence returns a flattened JWS with media type application/jose+json.
Verify the signature before decoding or trusting the evidence payload. Pin the format and ES256, resolve the protected kid only from Attesso’s JWKS, and reject every mismatch.

The signed envelope

  • protected decodes to {"alg":"ES256","kid":"<key id>"}.
  • payload decodes to the evidence JSON: schema, generated_at, organization_id, mandate, and events.
  • signature is an ES256 (ECDSA P-256) signature over the bytes protected + "." + payload. The signature is the raw 64-byte R || S form (IEEE P1363), not DER.

Node.js verification (no dependencies)

Fetch the JWKS from GET /.well-known/jwks.json (no API key required). The dsaEncoding: 'ieee-p1363' option is required — Node defaults to DER, but Attesso signs with raw R || S.

Go verification (stdlib only)

Python verification (stdlib + cryptography)

What the signature covers

  • The immutable Mandate and policy digest
  • The verified approval proof
  • Every proposed action and Attesso decision
  • Reservation, commit, cancellation, revocation, and expiry events
  • Source-labelled lifecycle assertions supplied by your platform
Evidence is not a payment receipt or proof that an external provider performed an action. It distinguishes Attesso-verified events from facts your platform reported.
Store the original signed envelope when you need a portable audit artifact. Treat any verification failure as a security incident.