Quotes
Retrieve live bid/ask prices, served from Redis so the response itself is near-instant. The underlying quote is refreshed as our data updates and cached for 120 seconds, so treat timestamp as the authority on age rather than assuming tick-by-tick freshness. Use the single-quote endpoint for live price feeds and the bulk endpoint to value an entire portfolio in one call.
Single Symbol Live Quote
Returns the latest bid, ask, and spread for a single trading symbol. Quotes are served from Redis with near-zero latency and no database round-trip. Our data updates about every 60 seconds, so consecutive calls inside that window return the same snapshot.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Trading symbol (e.g., EURUSD, XAUUSD, BTCUSD). |
Example Request
curl -H "X-API-Key: YOUR_API_KEY" \
"https://tickatlas.com/v1/quote?symbol=XAUUSD" Success Response
{
"success": true,
"data": {
"symbol": "XAUUSD",
"bid": 2341.52,
"ask": 2341.87,
"spread": 0.35,
"spread_pips": 35.0,
"timestamp": "2026-04-04T14:23:01Z"
}
} Bulk Quotes
Fetch live quotes for up to 100 symbols in a single request. Instead of making individual calls per symbol, send one POST with your full watchlist and receive all prices back at once. This dramatically reduces both latency and quota consumption for portfolio-level operations.
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
| symbols | string[] | Yes | Array of trading symbols (max 100). Example: ["EURUSD", "GBPUSD", "XAUUSD"] |
| fields | string[] | No | Filter response to specific fields. Options: bid, ask, spread, spread_pips, timestamp. Omit for all five. |
Example Request
curl -X POST \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"symbols": ["EURUSD", "GBPUSD", "XAUUSD"], "fields": ["bid", "ask", "spread"]}' \
"https://tickatlas.com/v1/quotes" Success Response
{
"success": true,
"data": {
"quotes": [
{
"symbol": "EURUSD",
"bid": 1.08432,
"ask": 1.08445,
"spread": 0.00013
},
{
"symbol": "GBPUSD",
"bid": 1.29210,
"ask": 1.29228,
"spread": 0.00018
},
{
"symbol": "XAUUSD",
"bid": 2341.52,
"ask": 2341.87,
"spread": 0.35
}
],
"count": 3,
"not_found": null,
"timestamp": "2026-04-04T14:23:01Z"
}
}
Any symbols that could not be found are returned in the not_found array rather than causing the entire request to fail. This lets you handle missing data gracefully without retrying the whole batch.
data.timestamp is the time of the latest update of our data, or an empty string when that time is not available (for example before the first update is stored); it is never the time of the response.
Code Examples
Python
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://tickatlas.com"
headers = {"X-API-Key": API_KEY}
# --- Single quote ---
resp = requests.get(f"{BASE}/v1/quote",
headers=headers,
params={"symbol": "XAUUSD"})
quote = resp.json()["data"]
print(f"{quote['symbol']}: {quote['bid']}/{quote['ask']} (spread {quote['spread_pips']} pips)")
# --- Bulk quotes ---
resp = requests.post(f"{BASE}/v1/quotes",
headers=headers,
json={"symbols": ["EURUSD", "GBPUSD", "XAUUSD"],
"fields": ["bid", "ask", "spread"]})
result = resp.json()["data"]
for q in result["quotes"]:
print(f"{q['symbol']}: {q['bid']}/{q['ask']}")
if result["not_found"]:
print(f"Not found: {result['not_found']}") JavaScript
const API_KEY = "YOUR_API_KEY";
const BASE = "https://tickatlas.com";
const headers = { "X-API-Key": API_KEY };
// --- Single quote ---
const singleResp = await fetch(
`${BASE}/v1/quote?symbol=XAUUSD`,
{ headers }
);
const { data: quote } = await singleResp.json();
console.log(`${quote.symbol}: ${quote.bid}/${quote.ask}`);
// --- Bulk quotes ---
const bulkResp = await fetch(`${BASE}/v1/quotes`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({
symbols: ["EURUSD", "GBPUSD", "XAUUSD"],
fields: ["bid", "ask", "spread"]
})
});
const { data: result } = await bulkResp.json();
result.quotes.forEach(q =>
console.log(`${q.symbol}: ${q.bid}/${q.ask}`)
); Use Cases
Live Price Feeds
Poll GET /v1/quote to power real-time price tickers, trading dashboards, or heads-up displays. Every call is served from Redis rather than the database, so polling is cheap on the backend — but the quote itself only changes when our data updates, roughly once a minute, so there is little to gain from a shorter interval than that.
Portfolio Valuation
Use POST /v1/quotes to price an entire portfolio in a single request. Pass all your open positions and get back current bid/ask for every instrument at once — ideal for real-time P&L dashboards and risk calculations.
Spread Monitoring
Track spread fluctuations throughout the trading session to identify optimal execution windows. Combine with the Spread Analysis endpoint for historical spread patterns and anomaly detection.