Enable Multi-Currency Feature
This guide walks you through enabling multi-currency capabilities for your entity, allowing you to hold balances in multiple currencies and make cross-border payments seamlessly.
What You'll Learn
- How to enable the multi-currency feature for your entity
- How to generate authentication tokens for user onboarding
- How to direct users to complete the KYC process
- How to monitor feature activation status via webhooks
- How to handle action required scenarios
Prerequisites
Before enabling multi-currency capabilities:
- ✅ Company and entity already created (see Setup Your Organization)
- ✅ Entity must be located in the United States (
country_alpha2: "US") - ✅ A valid JWT token (see Authentication)
- ✅ Company ID and Entity ID from your organization setup
US Entities Only
Currently, multi-currency features are only available for entities located in the United States.
Understanding the Enablement Process
The multi-currency enablement process involves several steps and actors. Here's how the flow works:
Feature Status Flow
Step 1: Enable Multi-Currency Feature
First, enable the multi-currency feature for your entity.
curl -X POST "https://api.treasurypath.com/api/v1/companies/{company_id}/entities/{entity_id}/features" \
-H "Authorization: Bearer {your_jwt_token}" \
-H "Content-Type: application/json" \
-d '{
"feature_identifier": "multi_currency_account"
}'
Replace:
{company_id}- Your company ID{entity_id}- Your entity ID{your_jwt_token}- Your JWT authentication token
Success Response
{
"data": {
"feature_identifier": "multi_currency_account",
"feature_name": "Multi-Currency Account",
"application_id": "Z2lkOi8vYXBwL0FwcGxpY2F0aW9uLzEyMw",
"status": "CREATED"
}
}
Save the Application ID
Copy and save the application_id from the data object - you'll need it to generate onboarding tokens in the next step. This ID remains consistent across all webhooks and API responses for this feature.
What This Means
- Status: CREATED - The feature has been enabled but requires user onboarding
- Application ID - Unique identifier for this feature enablement (one application per entity per feature)
- Next Step - Generate an onboarding token for your user to complete KYC
Step 2: Generate Onboarding Token
Create a secure authentication token that allows your end user to complete the KYC onboarding process.
curl -X POST "https://api.treasurypath.com/api/v1/companies/{company_id}/entities/{entity_id}/hosted_page_tokens" \
-H "Authorization: Bearer {your_jwt_token}" \
-H "Content-Type: application/json" \
-d '{
"feature_identifier": "multi_currency_account",
"purpose": "onboarding",
"application_id": "Z2lkOi8vYXBwL0FwcGxpY2F0aW9uLzEyMw"
}'
Replace application_id with the ID you received in Step 1.
Success Response
{
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"purpose": "onboarding",
"feature_identifier": "multi_currency_account",
"application_id": "Z2lkOi8vYXBwL0FwcGxpY2F0aW9uLzEyMw"
}
}
Token Expiration
The onboarding token is valid for 2 hours. If it expires before the user completes onboarding, you can generate a new token using the same request.
Step 3: Direct User to Complete Onboarding
Now direct your end user to TreasuryPath's hosted onboarding page with the generated token.
Construct the Onboarding URL
Environment URLs:
| Environment | Hosted URL |
|---|---|
| Sandbox | https://app.tpathdemo.com/hosted |
| Production | https://app.treasurypath.com/hosted |
Example URLs
Sandbox:
Production:
What Happens During Onboarding
The end user will be guided through:
- Identity Verification - KYC (Know Your Customer) requirements
- Business Information - Additional company/entity details
- Compliance Documentation - Required regulatory documents
Once the user submits all required information, the feature status automatically changes to SUBMITTED and you'll receive a webhook notification.
Step 4: Monitor Feature Status via Webhooks
TreasuryPath sends webhook notifications when the feature status changes. Set up webhooks to receive real-time updates without polling the API.
Webhook Event
Event Name: MultiCurrencyAccountEvents::StatusChangedEvent
This webhook is triggered whenever the multi-currency account feature changes status.
Example Webhook Payload
{
"event": "MultiCurrencyAccountEvents::StatusChangedEvent",
"data": {
"feature_identifier": "multi_currency_account",
"feature_name": "Multi-Currency Account",
"application_id": "Z2lkOi8vYXBwL0FwcGxpY2F0aW9uLzEyMw",
"status": "SUBMITTED",
"entity_id": "Z2lkOi8vd2FsbGV0LWFwcC9FbnRpdHkvMQ",
"company_id": "Z2lkOi8vd2FsbGV0LWFwcC9Db21wYW55LzE"
},
"timestamp": "2025-11-17T10:45:00.000Z"
}
Status Changes You'll Receive
| Status | Description | Action Required |
|---|---|---|
CREATED |
Feature enabled via API | Generate onboarding token |
SUBMITTED |
User completed onboarding | Wait for review |
ACTIVE |
Feature fully operational | Start using multi-currency |
ACTION_REQUIRED |
Additional information needed | Generate pending action token |
Setting Up Webhooks
See the Webhooks Guide for detailed instructions on configuring webhook endpoints and verifying signatures.
Alternative: Polling the API
If webhooks aren't set up, you can poll the features endpoint:
curl -X GET "https://api.treasurypath.com/api/v1/companies/{company_id}/entities/{entity_id}/features" \
-H "Authorization: Bearer {your_jwt_token}"
Step 5: Handle Action Required (If Needed)
If additional information is required during the review process, the status will change to ACTION_REQUIRED and you'll receive a webhook notification.
Generate Pending Action Token
curl -X POST "https://api.treasurypath.com/api/v1/companies/{company_id}/entities/{entity_id}/hosted_page_tokens" \
-H "Authorization: Bearer {your_jwt_token}" \
-H "Content-Type: application/json" \
-d '{
"feature_identifier": "multi_currency_account",
"purpose": "pending_action",
"application_id": "Z2lkOi8vYXBwL0FwcGxpY2F0aW9uLzEyMw"
}'
Token Purpose Must Match Status
The purpose field must match the current application status:
- Use "onboarding" when status is CREATED
- Use "pending_action" when status is ACTION_REQUIRED
Attempting to use the wrong purpose will result in a validation error.
Success Response
{
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"purpose": "pending_action",
"feature_identifier": "multi_currency_account",
"application_id": "Z2lkOi8vYXBwL0FwcGxpY2F0aW9uLzEyMw"
}
}
Direct User to Resolve Actions
Use the same hosted page URL format with the new token:
The hosted page will automatically display the specific actions the user needs to complete, such as:
- Uploading additional documents
- Providing clarifications
- Updating information
After the user provides the required information, the status returns to SUBMITTED for review.
Step 6: Feature Activation
Once the application is approved, the status changes to ACTIVE and you'll receive a webhook notification. At this point:
- ✅ Multi-currency feature is fully operational
- ✅ Managed bank accounts are automatically created for your entity
- ✅ You can start processing cross-currency payments
Common Errors
Feature Already Enabled
{
"errors": [
{
"field": "feature_identifier",
"message": "Feature already enabled for this entity"
}
]
}
Solution: The feature is already enabled. Check its current status using the GET features endpoint. Each entity can have only one application per feature.
Entity Not in United States
{
"errors": [
{
"field": "entity",
"message": "Multi-currency account is only available for US entities"
}
]
}
Solution: Ensure your entity's country_alpha2 is set to "US". Non-US entities cannot enable multi-currency at this time.
Invalid Application ID
Solution: Verify you're using the correct application_id from the feature enablement response. The application ID must match the feature you're generating a token for.
Wrong Token Purpose for Status
Solution: Use the correct purpose for the current status:
- Status CREATED → Use purpose "onboarding"
- Status ACTION_REQUIRED → Use purpose "pending_action"
Entity Not Found
{
"errors": [
{
"field": "entity_id",
"message": "Entity not found or not accessible in this company"
}
]
}
Solution: Verify you're using the correct entity_id and that it belongs to the specified company_id. Ensure the entity exists and you have access to it.
What's Next?
Once your multi-currency feature is ACTIVE, you can:
- Connect Funding Accounts - Link external bank accounts for payments
- Add Recipients - Set up international recipients
- Make Payments - Create cross-currency payments
- View Managed Accounts - Access automatically created multi-currency accounts
Best Practices
Token Management
- ✅ Generate tokens just-in-time before directing users
- ✅ Don't store tokens long-term (they expire in 2 hours)
- ✅ Generate new tokens if users need to revisit the onboarding flow
- ✅ Track the
application_idconsistently across all operations
Status Monitoring
- ✅ Set up webhooks for real-time status updates (recommended)
- ✅ Don't poll the API excessively if using polling
- ✅ Handle
ACTION_REQUIREDstatus promptly to avoid delays - ✅ Store the
application_idfor tracking purposes
User Experience
- ✅ Clearly communicate onboarding requirements to users upfront
- ✅ Provide support contact information during the onboarding process
- ✅ Set realistic expectations for review timeline (typically 1-3 business days)
- ✅ Inform users when additional action is required
API Reference
For complete API documentation, see:
- Multi-Currency Enablement API Reference - Full endpoint documentation
- Entity Feature Data Model - Detailed property descriptions and lifecycle
- Webhooks Reference - Webhook event details and security
Need Help?
- Check the FAQ for common questions
- Contact support at support@treasurypath.com