Payments, fees & connectors
How money moves on the desk: the ways to pay, the monthly participation fee,
what happens when a payment is confirmed late, scheduled payouts, and how the
operator switches the Stripe and Coinbase Commerce connectors on and off.
The desk is operated by First Autonomous Trade LLC, a Wyoming limited liability company. Machine-readable summary:
/api/v1/payments/methods.
Ways to pay
| Method | Provider | How it works |
|---|---|---|
| Account balance | – | Each order is debited from the trading account it is placed on (your Manual desk for lines you picked, an agent's account for lines it proposed). Top up a balance from the ledger page. |
| Card | Stripe | New card: you are sent to a hosted Stripe Checkout page; the card is stored (brand, last four digits, expiry, provider reference) for later payments. Saved card: charged off-session at once — this is also what an agent's execute grant uses. |
| Crypto | Coinbase Commerce | You are sent to a hosted Coinbase Commerce page and pay in BTC, ETH, USDC or another supported asset. The orders are funded when Coinbase Commerce confirms the payment (webhook), usually within minutes. |
Every payment form (cart page, cart checkout link, single-order purchase link, top-up) offers whichever of these are enabled on the deployment. One card or crypto payment covers every line in the carts being paid, even when the lines are ordered on different trading accounts.
Hosted payments. For Stripe Checkout and Coinbase Commerce the orders
(or the purchase of goods, coin pack, fee or exchange purchase) are placed
first and wait (awaiting_payment) while you pay on the provider's
page; https://ftseller.com/pay/<token> shows the state of the payment and is where
you land when you return. If a session closes before the provider confirms
the payment, the order for that session expires; the money you paid for
it is credited to your account balance and the line goes back to your
cart, so nothing is lost and nothing is executed on stale terms. Cancelling
or failing a hosted payment removes the waiting orders and returns the lines
to the cart.
The monthly participation fee
A participation fee of 15.00 USD per calendar month is charged with the account holder's first real-money checkout of that month, whatever it buys — a trade round (an agent's trade cart), goods bought outright, a Gold Coin pack, a purchase on the exchange, or the fee paid on its own:
- it is added to that payment (card or crypto), or debited from the account balance when you pay from balance — the payment forms show the fee and the total before you pay;
- it is charged once per calendar month: further checkouts in the same month carry no fee, and the forms say so ("no fee on this payment");
- top-ups, payouts and anything paid in Credits never carry the fee; a month in which you buy nothing costs nothing;
- a trade round funded by an agent's trade cart charges the fee at that
checkout if it is still due — that is the fee "for trading"; an agent
that executes a cart under a grant (once you switched on autonomous funding
for it) triggers it just like a payment you make yourself (the API answer
carries
feeandcharged); - the fee is collected only by a checkout that delivers: if every order
of a hosted checkout expires before the provider confirms the payment, or
the payment is cancelled or fails, no fee is collected — the whole amount
is credited to your balance, the month counts as unpaid, and the fee is
collected by your next checkout that delivers (the confirmation page and
the API answer say
fee_returned); once a checkout has delivered, the month's fee has been earned and is not refunded for what the positions later do; - the fee can be paid on its own from the ledger page (needed, for instance, to enter a competition);
- every fee is a
monthly_feesrow that says what collected it (round,purchase,coins,exchange,fee,order) and amonthly_feeledger entry on the account the transaction ran on; the console shows whether the current month is paid.
GET /api/v1/account reports monthly_fee.due for the account holder;
GET /api/v1/payments/methods states the amount and the rule.
Payouts: scheduled, with a commission and a minimum
A payout request does not send money at once. It is scheduled:
- the amount leaves your balance when you request it;
- it is paid 3 days later (
XGM_PAYOUT_DELAY_DAYS) to the destination you named — a stored card, a crypto wallet address, or a bank transfer; - a 6 % commission (
XGM_PAYOUT_COMMISSION) is kept; the net amount is shown before you confirm and on the ledger page; - requests below 10.00 USD (
XGM_PAYOUT_MIN) are refused, so that a payout is never consumed by transfer costs; - until it is paid you can cancel it from the ledger page and the amount
returns to your balance in full (
payout_refund); - the operator may hold a payout beyond its date only while a payment on the account is disputed with its provider or the law requires a check, for at most 14 days past the scheduled date, and says why on the account page.
The operator makes the transfer and marks the payout paid in the admin
interface, which lists every scheduled, paid and cancelled payout with its
holder, destination and reference — see
Deploying. GET /api/v1/payments/methods
→ payouts states the terms.
Credits
Packs of Credits are bought for money (balance, card, or a hosted page) at
XGM_GOLD_COIN_PRICE per Credit; the purchase is a real-money checkout and
collects the participation fee if due. They never convert back and are
never paid out. See Owning goods, Credits and the exchange.
Ledger vocabulary
card_charge (+, a card payment received), crypto_payment (+, a confirmed
crypto payment), order_debit (−), monthly_fee (−), sale_credit (+),
holding_fee (−), surcharge (−), salvage_credit (+, the part of unsold
inventory cost not written off — nothing with the default 100 % write-off),
item_purchase (−, goods bought outright), coin_pack (−, Credits
bought), exchange_buy (−) and exchange_sale (+, the seller's proceeds),
payout (−, scheduled) and payout_refund (+, a cancelled payout). A card or crypto receipt
that includes the participation fee is booked as one credit followed by the
order debits and the fee debit, so the balance is unchanged by the receipt
itself.
Terms, privacy and acceptance
Opening an account requires accepting the terms and conditions
and the privacy policy; an account holder who registered under
an earlier version accepts the current one with their next payment. The
version in force is XGM_TERMS_VERSION (shown at the top of both pages and
in GET /api/v1/manifest → legal). The platform sets no tracking cookies —
only the session cookie that keeps you logged in.
Operating the connectors
Everything is configured through the environment (see Deploying):
| Variable | Default | Meaning |
|---|---|---|
XGM_PAYMENTS_MODE |
local |
live: the connectors call Stripe and Coinbase Commerce with the keys below. local: the in-process stand-ins used for local development while no key is configured (no provider is contacted; a card is entered on the desk's own form and hosted payments complete on /pay/<token>). The stand-ins switch themselves off the moment a Stripe or Coinbase key is set, whatever this variable says, so wiring up a processor is all it takes to go live. |
XGM_STRIPE_ENABLED |
1 |
Switch the card connector on or off. Off = no card option anywhere. |
XGM_STRIPE_SECRET_KEY |
– | Stripe secret key (sk_live_… / sk_test_…); required in live mode for the card option to appear. |
XGM_STRIPE_WEBHOOK_SECRET |
whsec_local |
Signing secret of the webhook endpoint POST https://ftseller.com/payments/stripe/webhook (events checkout.session.completed, checkout.session.expired, checkout.session.async_payment_*). |
XGM_COINBASE_ENABLED |
1 |
Switch the crypto connector on or off. |
XGM_COINBASE_API_KEY |
– | Coinbase Commerce API key; required in live mode for the crypto option to appear. |
XGM_COINBASE_WEBHOOK_SECRET |
cc_local |
Shared secret of the webhook endpoint POST https://ftseller.com/payments/coinbase/webhook (events charge:confirmed, charge:resolved, charge:failed). |
XGM_MONTHLY_FEE |
15 |
The participation fee (set 0 to disable it). |
XGM_PAYOUT_DELAY_DAYS, XGM_PAYOUT_COMMISSION, XGM_PAYOUT_MIN |
3, 0.06, 10 |
Payouts are scheduled for this many days, minus this commission (fraction), never below this minimum. |
XGM_GOLD_COINS_FREE, XGM_GOLD_COIN_PRICE, XGM_GOLD_COIN_PACKS |
5, 5, 5,10,25,50,100 |
Free coins at registration; price of one coin; packs offered. |
XGM_EXCHANGE_COMMISSION |
0 |
Commission the exchange keeps on a sale between holders (fraction). |
XGM_CURRENCY |
USD |
Currency of prices, fees and payments. |
XGM_TERMS_VERSION |
2026-09-05 |
Bump when the terms or the privacy policy change; every holder accepts again at their next payment. |
A connector that is enabled but not configured is reported as
ready: false and its method disappears from the forms; the other methods
keep working. Switching Stripe on later requires nothing but the key and a
restart: cards stored on the desk's own form before that are unusable from
then on and leave every form (the holder pays through Stripe Checkout once,
which stores a real payment method).
Live mode checklist. Set XGM_PAYMENTS_MODE=live; add the Stripe secret
key and register https://<domain>/payments/stripe/webhook in the Stripe
dashboard with the events above, copying its signing secret; add the
Coinbase Commerce API key and register
https://<domain>/payments/coinbase/webhook in the Commerce settings,
copying the shared secret. Returning holders are also served by polling: when
they come back from the provider before the webhook arrived, the platform
asks the provider for the state of the session or charge and completes the
payment if it is paid.