A live forex API, update by update
The live bid and ask of 46 currency pairs and 5 metals, each update as it arrives, and candles as they close from one second to one day, on one WebSocket opened from your server or from a browser, with the history behind them by REST.
- What live means here
- Each new bid and ask the feed receives is sent on the stream as it arrives, to a client that keeps reading, with no sampling into intervals. A candle frame is sent when its bar closes, and REST answers with the bar still forming, so a chart opened by REST starts from a current price.
- Quotes and candles
- quote:SYMBOL carries the bid and ask; candle:SYMBOL:TIMEFRAME carries bars on S1, M1, M5, M15, H1, H4, D1. One subscribe frame takes up to 64 channels, so a rates screen for dozens of pairs needs one connection.
- From a browser, without your key
- Your server exchanges the API key for a token per user that lives 12 hours; the page takes a single-use ticket from POST /v1/ws-ticket and opens the stream with it. The key never reaches the browser.
- Market hours
- Currency pairs trade from Sunday evening to Friday evening, and metals almost around the clock on weekdays. Outside those hours no price moves, so no quote is sent; each symbol's page gives its measured activity.
- Connections are what you buy
- A plan is priced by the month's peak of simultaneous connections, not by the number of messages: a busy hour on the stream costs nothing more than a quiet one. A paid plan never refuses a connection; the next invoice follows the peak.
- The history behind it
- Candles back in time by REST, up to 5 000 a page with a cursor: one-minute bars since 16.05.2025 for EURUSD, GBPUSD, USDJPY, XAUUSD, one-second bars kept 180 days rolling.
- Showing it to your users
- Display the prices in your product, relay them and keep them, on every paid plan. A symbol your connections follow live for more than 80% of its open hours in a month adds CHF 150 to the next invoice.
- The trial
- The free trial lasts 7 days, on EURUSD · XAUUSD, with 3 simultaneous connections, enough to wire the stream into one screen of your product.
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