GET /v1/mandates/{mandate_id}/evidence returns a flattened JWS with media type application/jose+json.
ES256, resolve the protected kid only from Attesso’s JWKS, and reject every mismatch.
The signed envelope
protecteddecodes to{"alg":"ES256","kid":"<key id>"}.payloaddecodes to the evidence JSON:schema,generated_at,organization_id,mandate, andevents.signatureis an ES256 (ECDSA P-256) signature over the bytesprotected + "." + payload. The signature is the raw 64-byteR || Sform (IEEE P1363), not DER.
Node.js verification (no dependencies)
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.

