Build a treasury product for corporate customers that need to hold working capital across multiple currencies, sweep funds between related entities, and execute FX conversions on demand. Balances are centralized in stablecoin in each entity’s wallet, and converted to local fiat only when needed.Documentation Index
Fetch the complete documentation index at: https://docs.lumx.io/llms.txt
Use this file to discover all available pages before exploring further.
Step 1: Generate your API key
Head over to dashboard.lumx.io. Once logged in, generate a new API key and store it securely. See Authentication for details.Step 2: Onboard the corporate with multi-currency accounts
Create a business customer for the entity that will hold the treasury. Provision the fiat accounts they need so incoming deposits are converted to stablecoin and consolidated in the customer’s wallet automatically. See Coverage for supported currencies and rails.Request
POST /customers/{id}/tos) and complete KYB. See Business verification for the full onboarding flow.
Step 3: Fund the corporate’s wallet
Once each account isACTIVE, create an on-ramp transaction for every expected deposit, passing the exact amount the corporate plans to fund. The response returns rail-specific payment details in state.payment. Share them with the corporate’s treasury team; when the deposit matches the amount, Lumx converts the fiat to stablecoin and consolidates it in the customer’s wallet.
Request
Each deposit must be matched to an on-ramp transaction created in advance with the exact amount.
onramp.success webhook to know the moment the wallet is credited and balances are ready to be moved or converted. For the full deposit flow by rail, see Global accounts.
Step 4: Onboard subsidiaries and counterparty destinations
How you model the corporate group depends on whether each entity needs its own wallet. Multi-entity (each subsidiary holds its own balance): onboard each subsidiary as its own business customer. Each gets a dedicated wallet, and you can move funds between them with internal transfers. Single-entity (parent holds all balances): register each related external destination under the parent customer with the appropriateholder.relationship so transfers out are correctly categorized.
| Relationship | Use when |
|---|---|
SELF | The destination belongs to the same legal entity as the customer |
HOLDING_COMPANY | The destination belongs to the parent of the customer |
SUBSIDIARY_COMPANY | The destination belongs to a subsidiary of the customer |
taxId format varies by jurisdiction; see Tax IDs by country for the expected value per country.
Register a subsidiary's destination under the parent
Step 5: Move funds between entities
When subsidiaries are onboarded as separate customers, move stablecoin between their wallets without going through fiat. Transfers settle in seconds and don’t incur FX cost.Request
Response
Step 6: Convert balances to fiat on demand
When the corporate needs to settle in fiat (paying a supplier, repatriating profits, funding a subsidiary’s local account), create an off-ramp transaction debiting the wallet. Use the purpose code that matches the move:| Scenario | Purpose |
|---|---|
| Sweep to the entity’s own external account | PERSONAL_ACCOUNT (requires a destination with SELF holder relationship) |
| Loan or capital injection between related entities | LOAN |
| Cross-border supplier or invoice payment | TRADE_TRANSACTIONS |
| Tax remittance | TAX |
| Bill payment | BILLS |
Request
Step 7: Track and reconcile
Subscribe toofframp.success, offramp.failed, transfer.success, and account.active webhooks to keep balances, transfers, and conversion status in sync inside your product. See Webhooks.
Related resources
Global accounts
Provision multi-currency virtual accounts.
Exchange Rates
Lock FX rates for predictable conversions.
Destinations
Holder relationships for inter-company moves.
Transactions
Transfer, off-ramp lifecycle and purpose codes.