TickAtlas
Calendar API Last updated: August 2026

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

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
idStable event identifier
datetimeISO 8601 UTC timestamp of the event release (e.g., 2026-08-07T12:30:00+00:00)
currencyAffected currency (USD, EUR, GBP, JPY, etc.)
eventFull event name (e.g., "Non-Farm Payrolls")
impactEvent market impact: low, medium, or high
forecastAnalyst consensus forecast (string, may include units)
previousPrior period reading
actualThe 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

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

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

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.