Economic Calendar API
Access scheduled economic events — NFP, CPI, FOMC, interest rate decisions, and 100+ more — with impact ratings, forecasts, previous readings, and actuals published the moment they release.
Endpoint
GET https://tickatlas.com/v1/calendar Requires X-API-Key header. Returns upcoming scheduled events with optional filtering.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
from | string | today | Start date, ISO 8601 or YYYY-MM-DD. Ignored when next_hours/prev_hours is set. |
to | string | +7 days | End date. Maximum 30-day range from from. |
next_hours | integer | — | Look-ahead window in hours (1–168). Overrides from/to. |
prev_hours | integer | — | Look-back window in hours (1–96) — returns recently released events with their actual values (Starter+). Overrides from/to; combine with next_hours to straddle now. Values above 96 return 422. |
impact | string | all | Filter by impact: low, medium, high, or omit for all. |
currencies | string | — | Comma-separated currency codes: USD,EUR,GBP |
country | string | — | Alias for currencies (same comma-separated codes). |
q | string | — | Search event titles, case-insensitive substring (max 100 chars). |
offset | integer | 0 | Number of results to skip for pagination. |
limit | integer | 100 | Max events to return (1-500). |
Response Fields
Events are returned under data.events[];
data.count,
data.range and
data.pagination sit alongside them. Each event carries:
| Field | Description |
|---|---|
id | Stable event identifier |
datetime | ISO 8601 UTC timestamp of the event release (e.g., 2026-08-07T12:30:00+00:00) |
currency | Affected currency (USD, EUR, GBP, JPY, etc.) |
event | Full event name (e.g., "Non-Farm Payrolls") |
impact | Event market impact: low, medium, or high |
forecast | Analyst consensus forecast (string, may include units) |
previous | Prior period reading |
actual | The released figure, populated the moment it prints (sourced from the live MT5 feed). A Starter+ feature — Free/demo keys always receive null; paid keys see null only until the event releases. Use prev_hours to fetch recently released events with their actuals. |
Example Response
{
"success": true,
"data": {
"events": [
{
"id": "nfp-20260807",
"datetime": "2026-08-07T12:30:00+00:00",
"currency": "USD",
"event": "Non-Farm Payrolls",
"impact": "high",
"forecast": "185K",
"previous": "151K",
"actual": "203K"
},
{
"id": "cpi-20260812",
"datetime": "2026-08-12T12:30:00+00:00",
"currency": "USD",
"event": "CPI m/m",
"impact": "high",
"forecast": "0.2%",
"previous": "0.3%",
"actual": null
}
],
"count": 2,
"range": {
"from": "2026-08-07T00:00:00",
"to": "2026-08-14T00:00:00"
},
"pagination": {
"offset": 0,
"limit": 100,
"total": 2,
"has_more": false
}
}
} Code Examples
cURL
# Upcoming — high-impact events in the next 24 hours
curl -X GET "https://tickatlas.com/v1/calendar?impact=high&next_hours=24&offset=0&limit=100" \
-H "X-API-Key: YOUR_API_KEY"
# Just released — events from the last 48 hours WITH their actuals (max prev_hours=96)
curl -X GET "https://tickatlas.com/v1/calendar?prev_hours=48&impact=high&limit=100" \
-H "X-API-Key: YOUR_API_KEY"
# Filter by currency
curl -X GET "https://tickatlas.com/v1/calendar?currencies=USD,EUR&next_hours=48&offset=0&limit=100" \
-H "X-API-Key: YOUR_API_KEY"
# All events this week (168 hours)
curl -X GET "https://tickatlas.com/v1/calendar?next_hours=168&offset=0&limit=100" \
-H "X-API-Key: YOUR_API_KEY" Python
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://tickatlas.com/v1/calendar"
# Events are under data.events; pagination + range under data too.
def get_events(**params):
r = requests.get(BASE_URL, headers={"X-API-Key": API_KEY}, params=params)
return r.json()["data"]["events"]
# Upcoming: high-impact events in the next 24 hours
upcoming = get_events(impact="high", next_hours=24)
for e in upcoming:
print(f"{e['datetime']} | {e['currency']} | {e['event']} | Impact: {e['impact']}")
# Just released: what came out in the last 48 hours, WITH actuals (Starter+).
# prev_hours is a rolling backward window (max 96h), newest-first.
released = get_events(prev_hours=48, impact="high")
for e in released:
if e["actual"] is not None:
print(f"{e['event']}: actual {e['actual']} vs forecast {e['forecast']}") Common Use Cases
News Trading Bot
Poll the calendar before each new position entry. If a high-impact event's datetime is less than 30 minutes away (compute datetime − now), hold off on new trades until after the release.
Beat/Miss Momentum Signal
After datetime passes, poll until actual is non-null. Compare to forecast — a significant beat often triggers a momentum move in the affected currency.
Pre-Event Discord Alert
Run every 5 minutes. When a high-impact event's datetime is 30 minutes out or less, fire a Discord or Slack webhook to alert your team.