What are customers?
A customer is a program-scoped wrapper that links an entity to a specific OpenFX program. While entities hold identity information (legal name, address, documents), customers hold program context: KYB status, compliance capabilities, and the business relationship with OpenFX. This separation is intentional:- Entities answer: Who is this person or business?
- Customers answer: What can they do on this program?
In the MVP API, customers are created through
orchestrated onboarding. The onboarding
endpoint creates both the entity and the customer in a single call. Use the endpoints
below to retrieve and list customers after they have been created.
Why Entity-Customer separation?
The Entity-Customer separation is one of the most important architectural decisions in the platform:- Entity = legal and compliance anchor. Holds: legal name, address, tax ID, documents, ownership relationships (beneficial owners, directors, authorized signers).
- Customer = program-scoped wrapper. Holds: KYB status, capabilities, program enrollment, metadata.
Customer lifecycle
Customers progress through a review-oriented lifecycle before they can transact.| Status | Description |
|---|---|
draft | Created but not yet submitted for review. |
submitted | Submitted for KYB review. |
under_review | KYB review is in progress. This is an asynchronous process. |
active | Approved and operational. The customer can now create accounts, payments, and conversions. |
rejected | KYB review failed. Terminal state. |
suspended | Temporarily disabled due to a compliance action. Can be reactivated. |
closed | Permanently deactivated. Terminal state. |
KYB status tracking
ThekybStatus field on the customer tracks the Know Your Business verification process
separately from the customer status. This provides more granular insight into where the
review stands.
| KYB Status | Description |
|---|---|
not_started | KYB review has not been initiated. Customer is in draft. |
pending | KYB review is in progress. Waiting for a decision. |
approved | KYB review passed. Customer is eligible for active status. |
rejected | KYB review failed. Customer transitions to rejected. |
requires_info | Additional information or documents are needed. |
KYB requirement: A customer must reach
kybStatus: approved before deposit instructions
are shown and the customer can begin transacting. This gate ensures compliance review is
completed before any money movement is possible.When KYB status changes to
requires_info, OpenFX needs more documentation or data
from you. Monitor the customer.kyb_status_changed webhook for updates.Progressive capabilities
Capabilities are granted to customers progressively as their compliance profile matures. Thecapabilities array on the customer resource tells you exactly what the customer
is allowed to do.
| Capability | What it unlocks |
|---|---|
accounts | Create and manage fiat and crypto accounts |
payments | Create outbound payments across all rails |
fx | Access the FX engine for quotes and conversions |
crypto | Use crypto-specific rails and blockchain addresses |
Handling KYB webhooks
KYB review is asynchronous. Use webhooks to react to status changes rather than polling.Relevant webhook events
| Event | When it fires |
|---|---|
customer.status_changed | Customer status transitions (e.g., submitted to active, or under_review to rejected) |
customer.kyb_status_changed | KYB status transitions (e.g., pending to approved, or pending to requires_info) |
Example webhook payload
The
previousAttributes field on status change events lets you determine exactly what
changed without needing to track the previous state yourself. Compare snapshot (current)
with previousAttributes (previous) to identify the transition.Handling different outcomes
Listing customers
Next steps
Once your customer reachesactive status, you can begin transacting:
Accounts & Balances
Open fiat and crypto accounts, manage balances, and set up account numbers
for receiving deposits.
Orchestrated Onboarding
Learn about the onboarding endpoint that creates entities and customers.
API reference
GET /customers— List customers with filtering and paginationGET /customers/{customerId}— Get a single customer