---
title: "Check a body against its attestation (free, independent)"
method: POST
path: "/v1/verify-attestation"
tags: ["attestation"]
---

# Check a body against its attestation (free, independent)

`POST /v1/verify-attestation`

## Request

- Base URL: `https://stablescan.achivx.com`
- URL: `https://stablescan.achivx.com/v1/verify-attestation`
- Auth: none required

## Request body

- object

## Response `200`

The verdict on the attestation; valid false is an answer, not an error.

- AttestationVerification
  - `alg` string, required
  - `kid` string, required
  - `observed_hash` string, required: The hash the attestation claims; the server recomputes it over the JCS-canonical body.
  - `reason` string: Why the check failed; present only when valid is false.
  - `valid` boolean, required: false is an answer, not an error: the body was altered, the signature does not verify, or the algorithm is not Ed25519. HTTP stays 200.

## Other responses

- `400`: The one error envelope. Branch on `error.code`, not on the status.
- `429`: The per-IP token bucket (20 requests/second, burst 40) is empty — wait `Retry-After`.
- `503`: The one error envelope. Branch on `error.code`, not on the status.

---

[API](https://skmtc.dev/achivx/apis/stablecoin-scanner-rest-api.md) · [All operations](https://skmtc.dev/achivx/apis/stablecoin-scanner-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/achivx/apis/stablecoin-scanner-rest-api/revisions/cbd001c8925c?raw)
