What Are Payment Methods?

A payment method is a sub-resource of a counterparty that holds the rail-specific details needed to deliver a payment. Each payment method represents one delivery channel — a US bank account, an international bank account, a crypto wallet address, etc. Counterparties are identity shells and payment methods are the delivery instructions.
Counterparty: "Globex Corporation" (cpt_01953e1a5f4b7004)
  |-- pm_...300  us_bank         -- Chase checking, USD
  |-- pm_...301  international_bank -- Deutsche Bank IBAN, EUR
  +-- pm_...303  crypto_wallet   -- Ethereum USDC wallet
All payment method IDs use the pm_ prefix followed by a UUIDv7 identifier (e.g., pm_01953e1a5f4b7300). When creating a payment, you reference both the counterpartyId and the specific paymentMethodId.

Payment Method Types

The type field is a discriminator that determines which fields are required and which rail the payment method supports.
TypeRailRequired FieldsDescription
us_bankACH, FedwireroutingNumber, accountNumber, bankAccountTypeUS domestic bank account via ABA routing
international_bankSWIFTiban (+ optional bic, bankName)International bank account for cross-border wire transfers
sepa_bankSEPAiban (+ optional bic)EU SEPA bank account for EUR payments
fps_bankFaster PaymentssortCode, accountNumberUK bank account for GBP Faster Payments
crypto_walletCryptochain, walletAddressBlockchain wallet address for on-chain payments
openOPENopenIdInstant, fee-free transfers to other OpenFX platform entities
All types require type and currency in addition to the type-specific fields listed above.
Create payment methods before attempting to send payments to a counterparty. A payment requires both a counterpartyId and a paymentMethodId — you cannot send funds without a delivery method on file.

Payment Method Lifecycle

Payment methods progress through a simple lifecycle:
StatusDescription
pendingPayment method has been created and is awaiting activation.
activePayment method is verified and available for payments.
rejectedValidation failed. The payment method cannot be used.

Creating Payment Methods

US Bank Account

For ACH and Fedwire payments to US domestic bank accounts.
curl -X POST https://sandbox.api.openfx.com/v1/counterparties/cpt_01953e1a5f4b7004/payment-methods \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "us_bank",
    "currency": "USD",
    "label": "Globex USD Operating",
    "routingNumber": "021000021",
    "accountNumber": "123456789012",
    "bankAccountType": "checking",
    "accountHolderName": "Globex Corporation"
  }'
The accountNumber field is write-only. It is never returned in API responses. After creation, responses include only accountNumberLast4 (e.g., "9012") for identification purposes.

International Bank (SWIFT)

For cross-border wire transfers via the SWIFT network. The iban field is required; bic is optional if derivable from the IBAN.
curl -X POST https://sandbox.api.openfx.com/v1/counterparties/cpt_01953e1a5f4b7004/payment-methods \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "international_bank",
    "currency": "EUR",
    "label": "Globex EUR SWIFT",
    "iban": "DE89370400440532013000",
    "bic": "COBADEFFXXX",
    "bankName": "Deutsche Bank",
    "accountHolderName": "Globex Corporation"
  }'

Crypto Wallet

For on-chain payments to blockchain wallet addresses. Supported chains: ethereum, solana, tron, base, polygon, ink, sui.
curl -X POST https://sandbox.api.openfx.com/v1/counterparties/cpt_01953e1a5f4b7004/payment-methods \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "crypto_wallet",
    "currency": "USD",
    "label": "Globex USDC Wallet",
    "chain": "ethereum",
    "walletAddress": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"
  }'

OPEN (Internal Platform Payments)

For instant, fee-free transfers to other entities on the OpenFX platform. The openId field identifies the recipient by their OpenFX customer ID (cus_) or account ID (acc_).
curl -X POST https://sandbox.api.openfx.com/v1/counterparties/cpt_01953e1a5f4b7004/payment-methods \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "open",
    "currency": "USD",
    "label": "Globex Platform Account",
    "openId": "acc_01953e1a5f4b7050"
  }'
OPEN payments are different from internal transfers (POST /transfers). Transfers move funds between your own accounts. OPEN payments send funds to another entity on the platform.

Listing Payment Methods

Retrieve all payment methods for a counterparty with cursor-based pagination.
curl -X GET "https://sandbox.api.openfx.com/v1/counterparties/cpt_01953e1a5f4b7004/payment-methods?limit=20" \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP"

Sensitive Field Handling

Payment method responses mask sensitive data:
FieldBehavior
accountNumberWrite-only. Never returned in responses.
accountNumberLast4Read-only. Last 4 digits returned for identification (e.g., "9012").
walletAddressReturned in full (blockchain addresses are public by nature).
ibanReturned in full.
sortCodeReturned in full.

API Reference