_Docs/
Get StartedModulesPlatformDeployCookbookChangelogReference
_Stack
_Modules
  • Ledger
  • Numscript
  • Connectivity
    • Capabilities
    • Operations
    • Accounts
    • Payments
    • Orders
    • Conversions
    • Payment Initiation
    • Account Pools
    • Payment Service Users
    • Connectors
      • Generic Connector
        • Getting Started
        • How it Works
      • PSP Connectors
        • Adyen
        • Atlar
        • Banking Circle
        • Column
        • Currencycloud
        • Increase
        • Mangopay
        • Modulr
        • Moneycorp
        • Qonto
        • Stripe
        • Wise
        • Banking BridgeEE
        • RoutableEE
      • Exchange Connectors
        • Coinbase PrimeEE
        • FireblocksEE
        • BitstampEE
      • Open Banking
        • Getting Started with Open Banking
        • Plaid
        • Tink
        • Powens
      • Build a connector
  • WalletsEE
  • FlowsEE
  • ReconciliationEE
  1. Modules
  2. Connectivity
  3. Payments
Connectivity

Payments

A payment in Connectivity is a single-asset balance movement on a single account leg, surfaced by a connector after the upstream provider returns it. Deposits, withdrawals, internal transfers, settlement events, refunds, fee payments — they all land here. Exchange-flavoured flows that move two assets atomically (stablecoin redemption, FX swaps) live on Conversions, and trading orders against an order book live on Orders.

Payment model#

FieldDescription
idPlatform-assigned UUID, derived from (connectorID, reference, type).
referenceThe provider's payment ID. Unique within the connector.
connectorID, providerThe connector this payment was fetched from.
createdAtProvider-side creation date.
typePAY-IN, PAYOUT, TRANSFER, or OTHER.
statusPENDING, SUCCEEDED, FAILED, CANCELLED, EXPIRED, OTHER, UNKNOWN.
amount, initialAmountInteger amounts at the asset's precision. Initial = first-seen value before adjustments; amount = current.
assetUMN asset code (USD/2, EUR/2, BTC/8).
schemePayment rail — SEPA, ACH, CARD_VISA, OTHER (crypto rails always collapse to OTHER).
sourceAccountID, destinationAccountIDResolved Connectivity account IDs when the upstream payload identifies wallets, otherwise null. External addresses (e.g. crypto withdrawals) surface in metadata instead.
metadataConnector-specific keys under com.<provider>.spec/ or com.formance.connectors.<provider>..
adjustmentsAppend-only list of every observed state change — the audit trail.
rawFull upstream payload, available on the detail endpoint (not inlined in the list response for payload-size reasons).

Listing payments#

Formance Console#

Open the Connectivity tab in the sidebar. The Payments view lists every payment synced from every installed connector with filters for connector, status, type, scheme, asset, and date range. Click a row for the full payment detail, including the adjustment history and the upstream raw payload.

API#

curl -X GET $FORMANCE_API_URL/api/payments/v3/payments
GET/api/payments/v3/payments

v3ListPayments accepts a $match query body for server-side filtering — significantly more efficient than fetching the full set and filtering client-side, especially against large connectors:

Bash
curl -s "$STACK/api/payments/v3/payments?pageSize=15" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"$match": {"connectorID": "'$CONNECTOR_ID'", "status": "SUCCEEDED"}}' | jq

A single payment by id:

curl -X GET $FORMANCE_API_URL/api/payments/v3/payments/<PAYMENT_ID>
GET/api/payments/v3/payments/<PAYMENT_ID>

The detail endpoint inlines adjustments and raw, neither of which appear in the list response.

Querying by reference or metadata#

v3GetPayment only accepts the platform-assigned id. To find a payment by the provider's reference, or by a com.<provider>.spec/ metadata key, use the list endpoint with a $match body:

By reference#

JSON
{
  "$match": {
    "reference": "tx_4f3a8e9d1c"
  }
}

By metadata key#

JSON
{
  "$match": {
    "metadata[com.routable.spec/payment_initiation_reference]": "payout-acmecorp-20260506-172725"
  }
}

Querying with $match is significantly more efficient than fetching all payments and filtering client-side. It reduces data transfer, reduces server load, and avoids 504 timeouts on large connectors.

Payment types#

The type field collapses the provider's lifecycle vocabulary into four buckets:

TypeMeaning
PAY-INFunds arriving at an internal account (deposits, customer payments, settlement credits, rewards).
PAYOUTFunds leaving an internal account to an external destination (bank withdrawals, vendor payouts).
TRANSFERFunds moving between two internal accounts at the same provider (sweep, sub-account routing).
OTHERProvider-specific event that doesn't fit the above (chain-level events on Coinbase Prime, staking transitions, fees).

The per-connector reference pages (Stripe, Mangopay, Coinbase Prime, …) document the mapping from each provider's upstream event vocabulary to the four-type model.

Status mapping#

The status field collapses each provider's status enum into a uniform Connectivity vocabulary:

  • PENDING — created, accepted, in-flight at the provider.
  • SUCCEEDED — terminal success.
  • FAILED — terminal failure.
  • CANCELLED — user-cancelled or merchant-voided.
  • EXPIRED — provider expired the payment before it settled.
  • OTHER — provider-specific non-terminal status the connector chose not to collapse.
  • UNKNOWN — provider returned a status the connector doesn't recognise.

The exact upstream-status → Connectivity-status mapping is documented on each connector's reference page. Coinbase Prime's table is in Coinbase Prime → Payments; the same pattern applies to every other connector.

Adjustments#

Every observed state change lands on the payment's adjustment list, including the new status, the timestamp, and (when the connector kept it) the raw upstream payload that triggered the change. Use it as the audit trail for back-office UIs and reconciliation runs.

Adjustments aren't inlined in v3ListPayments — fetch a payment by id with v3GetPayment to see them.

Payment reference enrichment#

Some connectors enrich payment metadata with PSP-specific reference fields they extract from upstream payloads — end-to-end IDs, mandate IDs, clearing-system references, creditor reference info, and similar. These land under the com.formance.connectors.<provider>. metadata namespace. The Banking Bridge connector applies this pattern most extensively. See Operations → Connector reliability for the cross-cutting behaviour.

AccountsOrders
On This Page
  • Payment model
  • Listing payments
  • Formance Console
  • API
  • Querying by reference or metadata
  • By reference
  • By metadata key
  • Payment types
  • Status mapping
  • Adjustments
  • Payment reference enrichment