GET /v1/quote

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.

GET /v1/quote

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
symbolstringYesTrading symbol (e.g., EURUSD, XAUUSD, BTCUSD).

Example Request

cURL
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://tickatlas.com/v1/quote?symbol=XAUUSD"

Success Response

200 OK
{
  "success": true,
  "data": {
    "symbol": "XAUUSD",
    "bid": 2341.52,
    "ask": 2341.87,
    "spread": 0.35,
    "spread_pips": 35.0,
    "timestamp": "2026-04-04T14:23:01Z"
  }
}
POST /v1/quotes Standard (1x)

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
symbolsstring[]YesArray of trading symbols (max 100). Example: ["EURUSD", "GBPUSD", "XAUUSD"]
fieldsstring[]NoFilter response to specific fields. Options: bid, ask, spread, spread_pips, timestamp. Omit for all five.

Example Request

cURL
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

200 OK
{
  "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

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

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.