Skip to main content

FPSF-CPD-001 — Canonical Payment Definition

Document Metadata

FieldValue
Spec IDFPSF-CPD-001
TitleCanonical Payment Definition
Version1.0.0
StatusDraft
Date2026-03-25
AuthorAdalton Reis — reis@fabricpaymentstandards.org
OrganizationFabric Payment Standards Foundation
Contactspecs@fabricpaymentstandards.org>
LicenseApache-2.0

Abstract

This document defines a minimal, neutral, and implementation-agnostic conceptual model of a Payment and a Digital Payment, including their essential properties, lifecycle states, and interaction interfaces.

The purpose of this specification is not to introduce new payment mechanisms, nor to regulate existing systems, but to formalize the shared abstraction already present across global payment practices. By making implicit structures explicit, it establishes a common language and reference model that institutions, networks, and systems can adopt without altering their internal operations.

This document serves as a foundational layer upon which further specifications, interoperability models, and reference implementations may be developed.


1. Scope

This specification:

  • Defines the concept of a Payment independent of medium, infrastructure, or jurisdiction
  • Defines a Digital Payment as a specialization of Payment
  • Establishes a minimal set of entities, properties, and lifecycle states
  • Describes interfaces that reflect operational patterns observed in existing systems

This specification does not:

  • Define settlement mechanisms
  • Define regulatory or compliance requirements
  • Mandate specific technologies or cryptographic methods
  • Replace existing financial standards or network rules

2. Normative Language

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in RFC 2119.


3. Definitions

3.1 Payment

A Payment is:

A structured act by which a payer causes the transfer of value to a payee, resulting in a change of entitlement recognized by one or more systems of record.

Key characteristics:

  • Involves at least two parties: payer and payee
  • Expresses value — an amount denominated in a defined asset
  • Produces a state transition: a change in ownership or entitlement
  • Is recognized by a system capable of recording or validating the change

3.2 Digital Payment

A Digital Payment is:

A Payment in which the expression of intent, authorization, transmission, and confirmation are performed through digital representations and processed by computational systems.

Additional characteristics:

  • Uses digital identifiers for participants
  • Uses machine-verifiable authorization (e.g., cryptographic signatures, institutional credentials)
  • Is processed through electronic communication channels
  • Produces machine-readable state transitions

4. Core Entities

4.1 Participant

An entity capable of initiating or receiving a Payment.

Participant {
id: Identifier
roles: Set<Role> // e.g., payer, payee, intermediary
}

4.2 Value

The economic unit being transferred.

Value {
amount: Numeric
asset: AssetType // e.g., currency code, tokenized asset identifier
}

4.3 Payment Object

The canonical representation of a Payment.

Payment {
id: PaymentIdentifier

payer: Participant
payee: Participant

value: Value

intent: IntentDescriptor
authorization: AuthorizationProof

state: PaymentState

context: ExecutionContext // optional
}

4.4 Intent Descriptor

Describes the purpose and conditions of the Payment.

IntentDescriptor {
reference: String // optional
conditions: Set<Condition> // optional
}

4.5 Authorization Proof

Evidence that the payer has approved the Payment. Implementations MUST bind the proof to the payer, the value, and the payee.

AuthorizationProof {
method: AuthorizationMethod
data: Opaque
}

Non-exhaustive examples of authorization methods:

  • Cryptographic signature (e.g., Ed25519, ECDSA)
  • Multi-party approval
  • Institutional authorization (e.g., bank mandate)

4.6 Execution Context (Optional)

Describes the environment in which the Payment is processed.

ExecutionContext {
network: Identifier // optional
rail: Identifier // optional
settlementModel: SettlementType // optional
}

5. Payment Lifecycle

A Payment progresses through a finite, ordered set of states:

enum PaymentState {
CREATED // Payment object instantiated
AUTHORIZED // Payer approval established
IN_FLIGHT // Submitted to processing system
SETTLED // Value transfer finalized
FAILED // Irrecoverable failure
CANCELLED // Explicitly revoked before settlement
}

5.1 State Transition Constraints

Permitted transitions:

CREATED    → AUTHORIZED
AUTHORIZED → IN_FLIGHT
IN_FLIGHT → SETTLED
IN_FLIGHT → FAILED
AUTHORIZED → CANCELLED

All transitions are:

  • Monotonic: no reversal of state is permitted
  • Externally observable: current state MUST be queryable by authorized parties

5.2 Terminal States

SETTLED, FAILED, and CANCELLED are terminal states. No further transitions are permitted once a Payment reaches one of these states.


6. Interfaces

The following interfaces represent operational patterns common across payment systems. They are expressed abstractly and do not prescribe transport, protocol, or encoding.

6.1 Payment Initiation

initiatePayment(input: PaymentDraft) -> Payment
  • Constructs a Payment object from a draft
  • Assigns a unique identifier
  • Sets initial state: CREATED

6.2 Authorization

authorizePayment(paymentId, authorizationProof) -> Payment
  • Attaches the authorization proof to the Payment
  • Validates the proof against the payer, value, and payee
  • Transitions state to AUTHORIZED

6.3 Submission

submitPayment(paymentId, context) -> Payment
  • Submits the Payment to an execution environment
  • Transitions state to IN_FLIGHT

6.4 Settlement

settlePayment(paymentId) -> Payment
  • Finalizes the value transfer
  • Transitions state to SETTLED

6.5 Status Query

getPaymentStatus(paymentId) -> PaymentState
  • Returns the current state of the Payment
  • MUST be consistent with the authoritative system of record

6.6 Cancellation

cancelPayment(paymentId) -> Payment
  • Valid only before settlement (i.e., from AUTHORIZED state)
  • Transitions state to CANCELLED

7. Invariants

All compliant implementations MUST preserve the following invariants:

1. Uniqueness — Each Payment has a globally or contextually unique identifier.

2. Integrity — Payment data MUST NOT be altered after authorization without invalidating the Payment.

3. Authorization Binding — The AuthorizationProof MUST be bound to the payer, the value, and the payee. A proof valid for one combination MUST NOT be reusable for a different combination.

4. Deterministic State — At any moment, a Payment has exactly one state.

5. FinalitySETTLED, FAILED, and CANCELLED are terminal states. No transition out of these states is permitted.


8. Extensibility

This specification is designed to be extended through:

  • Additional lifecycle states (e.g., REVERSED, REFUNDED, PENDING_REVIEW)
  • Richer intent descriptors
  • Advanced authorization schemes (e.g., threshold cryptography, multi-signature)
  • Interoperability layers between heterogeneous systems

Extensions MUST NOT contradict the invariants defined in Section 7.


9. Non-Goals

This specification intentionally excludes:

  • Identity and KYC standards
  • Compliance mechanisms (AML, sanctions screening)
  • Liquidity or credit models
  • Consensus or validation mechanisms
  • Wire formats, messaging schemas (e.g., JSON schemas, XML)
  • Specific network or settlement rail requirements

10. Conformance

An implementation is considered FPSF-CPD-001 conformant if:

  • It represents Payments according to the model defined in Section 4
  • It enforces the lifecycle constraints defined in Section 5
  • It exposes operationally equivalent interfaces to those defined in Section 6
  • It preserves all invariants defined in Section 7

Normative References

ReferenceDescription
RFC 2119Key words for use in RFCs to Indicate Requirement Levels

FPSF-CPD-001 v1.0.0 · Draft · Fabric Payment Standards Foundation · Apache-2.0