Overview

The OPEN rail is OpenFX’s internal payment network for moving funds between entities on the platform. OPEN payments are instant (the response may return status: completed immediately), fee-free (no transaction fees), and same-currency only (no FX conversion — use the FX engine first if you need to convert). This rail is unique to OpenFX — it does not use any external banking or blockchain network. Funds move between accounts within the platform’s internal ledger.
OPEN payments settle immediately. Unlike ACH (days), wire (hours), or even crypto (minutes), OPEN payments can complete within the same API request. The response may return with status: completed directly.

Use cases

ScenarioDescription
Intercompany transfersMove funds between different entities within your organization on OpenFX
Marketplace settlementsSettle funds from a platform escrow account to seller accounts
Platform disbursementsDistribute funds to multiple entities managed on the platform
Internal treasuryMove funds between accounts for treasury management purposes

Two ways to specify the recipient

OPEN payments support two approaches for identifying the recipient:

Option 1: Via a pre-created payment method

Create an open payment method on the counterparty with an openId (the recipient’s customer ID or account ID), then reference it in the payment:
# First, create the open payment method
curl -X POST https://sandbox.api.openfx.com/v1/counterparties/cpt_01953e1a5f4b7040/payment-methods \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "type": "open",
    "openId": "acc_01953e1a5f4b7080",
    "label": "Subsidiary USD account"
  }'

# Then, create the payment
curl -X POST https://sandbox.api.openfx.com/v1/payments/open \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "sourceAccountId": "acc_01953e1a5f4b7002",
    "counterpartyId": "cpt_01953e1a5f4b7040",
    "paymentMethodId": "pm_01953e1a5f4b7370",
    "amount": {
      "currency": "USD", "value": "10000000"
    },
    "reference": "Q1 intercompany settlement"
  }'

Option 2: Via inline destination

For ad-hoc payments where you do not want to pre-create a payment method, specify the destination inline using a customer ID or account ID:
curl -X POST https://sandbox.api.openfx.com/v1/payments/open \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "X-Timestamp: $TIMESTAMP" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "sourceAccountId": "acc_01953e1a5f4b7002",
    "destination": {
      "type": "account_id",
      "value": "acc_01953e1a5f4b7080"
    },
    "amount": {
      "currency": "USD", "value": "2500000"
    },
    "reference": "Marketplace payout - Order #ORD-8842"
  }'
The destination object accepts two types:
TypeDescriptionExample value
customer_idRecipient identified by their OpenFX customer IDcus_01953e1a5f4b7000
account_idRecipient identified by their OpenFX account IDacc_01953e1a5f4b7080
open_idRecipient identified by their OPEN ID (a human-readable address)@acme.treasury.usd
OPEN IDs use the format @org.handle.currency (e.g., @acme.treasury.usd). They provide a human-readable alternative to opaque resource IDs for identifying recipients on the OPEN rail.
Use inline destination for one-off or ad-hoc transfers. Use pre-created payment methods when you regularly send to the same recipient — it avoids repeating the destination details and enables payment method validation.

Request fields (via payment method)

FieldRequiredDescription
sourceAccountIdYesThe funded account to debit
paymentMethodIdYesThe open payment method
counterpartyIdNoThe counterparty
amountYesMoney object with currency and amount
referenceNoReference visible to both sender and recipient
metadataNoUp to 50 key-value pairs

Request fields (via inline destination)

FieldRequiredDescription
sourceAccountIdYesThe funded account to debit
destinationYesOPENDestination with type and value
counterpartyIdNoThe counterparty (optional)
amountYesMoney object with currency and amount
referenceNoReference visible to both sender and recipient
metadataNoUp to 50 key-value pairs
Specify either paymentMethodId or destination, not both. The API will reject requests that include both fields.

Constraints

ConstraintDetails
Same-currency onlySource and destination must hold the same currency. No automatic FX conversion.
Both parties on OpenFXThe recipient must be an active entity on the OpenFX platform.
Fee-freeNo transaction fees for OPEN payments.
InstantPayments complete synchronously — the response may already show status: completed.
If you need to send a different currency than the source account holds, first convert using the FX engine (POST /fx/conversions), then initiate the OPEN payment in the converted currency.

Payment lifecycle

OPEN payments have the simplest lifecycle of any rail:
created -> completed
        -> failed
StatusDescription
createdPayment accepted (may be transient — can complete in the same request)
completedFunds moved. Instant and final.
failedPayment could not be processed (e.g., insufficient funds, inactive recipient)
OPEN payments are designed for speed. In most cases, the API response will already contain status: completed — the payment settles within the same request-response cycle.

OPEN rail vs. internal transfers

OpenFX has two mechanisms for moving money between accounts:
FeatureOPEN (POST /payments/open)Transfers (POST /transfers)
ScopeBetween different entities/customersBetween accounts owned by the same customer
Use caseIntercompany, marketplace, platformTreasury management, account rebalancing
Counterparty requiredYes (or inline destination)No (both accounts belong to you)
Compliance screeningYesMinimal (same-owner transfer)
Use OPEN when moving funds between different parties on the platform. Use transfers when moving funds between your own accounts.

API reference