GitHub

API reference

API reference

The PATH HTTP surface — conventions, base URLs, headers, and every endpoint.

The reference implementation's HTTP surface. The shapes are the protocol. The paths, except the three below, are the operator's, published as absolute URLs in its discovery document.

Fixed by the protocol: GET /.well-known/path-configuration, GET /.well-known/path-keys, and GET /path/{reference}.

Reference implementation

This repository mounts the routes in the table at /api/path/v1. The same routers are mounted at /api/path/genesis/v1 when the train is pinned in the path, for a proxy that strips unfamiliar headers.

Fig. 01 — This implementation
AHeader pinhttps://<host>/api/path/v1/…
BTrain in the pathhttps://<host>/api/path/genesis/v1/…

A client of another operator does not assume either prefix. It calls endpoints from discovery.

Headers

Sent

HeaderRequiredPurpose
Path-VersionRecommendedPin the dated API version. Unpinned means latest
Path-Protocol-VersionOptionalThe protocol version you were built against
Path-Idempotency-KeyOn creationReplaying with the same key returns the original
Path-Key-IdAuthenticated callsYour credential's key id
Path-TimestampAuthenticated callsRFC 3339, inside the freshness window
Path-SignatureAuthenticated callsSee Authentication

Returned

HeaderMeaning
Path-VersionThe version that served this response
Path-Version-Pinnedfalse means the client did not pin a version
Path-Protocol-VersionThe protocol version of any signed object in the body
Path-Request-IdQuote this in support conversations

Which routes need a credential

Routes
PublicDiscovery, keys, GET /requests/{ref}, GET /receipts/{ref}, GET /instructions/{ref}, GET /resolver/{key}, GET /commitments/{key}, POST /receipts/verify
Member credentialEverything else

The public set is not an afterthought. A wallet with no relationship to an operator has to be able to read a payment request, verify a receipt and resolve a destination it was given — otherwise "any conforming wallet can pay this" is false.

Endpoints

MethodPath
GET/.well-known/path-configurationDiscovery
GET/.well-known/path-keysDiscovery
POST/sonar/lookupSONAR
POST/sonar/lookup/batchSONAR
POST/sonar/confirmSONAR
GET/resolver/{key}RESOLVER
GET/commitments/{key}RESOLVER
POST/finderFINDER
POST/subjectsSubjects
POST/identifiersSubjects
POST/subjects/{id}/withdrawSubjects
POST GET/attestationsSubjects
POST GET/ownership-bindingsSubjects
POST GET/addressesAddresses
POST/addresses/{id}/rotate · /revokeAddresses
PUT/addresses/{id}/standing-intentAddresses
POST GET/instructionsInstructions
POST GET/requestsRequests
POST/requests/{ref}/revoke · /paidRequests
POST GET/checkout/sessionsCheckout
POST/checkout/sessions/{ref}/attempt · /complete · /revokeCheckout
POST GET/connect/connectionsConnections
POST GET/connect/delegationsConnections
POST GET/receiptsReceipts
POST/receipts/verifyReceipts

Conventions

Amounts are Amount objects: { "value": "5000", "asset_type": "fiat", "asset_code": "USD" }. value is a decimal string. Never a float — binary floats cannot represent 0.1.

Times are RFC 3339 in UTC.

Errors all share one envelope.

Unknown fields are preserved. Reserved fields round-trip untouched. Dropping unknown fields is the most common way to break forward compatibility, and it fails silently.

On this page