GitHub

API reference

API reference

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

The reference implementation's HTTP surface. Any conforming operator exposes the same shapes at its own base URL, which you read from its discovery document.

Base URLs

Fig. 01 — Base URLs
ACanonicalhttps://<operator>/api/path/v1/…
BExplicit trainhttps://<operator>/api/path/genesis/v1/…

Both mount the same routers. Use the second when a proxy between you and the operator strips unfamiliar headers and you need the train pinned in the path.

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 you did not pin. In production, a defect waiting for a date
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 /resolver/{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
POST/finderFINDER
POST/subjectsSubjects
POST/identifiersSubjects
POST/subjects/{id}/withdrawSubjects
POST GET/addressesAddresses
POST/addresses/{id}/rotateAddresses
POST/addresses/{id}/revokeAddresses
PUT/addresses/{id}/standing-intentAddresses
POST GET/requestsRequests
POST/requests/{ref}/revoke · /paidRequests
POST GET/checkout/sessionsCheckout
POST GET/receiptsReceipts
POST/receipts/verifyReceipts

Conventions

Amounts are decimal strings: "5000", "12.50". Never floats — binary floats cannot represent 0.1, and a payment system that rounds loses money in a direction someone eventually notices.

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