Sandbox environment. This guide uses the sandbox at
sandbox.api.openfx.com.
In sandbox, KYB review is auto-approved and test balances are available for new
accounts. See Authentication for details on
setting up your credentials.Prerequisites
Before you begin, you need:- An OpenFX sandbox API key — Obtain from the OpenFX Dashboard.
This is your Bearer token for the
Authorizationheader. - An Ed25519 key pair — Used for request signing. See Authentication for how to generate one and register the public key.
- The sandbox base URL —
https://sandbox.api.openfx.com/v1
Step 1: Onboard a customer
The orchestrated onboarding endpoint creates both an entity (identity record) and a customer (program enrollment) in a single API call. WithautoSubmit: true, it also
submits the customer for KYB review automatically.
Step 2: Wait for KYB approval
In sandbox, KYB review is auto-approved. Poll the customer endpoint to confirm the customer is active before proceeding.The customer is now
active with kybStatus: approved. You can create accounts and
send payments.Step 3: Create an account
Create a USD fiat account for the customer. This is ademand_deposit account — a
standard bank account that can hold a USD balance and receive deposits.
Step 4: Fund the account
In production, funds arrive via real bank transfers or crypto deposits to the account’s virtual account number. In sandbox, new accounts are provisioned with a test balance that you can use immediately.Step 5: Create a counterparty and payment method
A counterparty is an external party you send money to. A payment method holds the rail-specific delivery details (bank account, crypto address, etc.). First, create the counterparty:The
accountNumber field is write-only. Subsequent GET responses will return
accountNumberLast4 (e.g., "9012") instead of the full account number.Step 6: Create a payment
Everything is in place. Create a USD ACH payment to the counterparty. This example uses the unifiedPOST /payments endpoint. You could also use the rail-specific
POST /payments/ach endpoint for a simpler request schema.
Your first payment is created. The initial status is
created. In sandbox, the
payment will progress through the lifecycle automatically.What you just built
Here is a summary of the resources created in this quickstart:| Step | Resource | ID | What it represents |
|---|---|---|---|
| 1 | Onboarding | onb_01953e1a5f4b7800 | Orchestrated onboarding for Horizon Payments Ltd |
| 1 | Entity | ent_01953e1a5f4b7100 | Business identity for Horizon Payments Ltd |
| 1 | Customer | cus_01953e1a5f4b7000 | Program enrollment with KYB tracking |
| 2 | KYB | — | Customer approved for platform operations |
| 3 | Account | acc_01953e1a5f4b7002 | USD demand deposit account |
| 5 | Counterparty | cpt_01953e1a5f4b7004 | Acme Supplies Inc (payment recipient) |
| 5 | Payment Method | pm_01953e1a5f4b7300 | US bank checking account for ACH |
| 6 | Payment | pmt_01953e1a5f4b7005 | $1,500.00 ACH payment to Acme |
Next steps
Authentication
Implement full Ed25519 request signing for production use.
Payment lifecycle
Understand payment statuses and terminal states.
Webhooks
Set up webhook subscriptions to receive real-time payment status updates.
Cross-currency payments
Send payments with automatic FX conversion using quotes or at-market execution.
Payment rails
Learn about all 5 payment rails and their rail-specific options.