Skip to main content

FPSF-SS-002 — Reference

Layer: Reference · Audience: developers (daily reference) For normative requirements, see the Formal Specification.


Message Type Index

Client → Gateway Messages

TypeSectionDescription
GET_NONCE§8.1Retrieve current permit nonce for a wallet and token.
GET_FEES§8.2Retrieve fee breakdown (operatorFee, acquiringFee, totalWithFees) for a given token, principal, and acquirerId.
GET_BALANCE§8.3Retrieve current balances for one or more tokens.
GET_HISTORY§8.4Retrieve transfer history for one or more tokens.
SUBMIT_PAYMENT§8.5Submit a signed TransferRequest for processing.
SUBMIT_ACQUIRING§8.6Submit a signed BuyAcquiringPackRequest for processing.
SUBSCRIBE_BALANCE§9.1Register to receive balance update notifications.
SUBSCRIBE_TRANSFERS§9.2Register to receive transfer notifications.
UNSUBSCRIBE§9.3Cancel an active subscription for specified tokens on a channel.

Gateway → Client Messages (Responses)

TypeSectionDescription
NONCE_RESULT§8.1Current permit nonce.
FEES_RESULT§8.2BrokenDownAmount with operatorFee, acquiringFee, totalWithFees.
BALANCE_RESULT§8.3Array of { domainSeparator, balance } objects.
HISTORY_RESULT§8.4Array of TransferRecord objects, paginated.
SUBMIT_PAYMENT_ACK§8.5Acknowledgment with initial ENQUEUING status and echoed payloadId.
SUBMIT_ACQUIRING_ACK§8.6Acknowledgment with initial ENQUEUING status.
SUBSCRIBE_BALANCE_ACK§9.1Confirms subscribed tokens.
SUBSCRIBE_TRANSFERS_ACK§9.2Confirms subscribed tokens.
UNSUBSCRIBE_ACK§9.3Confirms removed tokens.
ERROR§12Error response for any failed request.

Gateway → Client Messages (Push Notifications)

TypeSectionTrigger
BALANCE_UPDATE§9.1Balance changed for a subscribed token.
TRANSFER_NOTIFICATION§9.2New confirmed transfer for a subscribed token. This is the final settlement signal.
SUBMISSION_STATUS§10.2Submission status transition.

Submission Status Values

StatusTerminalDescription
ENQUEUINGNoAccepted by gateway; being passed to broadcast-service.
PENDINGNoReceived by broadcast-service; validation in progress.
BROADCASTINGNoValidation passed; transaction submitted to network.
SUCCESSYesNetwork accepted the transaction. NOT final settlement.
FAILUREYesSubmission failed. See failureCategory and failureReason.

Error Codes

CodeCategoryDescription
MISSING_FIELDSTRUCTURAL_ERRORRequired field absent.
INVALID_FORMATSTRUCTURAL_ERRORField does not conform to expected format.
INVALID_SIGNATUREAUTHENTICATION_ERRORSignature malformed or unverifiable.
ADDRESS_MISMATCHAUTHENTICATION_ERRORRecovered signer ≠ callerAddress.
EXPIRED_DEADLINEAUTHENTICATION_ERRORdeadline is in the past.
UNSUPPORTED_TOKENSEMANTIC_ERRORDomain separator or token address not recognized.
NONCE_MISMATCHSEMANTIC_ERRORSupplied nonce ≠ on-chain nonce.
UNKNOWN_PAYLOAD_IDSEMANTIC_ERRORpayloadId not known to any active session.
ALREADY_SUBMITTEDSEMANTIC_ERRORpayloadId already processed or processing.
WALLET_NOT_FOUNDNOT_FOUNDNo state found for the wallet address.
INITIALISINGSEMANTIC_ERRORWallet state still being collected. Retry shortly.
RATE_LIMIT_EXCEEDEDRATE_LIMITRequest rate exceeded.
INTERNAL_ERRORINTERNAL_ERRORUnexpected gateway-side failure.

Submission Failure Categories

Used in SUBMISSION_STATUS notifications when status: "FAILURE":

CategoryDescription
STRUCTURAL_ERRORSubmission payload failed structural validation.
SEMANTIC_ERRORBusiness rule violated (expired deadline, nonce mismatch, unknown payloadId).
CRYPTOGRAPHIC_ERRORSignature verification failure or signer mismatch.
BROADCAST_ERROROn-chain transaction reverted or could not be submitted.

Glossary

TermDefinition
BrokenDownAmountFee breakdown object: operatorFee, acquiringFee, totalWithFees. All in token units as decimal strings.
Caller AddressThe EVM address identifying the wallet in a gateway message. MUST match the recovered signer.
Domain SeparatorA bytes32 EIP-712 domain separator used as the primary token identifier in the gateway interface.
Idle TimeoutThe configurable duration after which a connection with no inbound activity is closed. Recommended: 5 minutes.
Order ReferenceA bytes16 value created by the merchant for charge tracking. A separate parameter from acquirerId.
Acquirer IDA bytes16 UUID identifying a registered Acquirer. A separate parameter from orderReference.
SubscriptionA per-connection registration for real-time push notifications. Cancelled when the connection closes.
Terminal StateA submission status from which no further transitions occur: SUCCESS or FAILURE.
Transfer NotificationThe definitive signal of final payment settlement. Delivered after transfer-history confirms sufficient block confirmations.
Zero-UUID0x00000000000000000000000000000000. Used as acquirerId when no Acquirer is involved.

FPSF-SS-002 v1.0.0 · Draft · Fabric Payment Standards Foundation · Apache-2.0