Frequently asked questions
Spreads, clarified.
Units and conversions, which windows and sessions exist, where each number comes from,
and what the endpoint deliberately does not tell you.
What exactly is returned, and in what units?
Two views of the same thing. current carries spread_pips (two decimals) and spread_points (the raw integer in our data). statistics carries the period, the mean, the minimum, the maximum and the standard deviation over that window, all in pips. by_session carries three session means, also in pips. A pip is ten points for 5-digit FX and 3-digit JPY quotes, and one point for everything else — legacy 4- and 2-digit FX, metals, indices and crypto.
Which periods are available?
Four: 1h (1 hour), 24h (24 hours), 7d (168 hours), 30d (720 hours). The default is 24h, and the same set applies to both endpoints. Anything else is a 400 with INVALID_PERIOD and the valid list in the detail.
Which sessions does by_session break down?
Three, keyed asian, london and new_york. Each is an 8-hour UTC window anchored on that centre’s local open hour and derived through zoneinfo, so the windows shift with BST and EDT rather than being hard-coded. Sydney is deliberately not bucketed, and there is no separate overlap bucket — the London and New York windows already overlap by three hours, and a value can be null when the window holds no rows for that symbol.
How many symbols can I compare at once?
Up to 20 comma-separated symbols per call. More than that is a 400 with TOO_MANY_SYMBOLS; an empty list is a 400 with NO_SYMBOLS. The response is already sorted by average spread ascending, so the tightest average is simply the first row — there is no rank field and no tightest/widest summary to read.
Where does the data come from?
Two different places, which is worth knowing. The current spread is the cached live quote. The statistics and the session buckets are computed from our data over the requested window. So current is right now, and the window is its history.
What happens when a symbol has no data?
On /v1/spread, no cached price at all is a 404 with SYMBOL_NOT_FOUND. An empty history window is not an error: avg, min and max fall back to the current spread and std_deviation is 0, so you get a usable response rather than nulls. On /v1/spread/compare, a symbol with no live quote comes back with current_pips null and has_live_data false, and rows with no average sort to the end.
Does the endpoint say when to trade?
No, and it deliberately carries no field that would. There is no "optimal window" flag and no recommendation string — the response is the current spread, its statistics and three session means, and what counts as acceptable for a given strategy is not something TickAtlas asserts. TickAtlas provides market data and computed analytics for software use; it does not provide personalised investment advice or execute trades.
What does a call cost, and which plans include it?
One request of quota, for both endpoints: /v1/spread is standard tier at multiplier 1.0, and /v1/spread/compare is not in the tier map so it takes the standard-tier fallback. Neither needs a special key permission scope — a valid key is enough. Every plan includes them — neither endpoint carries a plan gate — so a new account can call them on its $2.50 of starting credit. There is no free tier and no self-serve trial.