API reference
TickBase Market Data API
A read-only REST API for FX and precious-metals data. All prices are stored in USD; non-USD bases are derived on read via the USD pivot.
Introduction
The base URL is https://api.thetickbase.com.
Every endpoint returns JSON and is versioned under /v1.
/v1/status
and /v1/symbols
are public; all other routes require an API key.
Get started: create a free account, mint an API key in the dashboard, then make your first request below. The free plan includes 5,000 requests/month.
Create an API keyAuthentication
Authenticate every request with your API key, either as a bearer token
or via the X-API-Key
header. Keys are prefixed tb_live_
(production) or tb_test_.
Keep secret keys server-side — never ship them in client code.
# Bearer token (recommended)
curl -s "https://api.thetickbase.com/v1/fx/latest?symbols=EUR" \
-H "Authorization: Bearer tb_live_•••"
# Or the X-API-Key header
curl -s "https://api.thetickbase.com/v1/fx/latest?symbols=EUR" \
-H "X-API-Key: tb_live_•••" Rate limits & quotas
Three limits apply, smallest first: a fixed per-IP safeguard (120
req/min), your plan's per-key rate limit, and your monthly request
quota. Exceeding any returns 429.
| Plan | Per minute | Monthly quota | History | Active keys |
|---|---|---|---|---|
| Free | 10 | 5,000 | 30 days | 1 |
| Developer | 60 | 100,000 | Full | 3 |
| Business | 300 | 1,000,000 | Full | 5 |
Errors
Errors use a consistent envelope with a stable
code,
a human-readable message,
and the HTTP status.
{
"error": {
"code": "rate_limit_exceeded",
"message": "Per-minute rate limit exceeded for your plan.",
"status": 429
}
} | Code | Status | Meaning |
|---|---|---|
| invalid_api_key | 401 | Missing, malformed, or revoked API key. |
| forbidden_plan | 403 | Endpoint or parameter not allowed on your plan. |
| ip_rate_limit_exceeded | 429 | Per-IP safeguard tripped (120 req/min). |
| rate_limit_exceeded | 429 | Per-key rate limit for your plan exceeded. |
| quota_exceeded | 429 | Monthly request quota used up. |
| not_found | 404 | Unknown symbol, date, or route. |
| invalid_request | 400 | Bad or missing query parameters. |
| upstream_unavailable | 503 | A data source is temporarily unreachable. |
FX
Latest FX rates
FreeLatest exchange rates against USD. Pass a non-USD base (paid plans) to derive rates via the USD pivot.
| Parameter | Type | Default | Description |
|---|---|---|---|
| base | string | USD | Quote base. Non-USD requires a paid plan. |
| symbols | string | — | Comma-separated quote codes, e.g. EUR,GBP. |
* required
curl -s "https://api.thetickbase.com/v1/fx/latest?symbols=EUR,GBP" \
-H "Authorization: Bearer tb_live_•••" {
"base": "USD",
"rates": { "EUR": 0.82791, "GBP": 0.73605 },
"as_of": "2026-05-21T09:30:00Z",
"derived": false,
"pivot": "USD"
} Convert currencies
FreeConvert an amount between two currencies. Cross conversions resolve through the USD pivot.
| Parameter | Type | Default | Description |
|---|---|---|---|
| from * | string | — | Source currency code. |
| to * | string | — | Target currency code. |
| amount * | number | — | Amount to convert. |
| date | date | — | Use a historical date instead of latest. |
* required
curl -s "https://api.thetickbase.com/v1/fx/convert?from=USD&to=EUR&amount=100" \
-H "Authorization: Bearer tb_live_•••" {
"from": "USD",
"to": "EUR",
"amount": 100,
"rate": 0.82791,
"result": 82.791,
"as_of": "2026-05-21T09:30:00Z"
} Historical FX rates
FreeExchange rates for a specific date. History depth depends on your plan.
| Parameter | Type | Default | Description |
|---|---|---|---|
| date * | date | — | Date to query (YYYY-MM-DD). |
| base | string | USD | Quote base. Non-USD requires a paid plan. |
| symbols | string | — | Comma-separated quote codes. |
* required
curl -s "https://api.thetickbase.com/v1/fx/historical?date=2026-05-01&symbols=EUR" \
-H "Authorization: Bearer tb_live_•••" {
"base": "USD",
"rates": { "EUR": 0.83012 },
"as_of": "2026-05-01T00:00:00Z",
"derived": false,
"pivot": "USD"
} FX time series
Paid PlannedDaily series for one symbol over a date range. Paid plans only.
| Parameter | Type | Default | Description |
|---|---|---|---|
| symbol * | string | — | Quote code, e.g. EUR. |
| start * | date | — | Range start (inclusive). |
| end * | date | — | Range end (inclusive). |
| base | string | USD | Quote base. |
| interval | string | 1d | Sampling interval. |
* required
curl -s "https://api.thetickbase.com/v1/fx/timeseries?symbol=EUR&start=2026-05-01&end=2026-05-07" \
-H "Authorization: Bearer tb_live_•••" {
"symbol": "EUR",
"base": "USD",
"interval": "1d",
"points": [
{ "date": "2026-05-01", "rate": 0.83012 },
{ "date": "2026-05-02", "rate": 0.82940 }
]
} Metals
Latest metal price
FreeLatest spot price per troy ounce for a precious metal.
| Parameter | Type | Default | Description |
|---|---|---|---|
| metal | string | XAU | One of XAU, XAG, XPT, XPD. |
| currency | string | USD | Quote currency. Non-USD requires a paid plan. |
* required
curl -s "https://api.thetickbase.com/v1/metals/latest?metal=XAU" \
-H "Authorization: Bearer tb_live_•••" {
"metal": "XAU",
"currency": "USD",
"price": 2350.75,
"unit": "troy_ounce",
"bid": 2350.10,
"ask": 2351.40,
"ch": 9.85,
"chp": 0.42,
"as_of": "2026-05-21T09:30:00Z",
"derived": false,
"pivot": "USD"
} Historical metal price
FreeSpot price for a metal on a specific date.
| Parameter | Type | Default | Description |
|---|---|---|---|
| date * | date | — | Date to query (YYYY-MM-DD). |
| metal | string | XAU | One of XAU, XAG, XPT, XPD. |
| currency | string | USD | Quote currency. |
* required
curl -s "https://api.thetickbase.com/v1/metals/historical?date=2026-05-01&metal=XAU" \
-H "Authorization: Bearer tb_live_•••" {
"metal": "XAU",
"currency": "USD",
"price": 2333.10,
"unit": "troy_ounce",
"as_of": "2026-05-01T00:00:00Z",
"derived": false,
"pivot": "USD"
} Metal time series
Paid PlannedDaily metal series built from stored ticks. Paid plans only.
| Parameter | Type | Default | Description |
|---|---|---|---|
| metal | string | XAU | One of XAU, XAG, XPT, XPD. |
| currency | string | USD | Quote currency. |
| start * | date | — | Range start (inclusive). |
| end * | date | — | Range end (inclusive). |
| interval | string | 1d | Sampling interval. |
* required
curl -s "https://api.thetickbase.com/v1/metals/timeseries?metal=XAU&start=2026-05-01&end=2026-05-07" \
-H "Authorization: Bearer tb_live_•••" {
"metal": "XAU",
"currency": "USD",
"interval": "1d",
"points": [
{ "date": "2026-05-01", "price": 2333.10 },
{ "date": "2026-05-02", "price": 2341.55 }
]
} Convert metal ⇄ currency
Paid PlannedConvert between a metal and a currency (per troy ounce). Paid plans only.
| Parameter | Type | Default | Description |
|---|---|---|---|
| from * | string | — | Metal code or currency. |
| to * | string | — | Metal code or currency. |
| amount * | number | — | Amount to convert. |
| date | date | — | Use a historical date instead of latest. |
* required
curl -s "https://api.thetickbase.com/v1/metals/convert?from=XAU&to=USD&amount=2" \
-H "Authorization: Bearer tb_live_•••" {
"from": "XAU",
"to": "USD",
"amount": 2,
"rate": 2350.75,
"result": 4701.50,
"as_of": "2026-05-21T09:30:00Z"
} System
OHLC candles
Paid PlannedOpen/high/low/close candles aggregated from stored ticks. Paid plans only.
| Parameter | Type | Default | Description |
|---|---|---|---|
| asset | string | fx | fx or metal. |
| symbol * | string | — | e.g. EURUSD or XAUUSD. |
| interval | string | 1d | Candle interval. |
| start * | date | — | Range start (inclusive). |
| end * | date | — | Range end (inclusive). |
* required
curl -s "https://api.thetickbase.com/v1/ohlc?asset=fx&symbol=EURUSD&start=2026-05-01&end=2026-05-07" \
-H "Authorization: Bearer tb_live_•••" {
"asset": "fx",
"symbol": "EURUSD",
"interval": "1d",
"candles": [
{ "date": "2026-05-01", "o": 0.8301, "h": 0.8325, "l": 0.8290, "c": 0.8312 }
]
} Source status
FreePer-asset data freshness. Public — no API key required.
curl -s "https://api.thetickbase.com/v1/status" {
"now": "2026-05-21T09:30:05Z",
"sources": [
{ "asset": "fx", "as_of": "2026-05-21T09:30:00Z", "age_seconds": 5 },
{ "asset": "metal", "symbol": "XAU", "as_of": "2026-05-21T09:29:30Z", "age_seconds": 35 }
]
} Supported symbols
FreeSymbols available for FX and metals. Public — no API key required.
| Parameter | Type | Default | Description |
|---|---|---|---|
| asset | string | — | Filter to fx or metal; omit for both. |
* required
curl -s "https://api.thetickbase.com/v1/symbols?asset=metal" {
"metal": ["XAG", "XAU", "XPD", "XPT"]
}