The same feed that powers the Economic Calendar is available as plain JSON. No account, no key, no tracking — request a URL, get JSON back.
stale-while-revalidate cache headers and only changes every few minutes.GET /api/calendar GET /api/rates GET /rss/high-impact-events.xml GET /healthz GET /sitemap.xml GET /VERSION
Machine-readable spec: openapi.json (OpenAPI 3.0) — point any agent or code generator at it. Cached server-side: /api/rates consolidates the ECB daily reference rates, metals and crypto spot into one JSON payload (30-minute cache) so your client makes one request, not five.
GET /api/calendar — this week's live calendarReturns the current week's economic events (Fri → Sun) with actual numbers merged in where officially published. If the upstream provider is unreachable, the last saved copy is served with "stale":true so your integration can react honestly.
curl -s https://pipatlas.com/api/calendar
{
"source": "forexfactory",
"updated": "2026-10-06T09:12:00.000Z",
"cacheMinutes": 5,
"count": 82,
"events": [
{
"name": "Non-Farm Payrolls",
"currency": "USD",
"impact": "High",
"date": "2026-11-06T13:30:00+01:00",
"forecast": "170K",
"previous": "119K",
"url": "https://www.forexfactory.com/calendar/…"
}
]
}
| Field | Type | Notes |
|---|---|---|
name | string | Event title as shown on the calendar. |
currency | string | ISO code — USD, EUR, ALL (holidays), etc. |
impact | string | One of High, Medium, Low, Holiday. |
date | ISO 8601 | Includes the source's UTC offset — parse, don't slice. |
actual | string | absent | Present once the real print is merged in from the official page. |
forecast / previous | string | As published by the source; may be empty. |
url | string | Official source page for the event. |
stale | boolean | true only when the upstream is down and a saved copy is being served. |
GET /rss/high-impact-events.xml — events RSSThe next high-impact releases (up to 30) as a standard RSS feed — for RSS readers, community calendars, or anything that polls a plain XML URL. Item times are UTC; descriptions carry forecast/previous and the merged actual once published. Cached for 5 minutes.
curl -s https://pipatlas.com/rss/high-impact-events.xml | head -12
GET /healthz — feed healthcurl -s https://pipatlas.com/healthz
{
"ok": true,
"version": "5.99",
"uptimeSec": 12345,
"feeds": {
"calendar": { "cached": true, "ageMin": 2, "count": 82 },
"actuals": { "cached": true, "ageMin": 31, "count": 21 },
"twelveData": { "configured": true }
},
"backupsOnDisk": 3
}
GET /sitemap.xml and GET /VERSIONThe sitemap is generated live (it includes forum threads that exist in folder mode). /VERSION returns the deployed site version as plain text.
const r = await fetch('https://pipatlas.com/api/calendar');
const { events = [] } = await r.json();
const next = events.find(e => e.impact === 'High' && new Date(e.date) > new Date());
console.log(next && [next.currency, next.name, next.date].join(' · '));
import requests
d = requests.get("https://pipatlas.com/api/calendar", timeout=10).json()
high = [e for e in d.get("events", []) if e.get("impact") == "High"]
for e in high[:5]:
print(e["date"], e["currency"], e["name"])
<iframe src="https://pipatlas.com/embed" style="width:100%;height:420px;border:0;" title="PipAtlas high-impact events"></iframe> on your blog or community page.Terms · Privacy · Editorial Policy · Affiliate Disclosure · Risk Disclaimer · Contact · API