Live forex rates in your app, for your own users
For brokers, fintechs, trading apps and market sites that show prices to their own customers: the live bid and ask and one-second candles for 46 currency pairs and 5 metals, which you may display, relay to your clients and keep, on every paid plan. A symbol you relay around the clock adds CHF 150 a month.
- Who it is for
- A company that puts market prices in front of people who are not its staff: the quote panel of a broker's platform, the rates screen of a payment or treasury app, a chart on a market news site, a gold price on a dealer's shop, the prices a trading school streams to its classes. Your users never deal with us: they read the data inside your product.
- What you may do with the data
- Display it in your product, relay it to your own clients, and keep what you receive, on every paid plan, with no feed contract to negotiate and nobody to call. A symbol your connections follow live for more than 80% of its open hours in a month adds CHF 150 to the next invoice, on top of the plan. Reaching that threshold never cuts the feed.
- Prices in a browser, without your key in it
- The API key stays on your server. For each of your users, your server exchanges it at POST /v1/tokens for a token that lives 12 hours, and hands the token to the page. The page reads candles with it, and opens the live stream with a single-use ticket from POST /v1/ws-ticket. Declare the origins your pages run on in your account: the browser routes answer pages whose origin a customer account has declared, and the token is what decides access.
- From the key to a price on screen
- Open the trial and take the API key. On your server, exchange it for a token per user of yours, and hand the token to your page. The page reads the recent candles of a symbol to draw its chart, then opens the stream with a ticket and subscribes to quote:SYMBOL for the bid and ask and candle:SYMBOL:TIMEFRAME for bars as they close. Declare the origins your pages run on in your account.
- Your users are not seats
- There is no fee per user. A plan is priced by the month's peak of simultaneous connections and by slices of 1 000 bars: Starter is sized for 30 connections at the same moment, however many people are registered on your side. A paid plan never refuses a connection; the next invoice follows the peak, up or down.
- How the invoice follows your audience
- Every paid plan starts on Starter. The month's peak of simultaneous connections and its slices set the next invoice's plan, up or down, never in the middle of a month, a closing invoice aside; a lower plan applies only after a month our meter measured almost in full, by the threshold your account page states. Your account page shows the month's reading as it goes.
- What a price is
- The live bid and ask as they change, and candles from one second to one day (S1, M1, M5, M15, H1, H4, D1), the same series on the stream and by REST, so a chart drawn from history joins the live price without a seam. A candle's volume is a tick volume, the number of price updates in the bar, not a traded volume.
- What it carries
- 46 currency pairs and 5 metals, gold against the dollar and the euro among them, all on every paid plan, each with its own page and its measured history. The free trial carries EURUSD · XAUUSD.
- When a connection drops
- A close with code 1008 and a reason, such as a revoked key or an ended trial, is an answer: do not reconnect in a loop on it. Any other close is temporary: reconnect after a pause, and the candle channels send their recent bars again on subscribe, billed in slices like a REST page; a longer gap is read by REST.
- What it is not
- No bulk export or download: history is read through the metered API. No order book and no traded volume. Prices are supplied for information, not as advice, and nothing on the stream places an order.
- Before you build
- The free trial lasts 7 days, on EURUSD · XAUUSD, with 3 simultaneous connections: enough to wire the token, the stream and one screen of your product, and to see the prices move in it.
Facts as of 06.10.2026.
First call
# 1. your server exchanges the key for a short-lived token
export ADONA_API_KEY="${ADONA_API_KEY:-adk_live_...}"
RESP=$(curl -s https://api.adona-robot.com/v1/tokens \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ADONA_API_KEY" \
-d '{"end_user_id":"u-42"}')
TOKEN=$(echo "$RESP" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)
[ -n "$TOKEN" ] || echo "refused: $RESP"
# 2. the token reads candles
curl -s 'https://api.adona-robot.com/v1/candles?symbol=EURUSD&timeframe=S1&limit=1000' \
-H "Authorization: Bearer $TOKEN"The quickstart: from the key to the live stream, step by step