1. Read or change the brand preference
Use the base URLhttps://app.sideshift.app/api/embed. Keep the key on your server;
do not put it in the widget, browser, or mobile app.
BASE_URL to the base URL above. A new integration
returns this shape; rolloutAvailable depends on platform availability:
multiCurrencyEnabled and
enabled are true. If multiCurrencyEnabled is true but enabled is false,
the preference was saved but new conversions are not available yet.
PATCH accepts only a JSON boolean
enabled. Do not send a company ID, account ID,
environment, rollout field, or the string "true". The API key determines the
brand and environment. Repeating the same PATCH is safe. This setting applies to
all managed sub-accounts in that environment, not to other brands or linked
personal accounts. It does not change USD transfers or other Connect settings.
2. Choose an amount and its units
The wallet catalog covers 84 fiat currencies. Crypto, stablecoin, and gold-token wallets are outside this feature. A listed currency does not guarantee that Whop can convert a particular pair or pay a particular bank account. The provider’s quote determines eligibility for the account, amount, method, and country. Amounts are integers in the currency’s minor units. The API retains the*Cents field names for USD compatibility; those names do not mean every
currency has two decimals.
For
quote and convert, amountCents uses the source currency. For
estimate, destinationAmountCents uses the target currency, and the
returned amountCents always uses USD cents. Supported inputs range from 1 to
20,000,000 minor units. Account limits also apply to executed conversions using
a USD valuation. Do not add balances in different currencies together.
3. Estimate the USD needed before funding
This example asks how much USD is needed to convert into about €25 inside a managed sub-account. Replace the account ID with its SideShift ID, not a Whopbiz_* ID.
amountCents is the total USD needed for this conversion, not a shortfall
calculated after subtracting existing USD or foreign-currency balances.
The quoted conversion cost is included in the net output. Funding and withdrawal
fees are separate. Rates can change before funding arrives or conversion executes.
4. Fund the sub-account in USD
Use the existing transfer endpoint. The amount below is only the illustrative estimate above; use the amount returned by your request.5. Read balances and preview conversion
{ "success": true, "data": { ... } }. Data fields:
An enabled wallet receives the full currency catalog, including zero balances.
A brand that has never opted in receives
visible: false and no currency rows;
the existing USD wallet continues to supply its balance. After opt-out, funded
foreign balances remain accessible. Missing provider data is not replaced with
invented zero balances.
Refresh the quote after funding arrives:
/accounts/currencies. The quote returns amountCents, both currency
codes, estimatedReceivedCents, feeBps, and rate. Show the estimate to the user.
It is not a locked quote and does not spend money.
6. Convert after explicit confirmation
POST to the same endpoint:
HTTP200 alone is not proof of completion. A timeout is not proof of failure.
Never make a new conversion key to work around an unknown outcome. The server
retains permanent request identities and stops provider retries after 23 hours.
Changing an amount, account, currency, or other field under the same key is a
conflict. A pending conversion blocks another conversion on that source account.
Funding and conversion are separate: a declined conversion does not reverse a
completed USD transfer.
7. Withdraw from the chosen currency
Use the managed payout widget. When multi-currency is enabled, it lets the creator select a source balance, choose a saved payout method, and review fees and delivery before confirming. The widget’s existing user token is scoped to that creator; it cannot change the brand’s multi-currency preference.- Same currency: a EUR balance paid to an eligible EUR destination stays in EUR. There is no FX leg, but a withdrawal fee can still apply.
- Different currency: the provider quote supplies an exchange rate and an expected destination amount. The UI shows both.
- Unavailable method or quote: do not submit a payout. Let the creator choose another supported method or retry the quote.
Disable multi-currency
Errors and sandbox testing
Errors use{ "success": false, "error": { "code": "...", "message": "..." } }.
Keep the original operation key when the outcome may be unknown.
Use a sandbox key to save the sandbox preference; it never enables live currency
operations. Conversions require actual provider sandbox accounts and available
sandbox funds. Legacy simulated USD transfers do not create those provider
balances. Sandbox currency withdrawals are currently unavailable.
The pilot remains disabled until live settlement and recovery checks are complete.
Public quote success and automated tests do not prove that a bank payout settled.