An official developer portal of the Government of the Republic of Zambia · Test environmentVerify a certificate
Pamodzi Developer HubBuild, integrate and learn the e-Services framework

GSB e-Services federation API

Version 1.1.0 30 operations Download the OpenAPI file

Contract v1 between the national hub and the MDA nodes (backlog FED-02). Every request and answer is signed (detached JWS, ES256 - docs/federation/README.md "Message signing"); transport is mTLS. Bodies are canonical JSON validated against the JSON Schemas in schemas/ (unknown fields are refused). Writes need an Idempotency-Key; a repeat with the same key returns the first answer. Versioned under /fed/v1; a sunset is announced with the Deprecation and Sunset headers. Revision 2 (1.1.0, FED-03): catalogue.put answers catalogue-ack.json; catalogue.list takes full, ids and limit; the service manifest gains its signature, the passport detail and tombstones (schemas/service-manifest.json $comment) - additive, hubs first.

Base address: https://fed.{instance}.gsb.gov.zm

Other

POST /fed/v1/ping

Signed liveness and trust check between two instances

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Idempotency-Key requiredheaderstring

Required on writes, and inside the signature (idk). A repeat with the same key returns the first answer (replayed: true, Idempotent-Replayed: true).

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json ping-response.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
409

IDEMPOTENCY_IN_PROGRESS: the first request with this key is still running (Retry-After)

application/json error.json
422

IDEMPOTENCY_KEY_REUSED: the key was used with another body

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

PUT /fed/v1/catalogue/services/{serviceId}

A node pushes a signed service manifest (publish, unpublish, withdraw)

The node pushes the manifest of a service it owns whenever its catalogue entry changes (publish, edit, unpublish, withdraw). The hub checks the request signature, then the manifest: its owner is the calling node (and, when the registry lists the node's ministries, the manifest's ministry is one of them), its contentHash matches, its own signature (signature, typ gsb-manifest+jws) verifies against the node's keys, and its version is not older than the mirrored one. The apply is idempotent on (serviceId, version, contentHash).

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Idempotency-Key requiredheaderstring

Required on writes, and inside the signature (idk). A repeat with the same key returns the first answer (replayed: true, Idempotent-Replayed: true).

serviceId requiredpathstring

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature): applied, or unchanged when the hub already mirrors exactly this version.

application/json catalogue-ack.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION, FED_PATH_MISMATCH (the path's serviceId is not the manifest's), FED_HASH_MISMATCH (contentHash does not match the content)

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH, FED_MANIFEST_UNSIGNED / FED_MANIFEST_SIGNATURE (the manifest's own signature is missing, not the sender's or does not verify)

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope; FED_NOT_OWNER: the manifest names another owner node, or a ministry the node does not serve, or a service another node owns

application/json error.json
409

IDEMPOTENCY_IN_PROGRESS: the first request with this key is still running (Retry-After); FED_STALE_VERSION: the hub mirrors a newer version; FED_VERSION_CONFLICT: the hub mirrors this version with other content; FED_SERVICE_ID_LOCAL: the hub hosts a service with this id itself

application/json error.json
422

IDEMPOTENCY_KEY_REUSED: the key was used with another body

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/catalogue

The hub pulls catalogue changes since a cursor (heals missed pushes)

Pull reconciliation (FED-03): the hub reads the node's catalogue ledger - every service the node has offered nationally, with its catalogue version, content hash and state - ordered by change time. With since only entries changed after that cursor; with full=1 each item carries its signed manifest (manifestJws, attached compact JWS); with ids just those services. The node refreshes its ledger from its live services first, so drift made outside the publishing flow is found too. Answers are signed.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

sincequerystring

The cursor of the previous page (pull reconciliation).

fullquerystring: 0, 1

1: include each item's signed manifest (manifestJws).

idsquerystring

Comma-separated service ids (at most 100): just these entries, whatever their change time.

limitquerystring

Items per page (1-500, default 100; 25 with full=1).

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json catalogue-page.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

POST /fed/v1/submissions

The hub relays a citizen application to the owner node

FED-05 (docs/federation/README.md section 11). The hub relays a citizen's application made on the national portal. Idempotency-Key = the hub submission id; the citizen is the X-GSB-Citizen-Assertion (FED-04, single use). The node re-validates against its live form, pulls the files from the presigned URLs on its own HUB_URL and checks their SHA-256, makes the case for the shadow applicant and answers with its case number. A node never queues.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Idempotency-Key requiredheaderstring

Required on writes, and inside the signature (idk). A repeat with the same key returns the first answer (replayed: true, Idempotent-Replayed: true).

X-GSB-Citizen-Assertionheaderstring

FED-04: the hub's short-lived (120 s) ES256 citizen assertion (token-exchange profile, pairwise subject, aud = the node). The node decides with its own PDP.

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature): the node made the case - 201 when made now, 200 with replayed when this hub submission had already made it (a repeat after a lost answer: one case).

application/json submission-ack.json
201

Signed answer: the node made the case (FED-05).

application/json submission-ack.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope; the citizen assertion refused: FED_ASSURANCE_TOO_LOW, FED_PRINCIPAL_NOT_APPLICANT, FED_PRINCIPAL_INACTIVE

application/json error.json
404

FED_SERVICE_UNKNOWN: not an active service of this node

application/json error.json
409

IDEMPOTENCY_IN_PROGRESS: the first request with this key is still running (Retry-After); DUPLICATE_APPLICATION (EF-49), FED_SERVICE_CLOSED (intake window): the citizen must act

application/json error.json
422

IDEMPOTENCY_KEY_REUSED: the key was used with another body; FED_VALIDATION / FED_FORM_CHANGED (the node's live form - errors per field; FED_FORM_CHANGED when the form changed since the hub's version), FED_FILE_REFUSED / FED_FILE_CHECKSUM (a file: type, size, antivirus, or not the bytes announced - errors with document:<label>)

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json
503

FED_FILE_UNAVAILABLE: the files could not be fetched from the hub's presigned URLs (the hub tries again)

application/json error.json

GET /fed/v1/cases/{caseNumber}/status

Case status only, for the hub helpdesk

FED-04 (built): the hub helpdesk's scoped lookup. The node answers the status only - no form answers, documents or personal data - and requires the helpdesk operator's reason and pseudonymous id (both inside the signed path, htu), which it writes to its own audit (federation.helpdesk.caseStatus) under the same X-GSB-Federation-Id the hub audits (federation.helpdesk.lookup).

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

caseNumber requiredpathstring
reason requiredquerystring

Why the helpdesk looks this case up (10-300 characters, e.g. the call reference). Audited on both sides.

operator requiredquerystring

The hub helpdesk user's id (pseudonymous to the node).

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json case-status.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION, FED_REASON_REQUIRED (reason or operator missing)

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

FED_NOT_FOUND: no case with that number on this node

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/cases/{caseId}/applicant-view

The citizen's live case detail (with a citizen assertion)

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

X-GSB-Citizen-Assertionheaderstring

FED-04: the hub's short-lived (120 s) ES256 citizen assertion (token-exchange profile, pairwise subject, aud = the node). The node decides with its own PDP.

caseId requiredpathstring

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json applicant-view.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

POST /fed/v1/cases/{caseId}/actions/{action}

A citizen action proxied to the node (with a citizen assertion)

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Idempotency-Key requiredheaderstring

Required on writes, and inside the signature (idk). A repeat with the same key returns the first answer (replayed: true, Idempotent-Replayed: true).

X-GSB-Citizen-Assertionheaderstring

FED-04: the hub's short-lived (120 s) ES256 citizen assertion (token-exchange profile, pairwise subject, aud = the node). The node decides with its own PDP.

caseId requiredpathstring
action requiredpathstring

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature); the body is defined by the lane that builds the operation.

400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
409

IDEMPOTENCY_IN_PROGRESS: the first request with this key is still running (Retry-After)

application/json error.json
422

IDEMPOTENCY_KEY_REUSED: the key was used with another body

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

A node-signed short-lived download URL for an issued document

FED-08. Needs X-GSB-Citizen-Assertion; documentId is a case document id or an issued permit id. The url is node-signed and short-lived (FED_DOCUMENT_LINK_TTL_S, 120 s); the hub streams it to the citizen (or redirects) and keeps no copy.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

X-GSB-Citizen-Assertionheaderstring

FED-04: the hub's short-lived (120 s) ES256 citizen assertion (token-exchange profile, pairwise subject, aud = the node). The node decides with its own PDP.

documentId requiredpathstring

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json document-link.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

DOCUMENT_NOT_FOUND: no such document, not released to the applicant, or not the asserted citizen's (one answer for all). 401 FED_ASSERTION_* when the citizen assertion is missing or refused.

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/payments/{invoiceNumber}

An invoice as the owner node holds it (read only)

FED-07. Needs X-GSB-Citizen-Assertion: the node answers only for an invoice on a case of the asserted citizen (its own PDP). Read only - no hub component can mark a node invoice paid. checkoutUrl (unpaid, not expired) is a node-signed, short-lived pay link bound to the pairwise subject: opened on the node it redirects to the ZamPay checkout of this node's own merchant.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

X-GSB-Citizen-Assertionheaderstring

FED-04: the hub's short-lived (120 s) ES256 citizen assertion (token-exchange profile, pairwise subject, aud = the node). The node decides with its own PDP.

invoiceNumber requiredpathstring

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json payment-status.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

PAYMENT_NOT_FOUND: no such invoice, or not the asserted citizen's (one answer for both). 401 FED_ASSERTION_* when the citizen assertion is missing or refused.

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/verify/receipts/{ref}

Public receipt verification, routed by the node key in the receipt reference

FED-07. No citizen assertion: the hub relays a public check of a receipt reference that carries this node's key. The hub applies its per-address limit (RATE_LIMIT_RECEIPT_VERIFY_MAX) before relaying.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

ref requiredpathstring
sig requiredquerystring

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json receipt-verification.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

RECEIPT_NOT_FOUND: unknown reference, wrong signature, not paid - one answer for all (no oracle)

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/verify/documents/{code}

Public permit / licence verification by the verification code, routed by the node key in the code

FED-08. No citizen assertion. Only the verification code (the QR) opens the record (PP-32); the hub applies its per-address limit (VERIFY_CODE_MAX) before relaying.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

code requiredpathstring

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

NO_MATCH: unknown or malformed code - one answer (PP-32)

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/verify/document-hashes

Is a file sealed on this node one it issued? By its SHA-256 values only (the hub validated the file)

SIGN-22 (lane S4 sigverify). The hub validated an uploaded PDF sealed with this node's key against the national trust list and asks, by hashes only, for the issued record: the file never leaves the hub. Unknown hashes: 404 NO_MATCH. The answer never carries holder data.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

hashes requiredquerystring

SHA-256 values in hex, comma-separated, at most 12: the whole file and each signed revision.

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json document-hash-match.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

NO_MATCH: unknown or malformed code - one answer (PP-32)

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/verify/trust-list

The instance's trust list: a node's own seal / TSA / OCSP / CA certificates; the hub's national list

SIGN-19 / SIGN-22 (lane S4 sigverify). Pulled hourly (job verification-maintenance): the hub from every active node, a node from the hub. The receiver keeps only entries that chain to its own configured roots; a root is never taken from a peer.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json trust-list.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

NO_MATCH: unknown or malformed code - one answer (PP-32)

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/pay-points/{token}

What a pay-at-point code this node printed sells: label, place, service, charge, amount (ngwee), who is paid - no ids, no personal data (lane paypoint)

Authentication: federationSignature

Parameters

NameInTypeDescription
token requiredpathstring

The code's token, without the node key (22 characters of base64url for the facilities module).

X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json pay-point.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION, SESSION_INVALID

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold payments:point (only the hub does, HUB_SCOPES).

application/json error.json
404

POINT_UNAVAILABLE: unknown, switched off or renewed code, a module that is off, a service the council does not offer - one answer for all.

application/json error.json

POST /fed/v1/pay-points/{token}/orders

The ticket invoice for one payer session (the hub's keyed hash of the browser session), priced from the node's approved tariff and raised on the node's merchant; the same invoice again while it is open (lane paypoint)

Authentication: federationSignature

Parameters

NameInTypeDescription
token requiredpathstring

The code's token, without the node key (22 characters of base64url for the facilities module).

X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Idempotency-Key requiredheaderstring

Required on writes, and inside the signature (idk). A repeat with the same key returns the first answer (replayed: true, Idempotent-Replayed: true).

Request body (required)

Responses

StatusDescriptionBody
200

The session's open ticket invoice, handed out again (reused: true).

application/json pay-point-order.json
201

A new ticket invoice.

application/json pay-point-order.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION, SESSION_INVALID

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold payments:point (only the hub does, HUB_SCOPES).

application/json error.json
404

POINT_UNAVAILABLE

application/json error.json
503

INVOICE_FAILED: the node's gateway could not raise the invoice.

application/json error.json

POST /fed/v1/pay-points/{token}/ticket

One payer session's latest ticket at the code: open / paid / expired (the node asks its own gateway through its finaliser first) and, once paid, the receipt number and the receipt check (ref carries the node key) (lane paypoint)

Authentication: federationSignature

Parameters

NameInTypeDescription
token requiredpathstring

The code's token, without the node key (22 characters of base64url for the facilities module).

X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json pay-point-ticket.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION, SESSION_INVALID

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold payments:point (only the hub does, HUB_SCOPES).

application/json error.json
404

POINT_UNAVAILABLE, or NO_TICKET: this session has no ticket at the code.

application/json error.json

GET /fed/v1/events

The events of one application after a sequence number, from the node's log (the hub's gap repair)

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

record requiredquerystring

The application: its case number on the node.

afterqueryinteger

Return the events with a higher sequence number (default 0: all).

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json event-page.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

POST /fed/v1/events

A CloudEvent from a node (case.*, payment.*, document.issued, action.required, service.*) or from the hub (session.revoked)

The receiver (lib/federation/events.js) checks the envelope and data against the contract, that source is the signing peer, and the direction of the type; a type this instance has no handler for answers 501 FED_NOT_IMPLEMENTED (the sender keeps it and retries). FED-04 handles gsb.fed.v1.session.revoked (hub -> node only): the node ends every session it derived from the hub's assertions for that pairwise subject. Answer: { received, id, type, applied }.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Idempotency-Key requiredheaderstring

Required on writes, and inside the signature (idk). A repeat with the same key returns the first answer (replayed: true, Idempotent-Replayed: true).

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature); the body is defined by the lane that builds the operation.

400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
409

IDEMPOTENCY_IN_PROGRESS: the first request with this key is still running (Retry-After)

application/json error.json
422

IDEMPOTENCY_KEY_REUSED: the key was used with another body

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /.well-known/jwks.json

This instance's federation signing keys (public JWKs, ES256)

No authentication.

Responses

StatusDescriptionBody
200

JWKS

application/jwk-set+json object

GET /.well-known/gsb-federation

Who this instance is: contract version, role, NODE_KEY, where its keys and API are

No authentication.

Responses

StatusDescriptionBody
200

Discovery document

application/json object

GET /fed/v1/geo/sources

The public map-search sources of this node: registers approved for the public and module sources (LA8, lane landportal; capability geo-search)

SIGN-22 (lane S4 sigverify). The hub validated an uploaded PDF sealed with this node's key against the national trust list and asks, by hashes only, for the issued record: the file never leaves the hub. Unknown hashes: 404 NO_MATCH. The answer never carries holder data.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json geo-search-sources.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

NO_MATCH: unknown, malformed or not this node's - one answer

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN), or more than VERIFY_FED_LOOKUP_PER_MIN look-ups from this peer in a minute (RATE_LIMITED)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/geo/sources/{source}/search

Search one public map-search source by number (key, survey record, diagram) or by a place on the map (LA8)

SIGN-22 (lane S4 sigverify). The hub validated an uploaded PDF sealed with this node's key against the national trust list and asks, by hashes only, for the issued record: the file never leaves the hub. Unknown hashes: 404 NO_MATCH. The answer never carries holder data.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

source requiredpathstring

The source key of this node (not <key>@<node>: the hub strips its node key).

byquerystring: key, survey-record, diagram

key (default), survey-record or diagram

qquerystring

The number searched for: letters, digits, spaces and / - . (at most 80)

lonquerynumber

A place on the map: longitude (WGS 84); with lat instead of by/q

latquerynumber

Latitude (WGS 84)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json geo-search-results.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

SOURCE_NOT_FOUND: no public source of that key here

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN), or more than VERIFY_FED_LOOKUP_PER_MIN look-ups from this peer in a minute (RATE_LIMITED)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/geo/sources/{source}/features

The outlines of one public map-search source in a map view, simplified for the zoom; nothing below minZoom (LA8)

SIGN-22 (lane S4 sigverify). The hub validated an uploaded PDF sealed with this node's key against the national trust list and asks, by hashes only, for the issued record: the file never leaves the hub. Unknown hashes: 404 NO_MATCH. The answer never carries holder data.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

source requiredpathstring

The source key of this node (not <key>@<node>: the hub strips its node key).

bboxquerystring

minLon,minLat,maxLon,maxLat (WGS 84)

zoomquerystring

The map zoom, 0-22

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json geo-search-features.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

SOURCE_NOT_FOUND: no public source of that key here

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN), or more than VERIFY_FED_LOOKUP_PER_MIN look-ups from this peer in a minute (RATE_LIMITED)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/verify/lookup/{number}

A document of this node's register by its verification code or, for the hub's authenticated partner door, its issued number (the national verification hub, LP-INT-06)

SIGN-22 (lane S4 sigverify). The hub validated an uploaded PDF sealed with this node's key against the national trust list and asks, by hashes only, for the issued record: the file never leaves the hub. Unknown hashes: 404 NO_MATCH. The answer never carries holder data.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

number requiredpathstring

The verification code (by=code) or the issued number or code (by=number), URL-encoded; at most 80 characters.

byquerystring: code, number

code (default) or number. The hub asks by number only for an authenticated partner client (permits:verify).

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json verify-lookup.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

NO_MATCH: unknown, malformed or not this node's - one answer

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN), or more than VERIFY_FED_LOOKUP_PER_MIN look-ups from this peer in a minute (RATE_LIMITED)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/registers

The registers this instance holds that the asking instance may read: its public registers and those it granted the asker under a data-sharing agreement (NDP-15)

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

NO_MATCH: unknown, malformed or not this node's - one answer

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN), or more than VERIFY_FED_LOOKUP_PER_MIN look-ups from this peer in a minute (RATE_LIMITED)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

POST /fed/v1/registers/lookup

An officer of the asking instance looks up a register held here: a search (key / label / context) or one record, projected with the home instance's grant for the asking node; both instances audit; nothing is cached (NDP-15)

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature): results for a search, entry for a key.

application/json register-lookup.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

REGISTER_FORBIDDEN: this instance has not granted the register to the asking node.

application/json error.json
404

NOT_FOUND: no such register here, or no record with the key.

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN), or more than VERIFY_FED_LOOKUP_PER_MIN look-ups from this peer in a minute (RATE_LIMITED)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

GET /fed/v1/citizen/accounts

The billing accounts the asserted citizen holds or pays on this node (read only)

WP2, contract citizen-accounts.v1. Needs X-GSB-Citizen-Assertion: the node lists only the accounts the asserted citizen holds or pays (a linked account, or a party identifier equal to an NRC the hub vouches for as verified - its own PDP). Numbers, status words, amounts (ngwee) and labels only. The hub caches the answer for at most 60 seconds and never stores it.

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

X-GSB-Citizen-Assertionheaderstring

FED-04: the hub's short-lived (120 s) ES256 citizen assertion (token-exchange profile, pairwise subject, aud = the node). The node decides with its own PDP.

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json citizen-accounts.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
404

Not offered by this node (the hub reads it as "no accounts"). 401 FED_ASSERTION_* when the citizen assertion is missing or refused.

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

POST /fed/v1/citizen/accounts/{source}/{ref}/orders

An order on one of the asserted citizen's accounts: priced and invoiced by the node on its own merchant

WP2, contract citizen-accounts.v1. Needs X-GSB-Citizen-Assertion and an Idempotency-Key (a repeat answers the first invoice). The node prices the order from its own ledger, raises the invoice on its own ZamPay merchant and returns a node-signed pay link; ZamPay's callback lands on the node, which allocates the money (oldest bill first).

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Idempotency-Key requiredheaderstring

Required on writes, and inside the signature (idk). A repeat with the same key returns the first answer (replayed: true, Idempotent-Replayed: true).

X-GSB-Citizen-Assertionheaderstring

FED-04: the hub's short-lived (120 s) ES256 citizen assertion (token-exchange profile, pairwise subject, aud = the node). The node decides with its own PDP.

source requiredpathstring
ref requiredpathstring

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope; the citizen assertion refused: FED_ASSURANCE_TOO_LOW, FED_PRINCIPAL_NOT_APPLICANT, FED_PRINCIPAL_INACTIVE

application/json error.json
404

ACCOUNT_NOT_FOUND: no such account, or not the asserted citizen's (one answer for both).

application/json error.json
409

PRICE_MISMATCH (with the node's total), NOTHING_DUE, MODULE_DISABLED, NO_PAYMENT_SERVICE, FED_IDEMPOTENCY_IN_PROGRESS

application/json error.json
422

IDEMPOTENCY_KEY_REUSED: the key was used with another body; FED_VALIDATION / FED_FORM_CHANGED (the node's live form - errors per field; FED_FORM_CHANGED when the form changed since the hub's version), FED_FILE_REFUSED / FED_FILE_CHECKSUM (a file: type, size, antivirus, or not the bytes announced - errors with document:<label>)

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json
503

FED_FILE_UNAVAILABLE: the files could not be fetched from the hub's presigned URLs (the hub tries again)

application/json error.json

GET /fed/v1/status/summary

How the node is doing, for the hub's Ministries overview: aggregate counts (active services, applications received today, outstanding incidents) and readiness only - never a name or a case (lane hubhome)

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature).

application/json status-summary.json
400

FED_INVALID (unknown field, wrong type - errors lists the fields), FED_IDEMPOTENCY_KEY_REQUIRED, FED_HEADER_MISMATCH, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE: the calling peer does not hold this operation's scope

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance yet

application/json error.json

POST /fed/v1/staff/sso/redeem

A node redeems the single-use sign-on code a member of staff brought from the hub, for a signed staff assertion (lane staffsso; README section 20). The hub answers only the node the code was made for, once, within its life

Authentication: federationSignature

Parameters

NameInTypeDescription
X-GSB-Federation-Idheaderstring

Correlation id of the journey, written to both instances' audit trails; inside the signature (fid).

traceparentheaderstring

W3C trace context, carried end to end.

Request body (required)

Responses

StatusDescriptionBody
200

Signed answer (X-GSB-Fed-Signature) carrying the staff assertion (typ gsb-staff+jwt) for the asking node.

application/json staff-sso-assertion.json
400

FED_INVALID (unknown field, wrong type), SSO_CODE_USED (already redeemed, by any node), SSO_CODE_EXPIRED, SSO_CODE_UNKNOWN, FED_VERSION

application/json error.json
401

FED_UNSIGNED, FED_MALFORMED, FED_UNKNOWN_ISSUER, FED_UNKNOWN_KEY, FED_BAD_SIGNATURE, FED_WRONG_AUDIENCE, FED_EXPIRED, FED_NOT_YET_VALID, FED_WRONG_TARGET, FED_REPLAY, FED_MTLS_REQUIRED, FED_MTLS_MISMATCH

application/json error.json
403

FED_SCOPE (the node's registry entry does not hold sso:redeem), SSO_CODE_WRONG_NODE (the code was made for another node; it is spent all the same), SSO_ACCOUNT_UNAVAILABLE (the hub account is no longer active staff, or was signed out everywhere since)

application/json error.json
404

STAFF_SSO_OFF: staff sign-on is not switched on at the hub (STAFF_SSO); FED_UNKNOWN_ROUTE from an older hub

application/json error.json
429

Too many requests from this address (FED_RATE_LIMIT_PER_MIN)

application/json error.json
501

FED_NOT_IMPLEMENTED: part of contract v1, not offered by this instance

application/json error.json