<!-- markdown mirror of https://mintid.net/en/sdk/bip-0001-verifier-service-contract — generated at build time -->

> The freeze of the verifier-service OpenAPI contract at v1: three operations, a closed reason-code vocabulary, and the invariants the freeze locks in for every client in every language.

index — 12 documents

1.  [overviewsdk/00](/en/sdk)
2.  [getting startedsdk/01](/en/sdk/getting-started)
3.  [python sdksdk/02](/en/sdk/python)
4.  [service modesdk/03](/en/sdk/service-mode)
5.  [typescript clientsdk/04](/en/sdk/typescript-client)
6.  [mcp serversdk/mcp](/en/sdk/mcp-server)
7.  [conformancesdk/05](/en/sdk/conformance)
8.  [reason codessdk/06](/en/sdk/reason-codes)
9.  [adr-0001 · kyc trust modeladr/0001](/en/sdk/adr-0001-kyc-trust-model)
10.  [adr-0002 · packagingadr/0002](/en/sdk/adr-0002-packaging)
11.  [adr-0003 · multi-languageadr/0003](/en/sdk/adr-0003-multilanguage)
12.  [bip-0001 · contract freezebip/0001](/en/sdk/bip-0001-verifier-service-contract)
     *   [what is frozen](#frozen)
     *   [why freeze now](#why)
     *   [locked invariants](#invariants)
     *   [post-freeze changelog](#changelog)

SDK docs · bip/0001

# bIP-0001 — Verifier service contract v1

The freeze of the verifier-service OpenAPI contract at v1: three operations, a closed reason-code vocabulary, and the invariants the freeze locks in for every client in every language.

## What is being frozen

_Status: **Accepted** (2026-07-21) — contract v1 frozen at 1.0.0 · standards-track · card MINT-171 · spec refs R14, R18, R26, §14.4_

The OpenAPI document [`verifier-service.v1.yaml`](https://mintid.net/openapi/verifier-service.v1.yaml) at contract version **1.0.0**: three operations (`getBuildInfo`, `createChallenge`, `validatePresentation`), their schemas, and the closed `ReasonCode` vocabulary — the library's `REASON_*` constants plus the error-carried codes, byte-identical.

Freezing means: any change to decision semantics or the reason vocabulary is a **major** contract version (the ADR-0002 semver policy applied at the contract level); additive, non-semantic surface is **minor**. The TypeScript and PHP transport-only clients build against the frozen contract.

## Why freeze now

ADR-0003 makes this contract the load-bearing artifact of the whole multi-language strategy: it is the boundary that guarantees no client ever carries cryptography or policy. The nine acceptance conditions, the 10-second constant and the retention schema sit _behind_ the contract and are deliberately unexpressible in it: no lifetime parameter, no skip flags, no per-request height-lag override.

A contract test enforces route-for-route and code-for-code agreement between the YAML and the running service, so the frozen document is checked against reality on every CI run.

## Invariants the freeze locks in

*   **One decision path:** `validatePresentation` responses are the library's `PresentationDecision` verbatim; HTTP 400 exists only where no session identity can exist — nothing parseable means no retention record.
*   **Closed reason vocabulary** shared with the conformance vectors; any change is major and flows to every language at once.
*   **Challenge identity** (verifier id, exact origin, request key) is deployment configuration bound to on-chain registrations — never caller input.
*   **`build-info` exposes exactly the release pins** — enough for a client to verify what it talks to, never secrets.

## Post-freeze changelog

Version

Date

Change

`1.0.0`

2026-07-21

Contract frozen (this record).

`1.1.0`

2026-07-21

Additive minor: `BuildInfo` gains required `conformance_suite_version`. No decision-semantics or reason-code change.

The freeze is what lets every client — in any language — treat the service surface as a stable fact: the conformance suite, the reason-code page and the service-mode guide in these docs all build on it.

[previous← adr-0003 · multi-language](/en/sdk/adr-0003-multilanguage)

---
Source: https://mintid.net/en/sdk/bip-0001-verifier-service-contract · bIP-0001 — Verifier service contract v1 — MintID verifier SDK docs
