List your organisation's verifications
/v1/verificationsReturns your organisation's verification log, newest first.
Scoped to the calling key's organisation and environment: a test key
never sees live verifications. Anonymous verifications are attributable
to no one and are not logged, so a credential is required.
Rows carry the verdict as it was recorded. They carry no matches: to
get matches for a hash, POST it, which is the operation that computes
them.
Cursor-paginated. See Pagination.
Errors
Every query parameter is rejected rather than ignored or clamped. An
unparseable from, an out-of-range limit or a cursor that does not
decode all answer 400 with the offending field in error.details — a
silently different page is worse than a refusal on a log you reconcile
against.
Authorization
apiKey Authorization: Bearer aud_live_…
Optional on POST /v1/verifications, which answers without any
credential. Required to list or read verifications back.
Send exactly one Authorization header. A credential that is present and
does not work is refused rather than downgraded to the anonymous tier.
Issue a key in the portal under Settings → Organisation → API credentials; it is shown once, at creation.
Two scopes exist. verifications:read covers every verification
operation and is on every key. records:write covers
POST /v1/records and is granted only on a live credential whose
organisation holds the organisation-issued authentication add-on at the
moment the key is minted — a test key never receives it, because
there is no sandbox ledger and the records it would create would be
permanent — scopes are fixed then and never widen afterwards, because a
credential's recorded scopes are what an auditor reads to know what that
key could do on a given date. Buying the add-on later means minting a new
key; the old one keeps verifying.
Scopes, rotation, revocation, the live and test prefixes and what to
do about a leaked key:
https://audrie.io/docs/authentication
In: header
Query Parameters
Return only verifications that recorded this verdict.
Value in
- "verified"
- "verified_org"
- "revoked"
- "signature_invalid"
- "pending_anchor"
- "no_record"
Return only verifications of this document hash.
^sha256:[0-9a-f]{64}$Return only verifications at or after this instant. RFC 3339 timestamp.
date-timeReturn only verifications at or before this instant. RFC 3339 timestamp.
date-timeRows per page. An integer between 1 and 100. Defaults to 25. A value outside that range is refused, not clamped.
1 <= value <= 10025Opaque cursor from a previous page's pagination.nextCursor. Pass it
back verbatim; do not construct or modify one.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/verifications?from=2026-08-01T00%3A00%3A00Z&to=2026-08-31T23%3A59%3A59Z"{ "data": [ { "verificationId": "72d12273-0723-448e-a9f6-f7957128efa5", "verdict": "verified", "assuranceLevel": "audrie.registry.v1", "mode": "partial", "environment": "live", "originalDocHash": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "verifiedAt": "2019-08-24T14:15:22Z", "reference": "string" } ], "pagination": { "nextCursor": "string", "hasMore": true }}Pagination
How to page through the verification log with cursors.
Verify a document hash POST
Submits a document hash and returns a **verdict** — Audrie's answer to "does this document check out, and what do you know about it". Both cryptographic checks are recomputed server-side for your request. Nothing in the request body is trusted beyond the identifiers used to look records up: a client that lies about a hash can only produce a verdict that fails its own verification. Works with or without a credential. See [Disclosure tiers](https://audrie.io/docs/disclosure-tiers). ## What you get back `verdict` is a single value you can branch on. It is derived from the four checks in `matches[].checksPerformed` plus revocation state, and it fails closed: anything Audrie cannot fully substantiate is never reported as `verified`. Every determinate outcome — `no_record` included — returns `200` with a `verdict`. A hash Audrie holds no record of is information, not a failed request. `mode` is `partial` on every response. Read the field rather than hardcoding the value. ## One hash, several records You do not pick the record. One hash can legitimately have several records — a re-signing, or several parties authenticating the same document — so the response returns every anchored match, ordered by anchor time, earliest first. The timeline is the answer. `verdict` asserts that some valid anchored authentication exists, not that a particular party made it. Read each match's own `status`, `signerStanding` and `signerHint` before attributing a document to anyone. ## Signer standing is live `signerStanding` is recomputed at request time. A certificate issued earlier carries a frozen snapshot; this endpoint does not. The two can legitimately disagree, and the live value is the current answer. ## Errors A `400` here means `originalDocHash` is not `sha256:` followed by 64 lowercase hex characters, `reference` is longer than 128 characters or contains a control character, or the body is not a JSON object. `error.details` names the field.