OpenAPI

DiligenceID publishes two canonical specifications, one per API plane. Both are generated from the running application — the implementation is authoritative and these files are its published form.

File Plane Base path Versioning
management.json Management /management ?api-version=2026-08-30
v1.0.json Product /v1.0 In the path

What each one contains

Management configures DiligenceID resources: organisations, issuers, credential configurations and verification policies. Every operation requires a supported api-version.

Product performs runtime transactions: issuing credentials, reading status, revoking, running verifications, verification sessions and issuance transactions.

Neither document describes the compatibility routes. Management operations remain reachable on /v1.0 and /v1 for existing clients, and the Product API remains reachable on /v1, but those are aliases of a canonical operation rather than contracts of their own — publishing them would double every operation in the specification, in generated reference documentation and in generated SDKs.

Neither document describes the internal /api/* administrative surface, the BFF routes, or protocol endpoints. Protocol endpoints (/.well-known/*, OID4VCI, OID4VP, status lists) are governed by the standards that define them and are documented separately.

Fetching them from a running instance

curl -sS "$DILIGENCE_BASE_URL/swagger/management/swagger.json" -o management.json
curl -sS "$DILIGENCE_BASE_URL/swagger/public-v1/swagger.json" -o v1.0.json

Interactive documentation is at $DILIGENCE_BASE_URL/swagger.

Regenerating the committed files

The files in this directory are checked against the running API by OpenApiSnapshotTests. That test fails when the API and the committed specification disagree, which is what stops a contract change reaching callers without anyone reviewing it.

After an intentional contract change:

dotnet test --filter "FullyQualifiedName~OpenApiSnapshotTests" -e DILIGENCEID_UPDATE_OPENAPI_SNAPSHOTS=1

Then review the diff. A specification changing is not automatically wrong; it changing unnoticed is.

Both files are written with sorted keys and consistent indentation so a diff shows contract changes rather than key-ordering noise from the generator.

Operation IDs are contract

Every operation has a stable Resource_Action identifier — Issuers_Create, Credentials_Issue, VerificationPolicies_Suspend. Generated SDK method names come from these, so changing one is a breaking change rather than a rename. A contract test enforces presence, uniqueness and the naming convention.

Generating a client

npx @openapitools/openapi-generator-cli generate \
  -i v1.0.json -g typescript-fetch -o ./diligenceid-product-client

A generated client handles serialisation. It does not handle retries, idempotency keys or webhook signature verification — see idempotency and webhooks.

Officially supported SDKs are planned and not yet available. There is no sdk/ directory in this repository yet.

Versioning

Product is versioned in the path. /v1.0 is canonical; /v1 is a supported compatibility alias. Additive changes are made in place; a breaking change requires a new version with an announced deprecation.

Management is date-versioned by query parameter. 2026-08-30 is the only supported version today. A request without api-version is rejected with MissingApiVersionParameter; one naming a version this deployment does not serve is rejected with UnsupportedApiVersionValue — deliberately distinct, because the two need different fixes.

Write clients that ignore unrecognised response fields.

Edit this page on GitHub