API Reference

Economic Calendar API

Multi-language economic event calendar with flexible filters, cursor pagination, event release history, and plan-aware limits.

24 languages Cursor pagination Filter · History · Export · Stream

Economic Calendar API

Multi-language economic event calendar with flexible filters, cursor pagination, event release history, and plan-aware limits.

This document describes the EconPulse Economic Calendar API — used for dashboards, research apps, multilingual clients, Forex calendars, and automated workflows.

This API returns calendar rows with plan-based language and row limits, including fields such as actual, forecast, previous, importance, and currency.


Short description

Global economic calendar with 24 languages, country/currency/importance filters, event history, cursor pagination, and higher-tier streaming/export endpoints.


Overview

The API exposes scheduled and released macro events (CPI, GDP, employment, central-bank speeches, and similar indicators) with fields such as actual, forecast, previous, importance, currency, and localized names.

Typical consumers:

  • News and research websites that need a weekly or daily calendar widget
  • Multilingual apps that display events in English, Turkish, German, Japanese, and other supported languages
  • Back-office tools that page through large result sets with cursors
  • Analysts who need historical releases for a single event_id

Strengths

  • Broad language coverage (24 codes via /langs-list)
  • Flexible date selection (date_from / date_to, or shortcuts like today, current_week)
  • Multi-value filters for country, currency, and importance
  • Cursor pagination for large windows without offset/limit drift
  • Per-event release history at /economic-events/{event_id}/history

Limitations

  • Does not return precomputed surprise percentages or beat/miss scores (you can derive these client-side from actual and forecast)
  • Sorts primarily by occurrence_time DESC (newest first), which suits archives more than “next upcoming” UIs — reverse client-side for small pages when needed

Base URL

https://...

All paths below are relative to this base. Replace https://... with your API host.


Authentication

Authenticate with your API key. Exact header names depend on how your gateway is configured. In the examples below, use:

Header Description
X-Api-Key Your API key
X-Subscription Optional plan hint: free, basic, pro, ultra (and enterprise for stream)

If your deployment uses different header names, keep the same values and swap only the header keys.


Plans and limits

Filter endpoint row limits

Plan Max rows per /economic-events/filter request
Free 50
Basic 100
Pro 1,000
Ultra 2,000

Language restrictions

Plan Allowed lang values on filter / history
Free / Basic Limited language set (typically English-first packages)
Pro Up to 5 language codes in a comma-separated list; lang=all is not allowed
Ultra Broader multi-language usage

Requesting a language outside your plan returns HTTP 403.

Event history limits

Plan Max limit on /economic-events/{event_id}/history
Free 12
Basic 24
Pro 100
Ultra 200

Higher-tier endpoints

Endpoint Minimum plan
POST /economic-events/export Ultra
GET /economic-events/stream Ultra (or Enterprise)

Endpoint summary

Method Path Purpose
GET / Root health status
GET /ping Health check
GET /langs-list Supported language codes
GET /countries-list Country ID → name map
GET /economic-events/filter Main calendar filter (paginated)
GET /economic-events/{event_id}/history Historical releases for one event
POST /economic-events/export Start export job (Ultra)
GET /economic-events/stream NDJSON stream for a date range (Ultra+)
GET /calendar Redirect to the HTML calendar host

Common response shape for filter

{
  "meta": {
    "plan": "basic",
    "limit": 100,
    "returned": 42,
    "next_cursor": "MjAyNi0wOC0xOVQxNDowMDowMCswMDowMHw2Mjk3OA=="
  },
  "data": [
    {
      "occurrence_id": 62978,
      "event_id": 1057,
      "category": "employment",
      "importance": "high",
      "long_name": "United States - JOLTS Job Openings",
      "short_name": "JOLTS Job Openings",
      "description": "...",
      "country_id": 5,
      "country_name": "United States",
      "country_flag": "United_States",
      "currency": "USD",
      "actual": 7.594,
      "forecast": 7.28,
      "previous": 7.585,
      "actual_to_forecast": "positive",
      "revised_to_previous": "neutral",
      "unit": "M",
      "reference_period": "Jun",
      "precision": 3,
      "preliminary": false,
      "lang": "en",
      "occurrence_time": "2026-06-30T14:00:00+00:00"
    }
  ]
}

Important fields

Field Type Description
occurrence_id integer Unique ID for this release occurrence
event_id integer Stable series ID (use with /history)
short_name / long_name string Event titles
category string/null e.g. inflation, employment, gdp
importance string low, medium, or high
country_id integer Country key for filters
currency string/null Affected currency code
actual / forecast / previous number/null Release values
actual_to_forecast string/null Source comparison: positive / negative / neutral
unit string/null %, K, M, etc.
occurrence_time datetime Release timestamp
lang string Language of this row
meta.next_cursor string/null Pass as cursor for the next page

Shared client setup

Use these complete, runnable snippets as your starting point. Replace https://api.example.com with your API host and YOUR_API_KEY with a real key. Keep the same headers on every request.

#!/usr/bin/env bash
# Complete cURL helper for the Economic Calendar API
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"   # free | basic | pro | ultra

api() {
  local method="${1:-GET}"
  local path="$2"
  shift 2
  curl -sS -X "$method" "${BASE_URL}${path}" \
    -H "X-Api-Key: ${API_KEY}" \
    -H "X-Subscription: ${SUBSCRIPTION}" \
    -H "Accept: application/json" \
    "$@"
}

# Health check
api GET "/ping"
echo

# Today's high-impact events (English)
api GET "/economic-events/filter?date=today&importance=high&lang=en" | jq .
#!/usr/bin/env python3
"""Complete Python client for the Economic Calendar API."""

from __future__ import annotations

import sys
from typing import Any, Dict, Optional

import requests

BASE_URL = "https://api.example.com"
API_KEY = "YOUR_API_KEY"
SUBSCRIPTION = "basic"  # free | basic | pro | ultra

HEADERS = {
    "X-Api-Key": API_KEY,
    "X-Subscription": SUBSCRIPTION,
    "Accept": "application/json",
}

class EconomicCalendarClient:
    def __init__(
        self,
        base_url: str = BASE_URL,
        headers: Optional[Dict[str, str]] = None,
        timeout: int = 30,
    ) -> None:
        self.base_url = base_url.rstrip("/")
        self.session = requests.Session()
        self.session.headers.update(headers or HEADERS)
        self.timeout = timeout

    def get(self, path: str, params: Optional[Dict[str, Any]] = None) -> Any:
        url = f"{self.base_url}{path}"
        response = self.session.get(url, params=params, timeout=self.timeout)
        if response.status_code >= 400:
            raise RuntimeError(
                f"HTTP {response.status_code}: {response.text[:500]}"
            )
        return response.json()

    def ping(self) -> Dict[str, Any]:
        return self.get("/ping")

    def langs_list(self) -> Any:
        return self.get("/langs-list")

    def countries_list(self, lang: str = "en") -> Any:
        return self.get("/countries-list", params={"lang": lang})

    def filter_events(self, **params: Any) -> Dict[str, Any]:
        return self.get("/economic-events/filter", params=params)

    def event_history(self, event_id: int, **params: Any) -> Dict[str, Any]:
        return self.get(f"/economic-events/{event_id}/history", params=params)

def main() -> int:
    client = EconomicCalendarClient()

    health = client.ping()
    print("ping:", health)

    page = client.filter_events(
        date="today",
        importance="high",
        lang="en",
    )
    print("meta:", page.get("meta"))
    for event in page.get("data", [])[:5]:
        print(
            event.get("occurrence_time"),
            event.get("currency"),
            event.get("short_name"),
            "actual=",
            event.get("actual"),
            "forecast=",
            event.get("forecast"),
        )
    return 0

if __name__ == "__main__":
    sys.exit(main())
/**
 * Complete Node.js / browser client for the Economic Calendar API.
 * Node 18+ (built-in fetch) or modern browsers.
 */

const BASE_URL = "https://api.example.com";
const API_KEY = "YOUR_API_KEY";
const SUBSCRIPTION = "basic"; // free | basic | pro | ultra

const HEADERS = {
  "X-Api-Key": API_KEY,
  "X-Subscription": SUBSCRIPTION,
  Accept: "application/json",
};

class EconomicCalendarClient {
  constructor(baseUrl = BASE_URL, headers = HEADERS) {
    this.baseUrl = baseUrl.replace(/\/$/, "");
    this.headers = headers;
  }

  async request(path, params = {}) {
    const url = new URL(`${this.baseUrl}${path}`);
    Object.entries(params).forEach(([key, value]) => {
      if (value !== undefined && value !== null && value !== "") {
        url.searchParams.set(key, String(value));
      }
    });

    const response = await fetch(url, {
      method: "GET",
      headers: this.headers,
    });

    const text = await response.text();
    let body;
    try {
      body = text ? JSON.parse(text) : null;
    } catch {
      body = text;
    }

    if (!response.ok) {
      throw new Error(
        `HTTP ${response.status}: ${typeof body === "string" ? body : JSON.stringify(body)}`
      );
    }
    return body;
  }

  ping() {
    return this.request("/ping");
  }

  langsList() {
    return this.request("/langs-list");
  }

  countriesList(lang = "en") {
    return this.request("/countries-list", { lang });
  }

  filterEvents(params = {}) {
    return this.request("/economic-events/filter", params);
  }

  eventHistory(eventId, params = {}) {
    return this.request(`/economic-events/${eventId}/history`, params);
  }
}

async function main() {
  const client = new EconomicCalendarClient();

  const health = await client.ping();
  console.log("ping:", health);

  const page = await client.filterEvents({
    date: "today",
    importance: "high",
    lang: "en",
  });

  console.log("meta:", page.meta);
  for (const event of (page.data || []).slice(0, 5)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
/**
 * Complete PHP client for the Economic Calendar API.
 */

declare(strict_types=1);

final class EconomicCalendarClient
{
    private string $baseUrl;
    /** @var array<int, string> */
    private array $headers;
    private int $timeout;

    public function __construct(
        string $baseUrl = 'https://api.example.com',
        string $apiKey = 'YOUR_API_KEY',
        string $subscription = 'basic',
        int $timeout = 30
    ) {
        $this->baseUrl = rtrim($baseUrl, '/');
        $this->timeout = $timeout;
        $this->headers = [
            'X-Api-Key: ' . $apiKey,
            'X-Subscription: ' . $subscription,
            'Accept: application/json',
        ];
    }

    /**
     * @param array<string, scalar|null> $params
     * @return array<mixed>
     */
    public function get(string $path, array $params = []): array
    {
        $query = http_build_query(array_filter(
            $params,
            static fn($v) => $v !== null && $v !== ''
        ));
        $url = $this->baseUrl . $path . ($query !== '' ? '?' . $query : '');

        $ch = curl_init($url);
        if ($ch === false) {
            throw new RuntimeException('Unable to init cURL');
        }

        curl_setopt_array($ch, [
            CURLOPT_HTTPHEADER => $this->headers,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_TIMEOUT => $this->timeout,
            CURLOPT_FOLLOWLOCATION => true,
        ]);

        $raw = curl_exec($ch);
        $errno = curl_errno($ch);
        $error = curl_error($ch);
        $status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($errno !== 0) {
            throw new RuntimeException('cURL error: ' . $error, $errno);
        }

        $decoded = json_decode((string) $raw, true);
        if ($status >= 400) {
            $message = is_array($decoded) ? json_encode($decoded) : (string) $raw;
            throw new RuntimeException('HTTP ' . $status . ': ' . $message, $status);
        }

        if (!is_array($decoded)) {
            throw new RuntimeException('Invalid JSON response');
        }

        return $decoded;
    }

    public function ping(): array
    {
        return $this->get('/ping');
    }

    public function langsList(): array
    {
        return $this->get('/langs-list');
    }

    /** @return array<string, mixed> */
    public function countriesList(string $lang = 'en'): array
    {
        return $this->get('/countries-list', ['lang' => $lang]);
    }

    /** @param array<string, scalar|null> $params */
    public function filterEvents(array $params = []): array
    {
        return $this->get('/economic-events/filter', $params);
    }

    /** @param array<string, scalar|null> $params */
    public function eventHistory(int $eventId, array $params = []): array
    {
        return $this->get('/economic-events/' . $eventId . '/history', $params);
    }
}

$client = new EconomicCalendarClient();

$health = $client->ping();
echo "ping: " . json_encode($health, JSON_UNESCAPED_UNICODE) . PHP_EOL;

$page = $client->filterEvents([
    'date' => 'today',
    'importance' => 'high',
    'lang' => 'en',
]);

echo "meta: " . json_encode($page['meta'] ?? null, JSON_UNESCAPED_UNICODE) . PHP_EOL;

foreach (array_slice($page['data'] ?? [], 0, 5) as $event) {
    echo sprintf(
        "%s %s %s actual=%s forecast=%s
",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

const (
    baseURL      = "https://api.example.com"
    apiKey       = "YOUR_API_KEY"
    subscription = "basic" // free | basic | pro | ultra
)

type Client struct {
    BaseURL string
    HTTP    *http.Client
    APIKey  string
    Plan    string
}

func NewClient() *Client {
    return &Client{
        BaseURL: baseURL,
        HTTP:    &http.Client{Timeout: 30 * time.Second},
        APIKey:  apiKey,
        Plan:    subscription,
    }
}

func (c *Client) Get(path string, query url.Values) (map[string]any, error) {
    u, err := url.Parse(c.BaseURL + path)
    if err != nil {
        return nil, err
    }
    if query != nil {
        u.RawQuery = query.Encode()
    }

    req, err := http.NewRequest(http.MethodGet, u.String(), nil)
    if err != nil {
        return nil, err
    }
    req.Header.Set("X-Api-Key", c.APIKey)
    req.Header.Set("X-Subscription", c.Plan)
    req.Header.Set("Accept", "application/json")

    resp, err := c.HTTP.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        return nil, err
    }
    if resp.StatusCode >= 400 {
        return nil, fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(body))
    }

    var out map[string]any
    if err := json.Unmarshal(body, &out); err != nil {
        return nil, err
    }
    return out, nil
}

func main() {
    client := NewClient()

    health, err := client.Get("/ping", nil)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    fmt.Println("ping:", health)

    q := url.Values{}
    q.Set("date", "today")
    q.Set("importance", "high")
    q.Set("lang", "en")

    page, err := client.Get("/economic-events/filter", q)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    fmt.Println("meta:", page["meta"])

    data, _ := page["data"].([]any)
    for i, item := range data {
        if i >= 5 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(
            event["occurrence_time"],
            event["currency"],
            event["short_name"],
            "actual=", event["actual"],
            "forecast=", event["forecast"],
        )
    }
}
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * Complete Java 11+ client for the Economic Calendar API.
 */
public class EconomicCalendarClient {
    private static final String BASE_URL = "https://api.example.com";
    private static final String API_KEY = "YOUR_API_KEY";
    private static final String SUBSCRIPTION = "basic"; // free | basic | pro | ultra

    private final HttpClient http = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(15))
            .build();

    public String get(String path, Map<String, String> params) throws Exception {
        String query = params.entrySet().stream()
                .filter(e -> e.getValue() != null && !e.getValue().isEmpty())
                .map(e -> encode(e.getKey()) + "=" + encode(e.getValue()))
                .collect(Collectors.joining("&"));

        String uri = BASE_URL + path + (query.isEmpty() ? "" : "?" + query);

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(uri))
                .timeout(Duration.ofSeconds(30))
                .header("X-Api-Key", API_KEY)
                .header("X-Subscription", SUBSCRIPTION)
                .header("Accept", "application/json")
                .GET()
                .build();

        HttpResponse<String> response = http.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
        }
        return response.body();
    }

    private static String encode(String value) {
        return URLEncoder.encode(value, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) throws Exception {
        EconomicCalendarClient client = new EconomicCalendarClient();

        System.out.println("ping: " + client.get("/ping", Map.of()));

        Map<String, String> params = new LinkedHashMap<>();
        params.put("date", "today");
        params.put("importance", "high");
        params.put("lang", "en");

        String body = client.get("/economic-events/filter", params);
        System.out.println(body);
    }
}


1. Root and health

GET /

Returns a simple readiness payload.

#!/usr/bin/env bash
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"

curl -sS "${BASE_URL}/" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "Accept: application/json"
echo
#!/usr/bin/env python3
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

response = requests.get(f"{BASE_URL}/", headers=HEADERS, timeout=30)
response.raise_for_status()
print(response.status_code, response.json())
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const response = await fetch(`${BASE_URL}/`, { headers: HEADERS });
  const body = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(body)}`);
  }
  console.log(body);
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$ch = curl_init($baseUrl . '/');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException("HTTP {$status}: {$raw}");
}

echo $raw, PHP_EOL;
package main

import (
    "fmt"
    "io"
    "net/http"
    "os"
    "time"
)

func main() {
    client := &http.Client{Timeout: 30 * time.Second}
    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/", nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s
", resp.StatusCode, body)
        os.Exit(1)
    }
    fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class RootExample {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
                .connectTimeout(Duration.ofSeconds(15))
                .build();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/"))
                .timeout(Duration.ofSeconds(30))
                .header("X-Api-Key", "YOUR_API_KEY")
                .header("X-Subscription", "basic")
                .header("Accept", "application/json")
                .GET()
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
        }
        System.out.println(response.body());
    }
}
{"status":"ok"}

GET /ping

Preferred health check for monitors and uptime probes.

#!/usr/bin/env bash
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"

curl -sS "${BASE_URL}/ping" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "Accept: application/json"
echo
#!/usr/bin/env python3
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

response = requests.get(f"{BASE_URL}/ping", headers=HEADERS, timeout=30)
response.raise_for_status()
payload = response.json()
assert payload.get("status") == "ok", payload
print(payload)
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const response = await fetch(`${BASE_URL}/ping`, { headers: HEADERS });
  const body = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(body)}`);
  }
  if (body.status !== "ok") {
    throw new Error(`Unexpected payload: ${JSON.stringify(body)}`);
  }
  console.log(body); // { status: "ok" }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$ch = curl_init($baseUrl . '/ping');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400 || ($payload['status'] ?? null) !== 'ok') {
    throw new RuntimeException("Health check failed: HTTP {$status} {$raw}");
}

echo json_encode($payload, JSON_PRETTY_PRINT), PHP_EOL;
package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
    "time"
)

func main() {
    client := &http.Client{Timeout: 30 * time.Second}
    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/ping", nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s
", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    if payload["status"] != "ok" {
        fmt.Fprintf(os.Stderr, "unexpected payload: %s
", body)
        os.Exit(1)
    }
    fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class PingExample {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/ping"))
                .timeout(Duration.ofSeconds(30))
                .header("X-Api-Key", "YOUR_API_KEY")
                .header("X-Subscription", "basic")
                .header("Accept", "application/json")
                .GET()
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
        }
        System.out.println(response.body()); // {"status":"ok"}
    }
}
{"status":"ok"}


2. Languages list — GET /langs-list

Returns every language code the calendar can expose.

#!/usr/bin/env bash
# List supported language codes
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/langs-list" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""List supported language codes"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {}

response = requests.get(
    f"{BASE_URL}/langs-list",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

codes = [row.get("code") for row in payload]
print("count:", len(codes))
print("sample:", codes[:10])
/**
 * List supported language codes
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/langs-list`);
  // no query params

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  const codes = payload.map((row) => row.code);
  console.log("count:", codes.length);
  console.log("sample:", codes.slice(0, 10));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** List supported language codes */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([]);
$ch = curl_init($baseUrl . '/langs-list' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

$codes = array_column($payload, 'code');
echo 'count: ' . count($codes) . PHP_EOL;
echo 'sample: ' . implode(', ', array_slice($codes, 0, 10)) . PHP_EOL;
package main

// List supported language codes

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/langs-list", nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** List supported language codes */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/langs-list"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}
[
  {"code":"en","name":"English"},
  {"code":"tr","name":"Turkish"},
  {"code":"de","name":"German"},
  {"code":"jp","name":"Japanese"},
  {"code":"es","name":"Spanish"}
]

Supported codes include: en, fa, tr, es, de, fr, it, nl, pl, pt, sa, ru, gr, se, fi, jp, kr, cn, hk, id, ms, th, vn, hi.

Availability of each language on /economic-events/filter still depends on your subscription plan.


3. Countries list — GET /countries-list

Returns a map of country_id{ name, flag } for the country_id filter.

Parameter Type Default Description
lang string en Language of country names, e.g. en, de, tr

Example — English map

#!/usr/bin/env bash
# Countries list in English
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/countries-list?lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Countries list in English"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/countries-list",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("United States:", payload.get("5"))
print("keys sample:", list(payload.keys())[:8])
/**
 * Countries list in English
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/countries-list`);
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("United States:", payload["5"]);
  console.log("keys sample:", Object.keys(payload).slice(0, 8));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Countries list in English */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/countries-list' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo 'United States: ' . json_encode($payload['5'] ?? null, JSON_UNESCAPED_UNICODE) . PHP_EOL;
echo 'keys sample: ' . implode(', ', array_slice(array_keys($payload), 0, 8)) . PHP_EOL;
package main

// Countries list in English

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/countries-list?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Countries list in English */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/countries-list?lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}
{
  "5": {"name":"United States","flag":"United_States"},
  "4": {"name":"United Kingdom","flag":"United_Kingdom"},
  "72": {"name":"Euro Zone","flag":"Euro_Zone"},
  "17": {"name":"Germany","flag":"Germany"},
  "35": {"name":"Japan","flag":"Japan"}
}

Example — German country names

#!/usr/bin/env bash
# Countries list in German
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/countries-list?lang=de" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Countries list in German"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "lang": "de",
}

response = requests.get(
    f"{BASE_URL}/countries-list",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("United States:", payload.get("5"))
print("keys sample:", list(payload.keys())[:8])
/**
 * Countries list in German
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/countries-list`);
  url.searchParams.set("lang", "de");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("United States:", payload["5"]);
  console.log("keys sample:", Object.keys(payload).slice(0, 8));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Countries list in German */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'lang' => 'de',
]);
$ch = curl_init($baseUrl . '/countries-list' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo 'United States: ' . json_encode($payload['5'] ?? null, JSON_UNESCAPED_UNICODE) . PHP_EOL;
echo 'keys sample: ' . implode(', ', array_slice(array_keys($payload), 0, 8)) . PHP_EOL;
package main

// Countries list in German

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("lang", "de")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/countries-list?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Countries list in German */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/countries-list?lang=de"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Example — missing language file

#!/usr/bin/env bash
# Missing countries-list language (expect 404)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/countries-list?lang=xx" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Missing countries-list language (expect 404)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "lang": "xx",
}

response = requests.get(
    f"{BASE_URL}/countries-list",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("status:", response.status_code)
print(json.dumps(payload, indent=2, ensure_ascii=False))
/**
 * Missing countries-list language (expect 404)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/countries-list`);
  url.searchParams.set("lang", "xx");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("status:", response.status);
  console.log(JSON.stringify(payload, null, 2));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Missing countries-list language (expect 404) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'lang' => 'xx',
]);
$ch = curl_init($baseUrl . '/countries-list' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "status: {$status}" . PHP_EOL;
echo json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// Missing countries-list language (expect 404)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("lang", "xx")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/countries-list?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Missing countries-list language (expect 404) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/countries-list?lang=xx"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Returns HTTP 404 when that language file is not present on the server.

Frequently used country IDs

ID Country
5 United States
4 United Kingdom
72 Euro Zone
17 Germany
35 Japan
6 Canada
25 Australia
37 China
12 Switzerland

Resolve IDs via /countries-list in production; the table is a convenience reference only.


4. Main filter — GET /economic-events/filter

Primary calendar endpoint.

Query parameters

Parameter Type Default Description
date_from string today Start date YYYY-MM-DD
date_to string today End date YYYY-MM-DD
date string Shortcut: today, yesterday, current_week, previous_week, next_week, or a single YYYY-MM-DD. When set, overrides date_from / date_to
country_id string all all or comma-separated integers
currency string all all or comma-separated codes (USD, EUR, …)
importance string low,medium,high Comma-separated levels, or all
lang string en Language code or comma-separated list (plan limits apply)
cursor string Opaque cursor from meta.next_cursor

Sorting and pagination

  • Ordered by occurrence_time DESC, then occurrence_id DESC (newest first).
  • When returned == limit, meta.next_cursor is set. Pass it unchanged as cursor.
  • Do not construct cursors client-side.
  • Keep identical filters across pages.

Quick-start default

If you call the endpoint with only default parameters (no date, country, currency, importance, or cursor), the API scopes the query to today.

Caching

Responses under /economic-events* are marked no-store so intermediaries do not serve stale calendar data.


Filter examples

A — Today in English

#!/usr/bin/env bash
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=today&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq '{meta, sample: .data[0:3]}'
#!/usr/bin/env python3
import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params={"date": "today", "lang": "en"},
    timeout=30,
)
response.raise_for_status()
payload = response.json()

print("meta:", json.dumps(payload.get("meta"), indent=2))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "today");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'today',
    'lang' => 'en',
]);

$ch = curl_init($baseUrl . '/economic-events/filter?' . $query);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400 || !is_array($payload)) {
    throw new RuntimeException("HTTP {$status}: {$raw}");
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s
",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "today")
    q.Set("lang", "en")

    req, err := http.NewRequest(
        http.MethodGet,
        "https://api.example.com/economic-events/filter?"+q.Encode(),
        nil,
    )
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s
", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])

    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(
            event["occurrence_time"], event["currency"], event["importance"],
            event["short_name"], "actual=", event["actual"], "forecast=", event["forecast"],
        )
    }
}
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class FilterTodayExample {
    public static void main(String[] args) throws Exception {
        Map<String, String> params = new LinkedHashMap<>();
        params.put("date", "today");
        params.put("lang", "en");

        String query = params.entrySet().stream()
                .map(e -> enc(e.getKey()) + "=" + enc(e.getValue()))
                .collect(Collectors.joining("&"));

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/economic-events/filter?" + query))
                .timeout(Duration.ofSeconds(30))
                .header("X-Api-Key", "YOUR_API_KEY")
                .header("X-Subscription", "basic")
                .header("Accept", "application/json")
                .GET()
                .build();

        HttpResponse<String> response = HttpClient.newHttpClient()
                .send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
        }
        System.out.println(response.body());
    }

    private static String enc(String value) {
        return URLEncoder.encode(value, StandardCharsets.UTF_8);
    }
}

B — Yesterday, high impact only

#!/usr/bin/env bash
# B — Yesterday, high impact only
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=yesterday&importance=high&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""B — Yesterday, high impact only"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "yesterday",
    "importance": "high",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * B — Yesterday, high impact only
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "yesterday");
  url.searchParams.set("importance", "high");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** B — Yesterday, high impact only */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'yesterday',
    'importance' => 'high',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// B — Yesterday, high impact only

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "yesterday")
    q.Set("importance", "high")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** B — Yesterday, high impact only */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=yesterday&importance=high&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

C — Current week for USD and EUR (medium + high)

#!/usr/bin/env bash
# C — Current week for USD and EUR (medium + high)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=current_week&currency=USD%2CEUR&importance=high%2Cmedium&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""C — Current week for USD and EUR (medium + high)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "current_week",
    "currency": "USD,EUR",
    "importance": "high,medium",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * C — Current week for USD and EUR (medium + high)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "current_week");
  url.searchParams.set("currency", "USD,EUR");
  url.searchParams.set("importance", "high,medium");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** C — Current week for USD and EUR (medium + high) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'current_week',
    'currency' => 'USD,EUR',
    'importance' => 'high,medium',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// C — Current week for USD and EUR (medium + high)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "current_week")
    q.Set("currency", "USD,EUR")
    q.Set("importance", "high,medium")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** C — Current week for USD and EUR (medium + high) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=current_week&currency=USD,EUR&importance=high,medium&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

D — Previous week, United States only

#!/usr/bin/env bash
# D — Previous week, United States only
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=previous_week&country_id=5&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""D — Previous week, United States only"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "previous_week",
    "country_id": "5",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * D — Previous week, United States only
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "previous_week");
  url.searchParams.set("country_id", "5");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** D — Previous week, United States only */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'previous_week',
    'country_id' => '5',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// D — Previous week, United States only

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "previous_week")
    q.Set("country_id", "5")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** D — Previous week, United States only */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=previous_week&country_id=5&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

E — Next week, Euro Zone + Germany, high impact

#!/usr/bin/env bash
# E — Next week, Euro Zone + Germany, high impact
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=next_week&country_id=72%2C17&importance=high&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""E — Next week, Euro Zone + Germany, high impact"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "next_week",
    "country_id": "72,17",
    "importance": "high",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * E — Next week, Euro Zone + Germany, high impact
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "next_week");
  url.searchParams.set("country_id", "72,17");
  url.searchParams.set("importance", "high");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** E — Next week, Euro Zone + Germany, high impact */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'next_week',
    'country_id' => '72,17',
    'importance' => 'high',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// E — Next week, Euro Zone + Germany, high impact

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "next_week")
    q.Set("country_id", "72,17")
    q.Set("importance", "high")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** E — Next week, Euro Zone + Germany, high impact */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=next_week&country_id=72,17&importance=high&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

F — Explicit month range (research archive)

#!/usr/bin/env bash
# F — Explicit month range (research archive)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="pro"

curl -sS "${BASE_URL}/economic-events/filter?date_from=2026-08-01&date_to=2026-08-31&currency=USD&importance=high&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""F — Explicit month range (research archive)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "pro",
    "Accept": "application/json",
}

params = {
    "date_from": "2026-08-01",
    "date_to": "2026-08-31",
    "currency": "USD",
    "importance": "high",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * F — Explicit month range (research archive)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "pro",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date_from", "2026-08-01");
  url.searchParams.set("date_to", "2026-08-31");
  url.searchParams.set("currency", "USD");
  url.searchParams.set("importance", "high");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** F — Explicit month range (research archive) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: pro',
    'Accept: application/json',
];

$query = http_build_query([
    'date_from' => '2026-08-01',
    'date_to' => '2026-08-31',
    'currency' => 'USD',
    'importance' => 'high',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// F — Explicit month range (research archive)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date_from", "2026-08-01")
    q.Set("date_to", "2026-08-31")
    q.Set("currency", "USD")
    q.Set("importance", "high")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "pro")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** F — Explicit month range (research archive) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date_from=2026-08-01&date_to=2026-08-31&currency=USD&importance=high&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "pro")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Because sorting is descending, the first page contains the latest events in the range. Follow next_cursor until it is null.

G — Single day via date=YYYY-MM-DD

#!/usr/bin/env bash
# G — Single day via `date=YYYY-MM-DD`
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=2026-08-19&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""G — Single day via `date=YYYY-MM-DD`"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "2026-08-19",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * G — Single day via `date=YYYY-MM-DD`
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "2026-08-19");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** G — Single day via `date=YYYY-MM-DD` */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => '2026-08-19',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// G — Single day via `date=YYYY-MM-DD`

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "2026-08-19")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** G — Single day via `date=YYYY-MM-DD` */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=2026-08-19&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Equivalent to date_from=2026-08-19&date_to=2026-08-19.

H — Multi-country basket (US, UK, Canada, Germany, Japan, Australia)

#!/usr/bin/env bash
# H — Multi-country basket (US, UK, Canada, Germany, Japan, Australia)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=current_week&country_id=5%2C4%2C6%2C17%2C35%2C25&importance=high%2Cmedium&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""H — Multi-country basket (US, UK, Canada, Germany, Japan, Australia)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "current_week",
    "country_id": "5,4,6,17,35,25",
    "importance": "high,medium",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * H — Multi-country basket (US, UK, Canada, Germany, Japan, Australia)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "current_week");
  url.searchParams.set("country_id", "5,4,6,17,35,25");
  url.searchParams.set("importance", "high,medium");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** H — Multi-country basket (US, UK, Canada, Germany, Japan, Australia) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'current_week',
    'country_id' => '5,4,6,17,35,25',
    'importance' => 'high,medium',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// H — Multi-country basket (US, UK, Canada, Germany, Japan, Australia)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "current_week")
    q.Set("country_id", "5,4,6,17,35,25")
    q.Set("importance", "high,medium")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** H — Multi-country basket (US, UK, Canada, Germany, Japan, Australia) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=current_week&country_id=5,4,6,17,35,25&importance=high,medium&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

I — Currency-only filter (JPY, three-day window)

#!/usr/bin/env bash
# I — Currency-only filter (JPY, three-day window)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date_from=2026-08-18&date_to=2026-08-20&currency=JPY&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""I — Currency-only filter (JPY, three-day window)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date_from": "2026-08-18",
    "date_to": "2026-08-20",
    "currency": "JPY",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * I — Currency-only filter (JPY, three-day window)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date_from", "2026-08-18");
  url.searchParams.set("date_to", "2026-08-20");
  url.searchParams.set("currency", "JPY");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** I — Currency-only filter (JPY, three-day window) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date_from' => '2026-08-18',
    'date_to' => '2026-08-20',
    'currency' => 'JPY',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// I — Currency-only filter (JPY, three-day window)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date_from", "2026-08-18")
    q.Set("date_to", "2026-08-20")
    q.Set("currency", "JPY")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** I — Currency-only filter (JPY, three-day window) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date_from=2026-08-18&date_to=2026-08-20&currency=JPY&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

J — Importance explicitly set to all

#!/usr/bin/env bash
# J — Importance explicitly set to all
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=today&importance=all&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""J — Importance explicitly set to all"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "today",
    "importance": "all",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * J — Importance explicitly set to all
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "today");
  url.searchParams.set("importance", "all");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** J — Importance explicitly set to all */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'today',
    'importance' => 'all',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// J — Importance explicitly set to all

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "today")
    q.Set("importance", "all")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** J — Importance explicitly set to all */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=today&importance=all&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

importance=all disables the importance predicate.

K — Non-English language (plan permitting)

#!/usr/bin/env bash
# K — Non-English language (plan permitting)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="pro"

curl -sS "${BASE_URL}/economic-events/filter?date=today&lang=de" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""K — Non-English language (plan permitting)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "pro",
    "Accept": "application/json",
}

params = {
    "date": "today",
    "lang": "de",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * K — Non-English language (plan permitting)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "pro",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "today");
  url.searchParams.set("lang", "de");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** K — Non-English language (plan permitting) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: pro',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'today',
    'lang' => 'de',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// K — Non-English language (plan permitting)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "today")
    q.Set("lang", "de")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "pro")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** K — Non-English language (plan permitting) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=today&lang=de"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "pro")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

L — Pro multi-language request (max 5 codes)

#!/usr/bin/env bash
# L — Pro multi-language request (max 5 codes)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="pro"

curl -sS "${BASE_URL}/economic-events/filter?date=current_week&currency=EUR&lang=en%2Cde%2Cfr%2Cit%2Ces" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""L — Pro multi-language request (max 5 codes)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "pro",
    "Accept": "application/json",
}

params = {
    "date": "current_week",
    "currency": "EUR",
    "lang": "en,de,fr,it,es",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * L — Pro multi-language request (max 5 codes)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "pro",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "current_week");
  url.searchParams.set("currency", "EUR");
  url.searchParams.set("lang", "en,de,fr,it,es");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** L — Pro multi-language request (max 5 codes) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: pro',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'current_week',
    'currency' => 'EUR',
    'lang' => 'en,de,fr,it,es',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// L — Pro multi-language request (max 5 codes)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "current_week")
    q.Set("currency", "EUR")
    q.Set("lang", "en,de,fr,it,es")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "pro")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** L — Pro multi-language request (max 5 codes) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=current_week&currency=EUR&lang=en,de,fr,it,es"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "pro")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

More than five codes on Pro returns HTTP 403.

M — Language outside plan (expect 403)

#!/usr/bin/env bash
# M — Language outside plan (expect 403)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=today&lang=de" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""M — Language outside plan (expect 403)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "today",
    "lang": "de",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("status:", response.status_code)
print(json.dumps(payload, indent=2, ensure_ascii=False))
/**
 * M — Language outside plan (expect 403)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "today");
  url.searchParams.set("lang", "de");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("status:", response.status);
  console.log(JSON.stringify(payload, null, 2));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** M — Language outside plan (expect 403) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'today',
    'lang' => 'de',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "status: {$status}" . PHP_EOL;
echo json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// M — Language outside plan (expect 403)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "today")
    q.Set("lang", "de")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** M — Language outside plan (expect 403) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=today&lang=de"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}
{"detail":"Your plan allows only English language"}

N — Cursor pagination loop

#!/usr/bin/env python3
"""Cursor pagination loop for /economic-events/filter."""

import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "pro",
    "Accept": "application/json",
}

params = {
    "date_from": "2026-01-01",
    "date_to": "2026-03-31",
    "importance": "high",
    "lang": "en",
}

all_rows = []
cursor = None
while True:
    page_params = dict(params)
    if cursor:
        page_params["cursor"] = cursor

    response = requests.get(
        f"{BASE_URL}/economic-events/filter",
        headers=HEADERS,
        params=page_params,
        timeout=30,
    )
    response.raise_for_status()
    body = response.json()
    all_rows.extend(body.get("data", []))
    cursor = body.get("meta", {}).get("next_cursor")
    if not cursor:
        break

print("total rows:", len(all_rows))
/**
 * Cursor pagination loop for /economic-events/filter.
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "pro",
  Accept: "application/json",
};

async function fetchAllHighImpact(from, to) {
  const rows = [];
  let cursor = null;

  while (true) {
    const url = new URL(`${BASE_URL}/economic-events/filter`);
    url.searchParams.set("date_from", from);
    url.searchParams.set("date_to", to);
    url.searchParams.set("importance", "high");
    url.searchParams.set("lang", "en");
    if (cursor) url.searchParams.set("cursor", cursor);

    const response = await fetch(url, { headers: HEADERS });
    const body = await response.json();
    if (!response.ok) {
      throw new Error(`HTTP ${response.status}: ${JSON.stringify(body)}`);
    }

    rows.push(...(body.data || []));
    cursor = body.meta?.next_cursor || null;
    if (!cursor) break;
  }

  return rows;
}

fetchAllHighImpact("2026-01-01", "2026-03-31")
  .then((rows) => console.log("total rows:", rows.length))
  .catch((err) => {
    console.error(err);
    process.exit(1);
  });
<?php
declare(strict_types=1);
/** Cursor pagination loop for /economic-events/filter. */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: pro',
    'Accept: application/json',
];

$params = [
    'date_from' => '2026-01-01',
    'date_to' => '2026-03-31',
    'importance' => 'high',
    'lang' => 'en',
];

$all = [];
$cursor = null;
do {
    if ($cursor) {
        $params['cursor'] = $cursor;
    }
    $ch = curl_init($baseUrl . '/economic-events/filter?' . http_build_query($params));
    curl_setopt_array($ch, [
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    $raw = curl_exec($ch);
    $status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    $body = json_decode((string) $raw, true);
    if ($status >= 400 || !is_array($body)) {
        throw new RuntimeException("HTTP {$status}: {$raw}");
    }
    $all = array_merge($all, $body['data'] ?? []);
    $cursor = $body['meta']['next_cursor'] ?? null;
} while ($cursor);

echo 'total rows: ' . count($all) . PHP_EOL;
package main

// Cursor pagination loop for /economic-events/filter.

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    headers := map[string]string{
        "X-Api-Key":      "YOUR_API_KEY",
        "X-Subscription": "pro",
        "Accept":         "application/json",
    }

    var all []any
    cursor := ""
    client := &http.Client{Timeout: 30 * time.Second}

    for {
        q := url.Values{}
        q.Set("date_from", "2026-01-01")
        q.Set("date_to", "2026-03-31")
        q.Set("importance", "high")
        q.Set("lang", "en")
        if cursor != "" {
            q.Set("cursor", cursor)
        }

        req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
        if err != nil {
            panic(err)
        }
        for k, v := range headers {
            req.Header.Set(k, v)
        }

        resp, err := client.Do(req)
        if err != nil {
            panic(err)
        }
        body, _ := io.ReadAll(resp.Body)
        resp.Body.Close()
        if resp.StatusCode >= 400 {
            fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
            os.Exit(1)
        }

        var payload map[string]any
        if err := json.Unmarshal(body, &payload); err != nil {
            panic(err)
        }
        if data, ok := payload["data"].([]any); ok {
            all = append(all, data...)
        }
        meta, _ := payload["meta"].(map[string]any)
        next, _ := meta["next_cursor"].(string)
        if next == "" {
            break
        }
        cursor = next
    }

    fmt.Println("total rows:", len(all))
}
#!/usr/bin/env bash
# Manual pagination with next_cursor (Pro example)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="pro"
CURSOR=""

while true; do
  URL="${BASE_URL}/economic-events/filter?date_from=2026-01-01&date_to=2026-03-31&importance=high&lang=en"
  if [[ -n "${CURSOR}" ]]; then
    URL="${URL}&cursor=${CURSOR}"
  fi

  PAGE="$(curl -sS "${URL}" \
    -H "X-Api-Key: ${API_KEY}" \
    -H "X-Subscription: ${SUBSCRIPTION}" \
    -H "Accept: application/json")"

  echo "${PAGE}" | jq '{returned: .meta.returned, next_cursor: .meta.next_cursor, sample: .data[0:2]}'
  CURSOR="$(echo "${PAGE}" | jq -r '.meta.next_cursor // empty')"
  [[ -z "${CURSOR}" ]] && break
done
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** Cursor pagination loop for /economic-events/filter. */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        String cursor = null;
        int pages = 0;

        while (true) {
            StringBuilder q = new StringBuilder();
            q.append("date_from=2026-01-01&date_to=2026-03-31&importance=high&lang=en");
            if (cursor != null) {
                q.append("&cursor=").append(URLEncoder.encode(cursor, StandardCharsets.UTF_8));
            }

            HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/economic-events/filter?" + q))
                .timeout(Duration.ofSeconds(30))
                .header("X-Api-Key", "YOUR_API_KEY")
                .header("X-Subscription", "pro")
                .header("Accept", "application/json")
                .GET()
                .build();

            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            if (response.statusCode() >= 400) {
                System.err.println("HTTP " + response.statusCode() + ": " + response.body());
                System.exit(1);
            }

            pages++;
            String body = response.body();
            Matcher mCursor = Pattern.compile("\"next_cursor\"\\s*:\\s*\"([^\"]+)\"").matcher(body);
            if (mCursor.find()) {
                cursor = mCursor.group(1);
            } else {
                break;
            }
        }

        System.out.println("pages fetched: " + pages);
    }
}

Keep filters identical across pages. Changing country_id or currency while reusing an old cursor can create gaps or duplicates.

O — Combined power query

#!/usr/bin/env bash
# Combined major FX week query
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date_from=2026-08-15&date_to=2026-08-22&country_id=5%2C4%2C72&currency=USD%2CEUR%2CGBP&importance=high&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Combined major FX week query"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date_from": "2026-08-15",
    "date_to": "2026-08-22",
    "country_id": "5,4,72",
    "currency": "USD,EUR,GBP",
    "importance": "high",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * Combined major FX week query
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date_from", "2026-08-15");
  url.searchParams.set("date_to", "2026-08-22");
  url.searchParams.set("country_id", "5,4,72");
  url.searchParams.set("currency", "USD,EUR,GBP");
  url.searchParams.set("importance", "high");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Combined major FX week query */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date_from' => '2026-08-15',
    'date_to' => '2026-08-22',
    'country_id' => '5,4,72',
    'currency' => 'USD,EUR,GBP',
    'importance' => 'high',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// Combined major FX week query

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date_from", "2026-08-15")
    q.Set("date_to", "2026-08-22")
    q.Set("country_id", "5,4,72")
    q.Set("currency", "USD,EUR,GBP")
    q.Set("importance", "high")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Combined major FX week query */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date_from=2026-08-15&date_to=2026-08-22&country_id=5,4,72&currency=USD,EUR,GBP&importance=high&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Typical “major FX week” query for US, UK, and Euro Zone high-impact events.

P — Invalid date shortcut (400)

#!/usr/bin/env bash
# Invalid date shortcut (expect 400)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=last_month&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Invalid date shortcut (expect 400)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "last_month",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("status:", response.status_code)
print(json.dumps(payload, indent=2, ensure_ascii=False))
/**
 * Invalid date shortcut (expect 400)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "last_month");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("status:", response.status);
  console.log(JSON.stringify(payload, null, 2));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Invalid date shortcut (expect 400) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'last_month',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "status: {$status}" . PHP_EOL;
echo json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// Invalid date shortcut (expect 400)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "last_month")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Invalid date shortcut (expect 400) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=last_month&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Allowed values: YYYY-MM-DD or today / yesterday / current_week / previous_week / next_week.

Q — Invalid cursor (400)

#!/usr/bin/env bash
# Invalid cursor (expect 400)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=today&lang=en&cursor=not-a-real-cursor" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Invalid cursor (expect 400)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "today",
    "lang": "en",
    "cursor": "not-a-real-cursor",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("status:", response.status_code)
print(json.dumps(payload, indent=2, ensure_ascii=False))
/**
 * Invalid cursor (expect 400)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "today");
  url.searchParams.set("lang", "en");
  url.searchParams.set("cursor", "not-a-real-cursor");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("status:", response.status);
  console.log(JSON.stringify(payload, null, 2));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Invalid cursor (expect 400) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'today',
    'lang' => 'en',
    'cursor' => 'not-a-real-cursor',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "status: {$status}" . PHP_EOL;
echo json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// Invalid cursor (expect 400)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "today")
    q.Set("lang", "en")
    q.Set("cursor", "not-a-real-cursor")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Invalid cursor (expect 400) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=today&lang=en&cursor=not-a-real-cursor"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

5. Event release history — GET /economic-events/{event_id}/history

Past occurrences for one event series: dates, forecasts, and actuals.

Path parameters

Parameter Type Description
event_id integer Stable event series ID from filter results

Query parameters

Parameter Type Default Description
lang string en Language for meta labels
limit integer 24 1–200, capped by plan
released_only boolean false If true, only rows with a non-null actual

Response shape

{
  "meta": {
    "api": "legacy",
    "plan": "basic",
    "lang": "en",
    "event_id": 1057,
    "event_name": "United States - JOLTS Job Openings",
    "short_name": "JOLTS Job Openings",
    "country_name": "United States",
    "currency": "USD",
    "importance": "high",
    "unit": "M",
    "returned": 12,
    "limit": 12,
    "cache": "miss"
  },
  "data": [
    {
      "occurrence_id": 90001,
      "date": "2026-06-30",
      "occurrence_time": "2026-06-30T14:00:00+00:00",
      "actual": 7.594,
      "forecast": 7.28,
      "previous": 7.585
    }
  ]
}

History responses may be cached for about 10 minutes (meta.cache is hit or miss).

History examples

H1 — Default recent releases

#!/usr/bin/env bash
# Event history default sample
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/1057/history?limit=24&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Event history default sample"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "limit": 24,
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/1057/history",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

meta = payload.get("meta", {})
print(meta.get("short_name"), "returned=", meta.get("returned"))
for row in payload.get("data", [])[:10]:
    print(row.get("date"), "actual=", row.get("actual"), "forecast=", row.get("forecast"))
/**
 * Event history default sample
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/1057/history`);
  url.searchParams.set("limit", "24");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log(payload.meta.short_name, "returned=", payload.meta.returned);
  for (const row of (payload.data || []).slice(0, 10)) {
    console.log(row.date, "actual=", row.actual, "forecast=", row.forecast);
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Event history default sample */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'limit' => 24,
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/1057/history' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

$meta = $payload['meta'] ?? [];
echo ($meta['short_name'] ?? '') . ' returned=' . ($meta['returned'] ?? 0) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $row) {
    echo ($row['date'] ?? '') . ' actual=' . ($row['actual'] ?? 'null')
        . ' forecast=' . ($row['forecast'] ?? 'null') . PHP_EOL;
}
package main

// Event history default sample

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("limit", "24")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/1057/history?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Event history default sample */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/1057/history?limit=24&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

H2 — Only published actuals

#!/usr/bin/env bash
# History with released_only=true
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/1057/history?limit=24&released_only=True&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""History with released_only=true"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "limit": 24,
    "released_only": True,
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/1057/history",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

meta = payload.get("meta", {})
print(meta.get("short_name"), "returned=", meta.get("returned"))
for row in payload.get("data", [])[:10]:
    print(row.get("date"), "actual=", row.get("actual"), "forecast=", row.get("forecast"))
/**
 * History with released_only=true
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/1057/history`);
  url.searchParams.set("limit", "24");
  url.searchParams.set("released_only", "true");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log(payload.meta.short_name, "returned=", payload.meta.returned);
  for (const row of (payload.data || []).slice(0, 10)) {
    console.log(row.date, "actual=", row.actual, "forecast=", row.forecast);
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** History with released_only=true */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'limit' => 24,
    'released_only' => true,
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/1057/history' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

$meta = $payload['meta'] ?? [];
echo ($meta['short_name'] ?? '') . ' returned=' . ($meta['returned'] ?? 0) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $row) {
    echo ($row['date'] ?? '') . ' actual=' . ($row['actual'] ?? 'null')
        . ' forecast=' . ($row['forecast'] ?? 'null') . PHP_EOL;
}
package main

// History with released_only=true

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("limit", "24")
    q.Set("released_only", "true")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/1057/history?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** History with released_only=true */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/1057/history?limit=24&released_only=true&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Prefer released_only=true for charts so pending rows without actuals are excluded.

H3 — Free-plan capped sample

#!/usr/bin/env bash
# Free plan history cap
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="free"

curl -sS "${BASE_URL}/economic-events/121/history?limit=100&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Free plan history cap"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "free",
    "Accept": "application/json",
}

params = {
    "limit": 100,
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/121/history",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

meta = payload.get("meta", {})
print(meta.get("short_name"), "returned=", meta.get("returned"))
for row in payload.get("data", [])[:10]:
    print(row.get("date"), "actual=", row.get("actual"), "forecast=", row.get("forecast"))
/**
 * Free plan history cap
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "free",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/121/history`);
  url.searchParams.set("limit", "100");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log(payload.meta.short_name, "returned=", payload.meta.returned);
  for (const row of (payload.data || []).slice(0, 10)) {
    console.log(row.date, "actual=", row.actual, "forecast=", row.forecast);
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Free plan history cap */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: free',
    'Accept: application/json',
];

$query = http_build_query([
    'limit' => 100,
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/121/history' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

$meta = $payload['meta'] ?? [];
echo ($meta['short_name'] ?? '') . ' returned=' . ($meta['returned'] ?? 0) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $row) {
    echo ($row['date'] ?? '') . ' actual=' . ($row['actual'] ?? 'null')
        . ' forecast=' . ($row['forecast'] ?? 'null') . PHP_EOL;
}
package main

// Free plan history cap

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("limit", "100")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/121/history?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "free")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Free plan history cap */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/121/history?limit=100&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "free")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

H4 — Unknown event (404)

#!/usr/bin/env bash
# Unknown event_id (expect 404)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/999999999/history?lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Unknown event_id (expect 404)"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/999999999/history",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("status:", response.status_code)
print(json.dumps(payload, indent=2, ensure_ascii=False))
/**
 * Unknown event_id (expect 404)
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/999999999/history`);
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("status:", response.status);
  console.log(JSON.stringify(payload, null, 2));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Unknown event_id (expect 404) */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/999999999/history' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "status: {$status}" . PHP_EOL;
echo json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// Unknown event_id (expect 404)

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/999999999/history?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Unknown event_id (expect 404) */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/999999999/history?lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

H5 — Workflow: filter → history

#!/usr/bin/env python3
"""Workflow: filter high-impact USD events, then fetch release history."""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

filt = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params={
        "date": "yesterday",
        "importance": "high",
        "currency": "USD",
        "lang": "en",
    },
    timeout=30,
)
filt.raise_for_status()
filter_payload = filt.json()
if not filter_payload.get("data"):
    raise SystemExit("No events found for yesterday high-impact USD")

event_id = filter_payload["data"][0]["event_id"]
hist = requests.get(
    f"{BASE_URL}/economic-events/{event_id}/history",
    headers=HEADERS,
    params={"released_only": True, "limit": 24, "lang": "en"},
    timeout=30,
)
hist.raise_for_status()
history = hist.json()

print("event_id:", event_id)
print("series:", history.get("meta", {}).get("short_name"))
print(json.dumps(history.get("data", [])[:5], indent=2, ensure_ascii=False))
/**
 * Workflow: filter high-impact USD events, then fetch release history.
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const filterUrl = new URL(`${BASE_URL}/economic-events/filter`);
  filterUrl.searchParams.set("date", "yesterday");
  filterUrl.searchParams.set("importance", "high");
  filterUrl.searchParams.set("currency", "USD");
  filterUrl.searchParams.set("lang", "en");

  const filterRes = await fetch(filterUrl, { headers: HEADERS });
  const filterPayload = await filterRes.json();
  if (!filterRes.ok) {
    throw new Error(`Filter HTTP ${filterRes.status}: ${JSON.stringify(filterPayload)}`);
  }
  if (!filterPayload.data?.length) {
    throw new Error("No events found for yesterday high-impact USD");
  }

  const eventId = filterPayload.data[0].event_id;
  const histUrl = new URL(`${BASE_URL}/economic-events/${eventId}/history`);
  histUrl.searchParams.set("released_only", "true");
  histUrl.searchParams.set("limit", "24");
  histUrl.searchParams.set("lang", "en");

  const histRes = await fetch(histUrl, { headers: HEADERS });
  const history = await histRes.json();
  if (!histRes.ok) {
    throw new Error(`History HTTP ${histRes.status}: ${JSON.stringify(history)}`);
  }

  console.log("event_id:", eventId);
  console.log("series:", history.meta?.short_name);
  console.log(history.data?.slice(0, 5));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Workflow: filter high-impact USD events, then fetch release history. */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

function apiGet(string $url, array $headers): array {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    $raw = curl_exec($ch);
    $status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    $payload = json_decode((string) $raw, true);
    if ($status >= 400 || !is_array($payload)) {
        throw new RuntimeException("HTTP {$status}: {$raw}");
    }
    return $payload;
}

$filter = apiGet(
    $baseUrl . '/economic-events/filter?' . http_build_query([
        'date' => 'yesterday',
        'importance' => 'high',
        'currency' => 'USD',
        'lang' => 'en',
    ]),
    $headers
);
if (empty($filter['data'][0]['event_id'])) {
    throw new RuntimeException('No events found for yesterday high-impact USD');
}

$eventId = (int) $filter['data'][0]['event_id'];
$history = apiGet(
    $baseUrl . '/economic-events/' . $eventId . '/history?' . http_build_query([
        'released_only' => 'true',
        'limit' => 24,
        'lang' => 'en',
    ]),
    $headers
);

echo 'event_id: ' . $eventId . PHP_EOL;
echo 'series: ' . ($history['meta']['short_name'] ?? '') . PHP_EOL;
echo json_encode(array_slice($history['data'] ?? [], 0, 5), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// Workflow: filter high-impact USD events, then fetch release history.

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func getJSON(client *http.Client, rawURL string) map[string]any {
    req, err := http.NewRequest(http.MethodGet, rawURL, nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }
    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    return payload
}

func main() {
    client := &http.Client{Timeout: 30 * time.Second}

    fq := url.Values{}
    fq.Set("date", "yesterday")
    fq.Set("importance", "high")
    fq.Set("currency", "USD")
    fq.Set("lang", "en")
    filt := getJSON(client, "https://api.example.com/economic-events/filter?"+fq.Encode())

    data, _ := filt["data"].([]any)
    if len(data) == 0 {
        panic("No events found")
    }
    first, _ := data[0].(map[string]any)
    eventID := fmt.Sprint(first["event_id"])

    hq := url.Values{}
    hq.Set("released_only", "true")
    hq.Set("limit", "24")
    hq.Set("lang", "en")
    hist := getJSON(client, "https://api.example.com/economic-events/"+eventID+"/history?"+hq.Encode())

    meta, _ := hist["meta"].(map[string]any)
    fmt.Println("event_id:", eventID)
    fmt.Println("series:", meta["short_name"])
    fmt.Println(hist["data"])
}
#!/usr/bin/env bash
# Workflow: filter yesterday high-impact USD, then history for first event_id
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

FILTER="$(curl -sS "${BASE_URL}/economic-events/filter?date=yesterday&importance=high&currency=USD&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json")"

EVENT_ID="$(echo "${FILTER}" | jq -r '.data[0].event_id')"
echo "event_id=${EVENT_ID}"

curl -sS "${BASE_URL}/economic-events/${EVENT_ID}/history?released_only=true&limit=24&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq '{meta, sample: .data[0:5]}'
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** Workflow: filter high-impact USD events, then fetch release history. */
public class Example {
    private static String get(HttpClient client, String uri) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(uri))
            .timeout(Duration.ofSeconds(30))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
        }
        return response.body();
    }

    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        String filterBody = get(
            client,
            "https://api.example.com/economic-events/filter?date=yesterday&importance=high&currency=USD&lang=en"
        );
        Matcher m = Pattern.compile("\"event_id\"\\s*:\\s*(\\d+)").matcher(filterBody);
        if (!m.find()) {
            throw new IllegalStateException("No event_id found in filter response");
        }
        String eventId = m.group(1);

        String historyBody = get(
            client,
            "https://api.example.com/economic-events/" + eventId
                + "/history?released_only=true&limit=24&lang=en"
        );
        System.out.println("event_id: " + eventId);
        System.out.println(historyBody);
    }
}

6. Export — POST /economic-events/export

Starts an asynchronous export job. Ultra plan required.

#!/usr/bin/env bash
# Start Ultra export job
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="ultra"

curl -sS -X POST "${BASE_URL}/economic-events/export" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Start Ultra export job"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "ultra",
    "Accept": "application/json",
}

response = requests.post(f"{BASE_URL}/economic-events/export", headers=HEADERS, timeout=30)
print("status:", response.status_code)
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
/**
 * Start Ultra export job
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "ultra",
  Accept: "application/json",
};

async function main() {
  const response = await fetch(`${BASE_URL}/economic-events/export`, {
    method: "POST",
    headers: HEADERS,
  });
  const payload = await response.json();
  console.log("status:", response.status);
  console.log(payload);
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Start Ultra export job */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: ultra',
    'Accept: application/json',
];

$ch = curl_init($baseUrl . '/economic-events/export');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
echo "status: {$status}" . PHP_EOL;
echo json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// Start Ultra export job

import (
    "fmt"
    "io"
    "net/http"
    "os"
    "time"
)

func main() {
    req, err := http.NewRequest(http.MethodPost, "https://api.example.com/economic-events/export", nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "ultra")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println("status:", resp.StatusCode)
    fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Start Ultra export job */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/export"))
            .timeout(Duration.ofSeconds(30))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "ultra")
            .header("Accept", "application/json")
            .POST(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("status: " + response.statusCode());
        System.out.println(response.body());
    }
}
{
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "started"
}

Non-Ultra plans receive HTTP 403. Confirm export delivery with your operator; packaging may vary by deployment.


7. Stream — GET /economic-events/stream

NDJSON stream (application/x-ndjson) for a date range. Ultra or Enterprise required.

Parameter Type Required Description
date_from string Yes YYYY-MM-DD
date_to string Yes YYYY-MM-DD
#!/usr/bin/env bash
# NDJSON stream for a date range
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="ultra"

curl -N -sS "${BASE_URL}/economic-events/stream?date_from=2026-08-01&date_to=2026-08-07" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/x-ndjson"
#!/usr/bin/env python3
"""NDJSON stream for a date range"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "ultra",
    "Accept": "application/x-ndjson",
}

params = {
    "date_from": "2026-08-01",
    "date_to": "2026-08-07",
}

with requests.get(
    f"{BASE_URL}/economic-events/stream",
    headers=HEADERS,
    params=params,
    stream=True,
    timeout=120,
) as response:
    response.raise_for_status()
    for line in response.iter_lines(decode_unicode=True):
        if not line:
            continue
        event = json.loads(line)
        print(json.dumps(event, ensure_ascii=False))
/**
 * NDJSON stream for a date range
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "ultra",
  Accept: "application/x-ndjson",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/stream`);
  url.searchParams.set("date_from", "2026-08-01");
  url.searchParams.set("date_to", "2026-08-07");

  const response = await fetch(url, { headers: HEADERS });
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  }

  const text = await response.text();
  for (const line of text.split("\n").filter(Boolean)) {
    console.log(JSON.parse(line));
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** NDJSON stream for a date range */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: ultra',
    'Accept: application/x-ndjson',
];

$query = http_build_query([
    'date_from' => '2026-08-01',
    'date_to' => '2026-08-07',
]);
$ch = curl_init($baseUrl . '/economic-events/stream?' . $query);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 120,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException("HTTP {$status}: {$raw}");
}

foreach (preg_split('/\r?\n/', (string) $raw) as $line) {
    $line = trim($line);
    if ($line === '') {
        continue;
    }
    $event = json_decode($line, true);
    echo json_encode($event, JSON_UNESCAPED_UNICODE) . PHP_EOL;
}
package main

// NDJSON stream for a date range

import (
    "bufio"
    "fmt"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date_from", "2026-08-01")
    q.Set("date_to", "2026-08-07")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/stream?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "ultra")
    req.Header.Set("Accept", "application/x-ndjson")

    client := &http.Client{Timeout: 120 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d\n", resp.StatusCode)
        os.Exit(1)
    }

    scanner := bufio.NewScanner(resp.Body)
    for scanner.Scan() {
        line := scanner.Text()
        if line != "" {
            fmt.Println(line)
        }
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** NDJSON stream for a date range */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/stream?date_from=2026-08-01&date_to=2026-08-07"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "ultra")
            .header("Accept", "application/x-ndjson")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Each line is one JSON object. Prefer paginated /filter for interactive UIs; use stream for bulk offline ingestion when available.


8. HTML calendar redirect — GET /calendar

HTTP 302 redirect to the public HTML calendar host. API clients usually do not need this route.

#!/usr/bin/env bash
# HTML calendar redirect
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"

curl -sSI "${BASE_URL}/calendar" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "Accept: application/json" | head -n 20
#!/usr/bin/env python3
"""HTML calendar redirect"""

import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "Accept": "application/json",
}

response = requests.get(
    f"{BASE_URL}/calendar",
    headers=HEADERS,
    allow_redirects=False,
    timeout=30,
)
print("status:", response.status_code)
print("location:", response.headers.get("Location"))
/**
 * HTML calendar redirect
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  Accept: "application/json",
};

async function main() {
  const response = await fetch(`${BASE_URL}/calendar`, {
    headers: HEADERS,
    redirect: "manual",
  });
  console.log("status:", response.status);
  console.log("location:", response.headers.get("Location"));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** HTML calendar redirect */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'Accept: application/json',
];

$ch = curl_init($baseUrl . '/calendar');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true,
    CURLOPT_NOBODY => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "status: {$status}" . PHP_EOL;
if (preg_match('/^Location:\s*(.+)$/mi', (string) $raw, $m)) {
    echo "location: " . trim($m[1]) . PHP_EOL;
}
package main

// HTML calendar redirect

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/calendar", nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** HTML calendar redirect */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/calendar"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Error reference

HTTP Typical cause
400 Invalid date shortcut or invalid cursor
403 Language not allowed for plan; export/stream without required tier; Pro lang=all or too many languages
404 Unknown countries-list language file; no history for event_id
422 Invalid types (e.g. non-integer event_id)
500 Unexpected server / database error
{"detail":"Human-readable message"}

Handling errors in clients

#!/usr/bin/env python3
"""Typed error handling for /economic-events/filter."""

import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

def get_filter(**params):
    response = requests.get(
        f"{BASE_URL}/economic-events/filter",
        headers=HEADERS,
        params=params,
        timeout=30,
    )
    payload = response.json() if response.content else {}
    if response.status_code == 400:
        raise ValueError(payload.get("detail", "Bad request"))
    if response.status_code == 403:
        raise PermissionError(payload.get("detail", "Forbidden"))
    if response.status_code == 404:
        raise LookupError(payload.get("detail", "Not found"))
    response.raise_for_status()
    return payload

if __name__ == "__main__":
    try:
        data = get_filter(date="today", lang="en")
        print("returned:", data.get("meta", {}).get("returned"))
    except (ValueError, PermissionError, LookupError) as exc:
        print("client error:", exc)
/**
 * Typed error handling for /economic-events/filter.
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function getFilter(params) {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  Object.entries(params).forEach(([key, value]) => url.searchParams.set(key, String(value)));

  const response = await fetch(url, { headers: HEADERS });
  const body = await response.json();
  if (!response.ok) {
    const detail = body.detail || response.statusText;
    const error = new Error(detail);
    error.status = response.status;
    throw error;
  }
  return body;
}

getFilter({ date: "today", lang: "en" })
  .then((body) => console.log("returned:", body.meta?.returned))
  .catch((err) => {
    console.error("client error:", err.status, err.message);
    process.exit(1);
  });
<?php
declare(strict_types=1);
/** Typed error handling for /economic-events/filter. */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

function getFilter(string $baseUrl, array $headers, array $params): array {
    $ch = curl_init($baseUrl . '/economic-events/filter?' . http_build_query($params));
    curl_setopt_array($ch, [
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    $raw = curl_exec($ch);
    $code = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    $body = json_decode((string) $raw, true);
    if ($code >= 400) {
        $detail = is_array($body) ? ($body['detail'] ?? "HTTP {$code}") : "HTTP {$code}";
        throw new RuntimeException($detail, $code);
    }
    return is_array($body) ? $body : [];
}

try {
    $payload = getFilter($baseUrl, $headers, ['date' => 'today', 'lang' => 'en']);
    echo 'returned: ' . ($payload['meta']['returned'] ?? 0) . PHP_EOL;
} catch (RuntimeException $e) {
    fwrite(STDERR, 'client error: ' . $e->getMessage() . PHP_EOL);
    exit(1);
}
package main

// Typed error handling for /economic-events/filter.

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func getFilter(params url.Values) (map[string]any, error) {
    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+params.Encode(), nil)
    if err != nil {
        return nil, err
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)

    var payload map[string]any
    _ = json.Unmarshal(body, &payload)
    if resp.StatusCode >= 400 {
        detail, _ := payload["detail"].(string)
        if detail == "" {
            detail = string(body)
        }
        return nil, fmt.Errorf("HTTP %d: %s", resp.StatusCode, detail)
    }
    return payload, nil
}

func main() {
    q := url.Values{}
    q.Set("date", "today")
    q.Set("lang", "en")
    payload, err := getFilter(q)
    if err != nil {
        fmt.Fprintln(os.Stderr, "client error:", err)
        os.Exit(1)
    }
    meta, _ := payload["meta"].(map[string]any)
    fmt.Println("returned:", meta["returned"])
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Typed error handling for /economic-events/filter. */
public class Example {
    public static String getFilter(String query) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?" + query))
            .timeout(Duration.ofSeconds(30))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
        }
        return response.body();
    }

    public static void main(String[] args) throws Exception {
        try {
            String body = getFilter("date=today&lang=en");
            System.out.println(body);
        } catch (IllegalStateException ex) {
            System.err.println("client error: " + ex.getMessage());
            System.exit(1);
        }
    }
}
#!/usr/bin/env ruby
# Typed error handling for /economic-events/filter.

require "net/http"
require "json"
require "uri"

BASE_URL = "https://api.example.com"

def get_filter(params)
  uri = URI("#{BASE_URL}/economic-events/filter")
  uri.query = URI.encode_www_form(params)
  req = Net::HTTP::Get.new(uri)
  req["X-Api-Key"] = "YOUR_API_KEY"
  req["X-Subscription"] = "basic"
  req["Accept"] = "application/json"

  res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
  body = JSON.parse(res.body)
  raise body["detail"] || "HTTP #{res.code}" unless res.is_a?(Net::HTTPSuccess)
  body
end

begin
  payload = get_filter("date" => "today", "lang" => "en")
  puts "returned: #{payload.dig("meta", "returned")}"
rescue StandardError => e
  warn "client error: #{e.message}"
  exit 1
end
using System;
using System.Net.Http;
using System.Threading.Tasks;

/// Typed error handling for /economic-events/filter.
public class Example
{
    private static readonly HttpClient Client = new HttpClient
    {
        Timeout = TimeSpan.FromSeconds(30)
    };

    public static async Task<string> GetFilterAsync(string query)
    {
        using var request = new HttpRequestMessage(
            HttpMethod.Get,
            $"https://api.example.com/economic-events/filter?{query}");
        request.Headers.Add("X-Api-Key", "YOUR_API_KEY");
        request.Headers.Add("X-Subscription", "basic");
        request.Headers.Add("Accept", "application/json");

        using var response = await Client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        if (!response.IsSuccessStatusCode)
        {
            throw new InvalidOperationException($"HTTP {(int)response.StatusCode}: {body}");
        }
        return body;
    }

    public static async Task Main()
    {
        try
        {
            var json = await GetFilterAsync("date=today&lang=en");
            Console.WriteLine(json);
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine($"client error: {ex.Message}");
            Environment.Exit(1);
        }
    }
}

Data freshness and semantics

  • Rows are synchronized from upstream economic-calendar feeds on a schedule.
  • actual becomes non-null after the release is published and imported.
  • forecast and previous may exist before release time.
  • Pending events often have actual = null.
  • actual_to_forecast is a source qualitative comparison, not a computed surprise percentage.
  • Treat the API as a near-term calendar database, not a tick-level market feed.

Interpreting release values

Situation Typical field state
Future scheduled event actual null, forecast may be set
Just released actual filled after sync; forecast and previous present
Revised release revised_to_previous may be non-neutral; values updated on next import
Speech / qualitative event numeric fields may all be null

Client-side surprise (optional)

This API does not return precomputed surprise metrics. If you need them locally:

#!/usr/bin/env python3
"""Local surprise helpers for actual vs forecast."""

def surprise(actual, forecast):
    if actual is None or forecast is None:
        return None
    return actual - forecast

def surprise_pct(actual, forecast):
    delta = surprise(actual, forecast)
    if delta is None or forecast == 0:
        return None
    return 100.0 * delta / abs(forecast)

if __name__ == "__main__":
    print(surprise(7.5, 7.2))
    print(surprise_pct(7.5, 7.2))
/**
 * Local surprise helpers for actual vs forecast.
 */
function surprise(actual, forecast) {
  if (actual == null || forecast == null) return null;
  return actual - forecast;
}

function surprisePct(actual, forecast) {
  const delta = surprise(actual, forecast);
  if (delta == null || forecast === 0) return null;
  return (100 * delta) / Math.abs(forecast);
}

console.log(surprise(7.5, 7.2));
console.log(surprisePct(7.5, 7.2));
<?php
declare(strict_types=1);
/** Local surprise helpers for actual vs forecast. */

function surprise($actual, $forecast) {
    if ($actual === null || $forecast === null) {
        return null;
    }
    return $actual - $forecast;
}

function surprise_pct($actual, $forecast) {
    $delta = surprise($actual, $forecast);
    if ($delta === null || (float) $forecast === 0.0) {
        return null;
    }
    return 100.0 * $delta / abs((float) $forecast);
}

echo surprise(7.5, 7.2) . PHP_EOL;
echo surprise_pct(7.5, 7.2) . PHP_EOL;
package main

import "fmt"

func surprise(actual, forecast *float64) *float64 {
    if actual == nil || forecast == nil {
        return nil
    }
    v := *actual - *forecast
    return &v
}

func main() {
    a, f := 7.5, 7.2
    fmt.Println(*surprise(&a, &f))
}
public class Example {
    public static Double surprise(Double actual, Double forecast) {
        if (actual == null || forecast == null) return null;
        return actual - forecast;
    }

    public static void main(String[] args) {
        System.out.println(surprise(7.5, 7.2));
    }
}

Remember that for some indicators (for example unemployment), a higher print can be market-negative even if it “beats” forecast. Domain interpretation is up to your application.


Field deep dive

Identity fields

  • occurrence_id: unique per release row. Prefer this as a deduplication key when polling.
  • event_id: stable across months for the same series. Required for /history.
  • lang: language of the stored/returned text fields for that row.

Timing fields

  • occurrence_time: release timestamp from the calendar source.
  • Filter windows use inclusive calendar days from 00:00:00 through 23:59:59 on date_from / date_to (as interpreted by the service).

Classification fields

  • importance: low, medium, high.
  • category: free-text category from the source (inflation, employment, gdp, and others).
  • country_id / country_name / country_flag: geography metadata.
  • currency: ISO-style code when the event is tied to a currency.

Value fields

  • actual, forecast, previous: numbers or null.
  • unit: display unit such as % or M.
  • precision: suggested decimal precision from the source.
  • preliminary: whether the print is marked preliminary.
  • reference_period: human-readable period label (month, quarter, etc.).

Narrative fields

  • short_name, long_name, description: localized titles and text when available.
  • page_link, source, source_url: provenance metadata when present.

Additional filter combinations

R — Low-importance only (noise vs signal experiments)

#!/usr/bin/env bash
# Low importance only
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=current_week&importance=low&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Low importance only"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "current_week",
    "importance": "low",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * Low importance only
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "current_week");
  url.searchParams.set("importance", "low");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Low importance only */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'current_week',
    'importance' => 'low',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// Low importance only

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "current_week")
    q.Set("importance", "low")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Low importance only */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=current_week&importance=low&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

S — Speeches and qualitative events (USD, current week)

#!/usr/bin/env bash
# USD medium+high current week
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date=current_week&currency=USD&importance=high%2Cmedium&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""USD medium+high current week"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date": "current_week",
    "currency": "USD",
    "importance": "high,medium",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * USD medium+high current week
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date", "current_week");
  url.searchParams.set("currency", "USD");
  url.searchParams.set("importance", "high,medium");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** USD medium+high current week */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date' => 'current_week',
    'currency' => 'USD',
    'importance' => 'high,medium',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// USD medium+high current week

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date", "current_week")
    q.Set("currency", "USD")
    q.Set("importance", "high,medium")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** USD medium+high current week */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date=current_week&currency=USD&importance=high,medium&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

T — Tight window around a CPI day

#!/usr/bin/env bash
# US high-impact around CPI window
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="basic"

curl -sS "${BASE_URL}/economic-events/filter?date_from=2026-08-12&date_to=2026-08-14&country_id=5&importance=high&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""US high-impact around CPI window"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

params = {
    "date_from": "2026-08-12",
    "date_to": "2026-08-14",
    "country_id": "5",
    "importance": "high",
    "lang": "en",
}

response = requests.get(
    f"{BASE_URL}/economic-events/filter",
    headers=HEADERS,
    params=params,
    timeout=30,
)
payload = response.json() if response.content else {}
if response.status_code >= 400:
    print("status:", response.status_code)
    print(json.dumps(payload, indent=2, ensure_ascii=False))
    raise SystemExit(1)

print("meta:", json.dumps(payload.get("meta"), indent=2, ensure_ascii=False))
for event in payload.get("data", [])[:10]:
    print(
        f"{event.get('occurrence_time')} | {event.get('currency')} | "
        f"{event.get('importance')} | {event.get('short_name')} | "
        f"actual={event.get('actual')} forecast={event.get('forecast')}"
    )
/**
 * US high-impact around CPI window
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/filter`);
  url.searchParams.set("date_from", "2026-08-12");
  url.searchParams.set("date_to", "2026-08-14");
  url.searchParams.set("country_id", "5");
  url.searchParams.set("importance", "high");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }

  console.log("meta:", payload.meta);
  for (const event of (payload.data || []).slice(0, 10)) {
    console.log(
      event.occurrence_time,
      event.currency,
      event.importance,
      event.short_name,
      "actual=",
      event.actual,
      "forecast=",
      event.forecast
    );
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** US high-impact around CPI window */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$query = http_build_query([
    'date_from' => '2026-08-12',
    'date_to' => '2026-08-14',
    'country_id' => '5',
    'importance' => 'high',
    'lang' => 'en',
]);
$ch = curl_init($baseUrl . '/economic-events/filter' . ($query !== '' ? '?' . $query : ''));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
if ($status >= 400) {
    fwrite(STDERR, "HTTP {$status}: {$raw}\n");
    exit(1);
}

echo "meta: " . json_encode($payload['meta'] ?? null, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
foreach (array_slice($payload['data'] ?? [], 0, 10) as $event) {
    echo sprintf(
        "%s | %s | %s | %s | actual=%s forecast=%s\n",
        $event['occurrence_time'] ?? '',
        $event['currency'] ?? '',
        $event['importance'] ?? '',
        $event['short_name'] ?? '',
        $event['actual'] ?? 'null',
        $event['forecast'] ?? 'null'
    );
}
package main

// US high-impact around CPI window

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date_from", "2026-08-12")
    q.Set("date_to", "2026-08-14")
    q.Set("country_id", "5")
    q.Set("importance", "high")
    q.Set("lang", "en")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    fmt.Println("meta:", payload["meta"])
    data, _ := payload["data"].([]any)
    for i, item := range data {
        if i >= 10 {
            break
        }
        event, _ := item.(map[string]any)
        fmt.Println(event["occurrence_time"], event["currency"], event["importance"], event["short_name"])
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** US high-impact around CPI window */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/filter?date_from=2026-08-12&date_to=2026-08-14&country_id=5&importance=high&lang=en"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Building a simple weekly calendar module

Complete end-to-end example: load metadata, fetch the week, group by day, and attach history for high-impact cards.

#!/usr/bin/env python3
"""Build a simple weekly calendar module from the Economic Calendar API."""

from __future__ import annotations

from collections import defaultdict
from typing import Any, Dict, List

import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "pro",
    "Accept": "application/json",
}

def main() -> None:
    # Step 1 — Load metadata
    langs = requests.get(f"{BASE_URL}/langs-list", headers=HEADERS, timeout=30).json()
    countries = requests.get(
        f"{BASE_URL}/countries-list",
        headers=HEADERS,
        params={"lang": "en"},
        timeout=30,
    ).json()
    print("languages:", len(langs), "countries:", len(countries))

    # Step 2 — Fetch the week
    week = requests.get(
        f"{BASE_URL}/economic-events/filter",
        headers=HEADERS,
        params={
            "date": "current_week",
            "country_id": "5,4,72,17,35",
            "importance": "high,medium",
            "lang": "en",
        },
        timeout=30,
    ).json()

    # Step 3 — Group by calendar day
    by_day: Dict[str, List[Dict[str, Any]]] = defaultdict(list)
    for row in week.get("data", []):
        day = str(row.get("occurrence_time", ""))[:10]
        by_day[day].append(row)

    for day in sorted(by_day):
        print(day, len(by_day[day]))

    # Step 4 — Attach history for high-impact cards
    for row in week.get("data", []):
        if row.get("importance") != "high":
            continue
        hist = requests.get(
            f"{BASE_URL}/economic-events/{row['event_id']}/history",
            headers=HEADERS,
            params={"released_only": True, "limit": 12, "lang": "en"},
            timeout=30,
        ).json()
        row["_history"] = hist.get("data", [])
        print(row.get("short_name"), "history points:", len(row["_history"]))

if __name__ == "__main__":
    main()
/**
 * Build a simple weekly calendar module from the Economic Calendar API.
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "pro",
  Accept: "application/json",
};

async function getJson(url) {
  const response = await fetch(url, { headers: HEADERS });
  const payload = await response.json();
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${JSON.stringify(payload)}`);
  }
  return payload;
}

async function main() {
  // Step 1 — Load metadata
  const langs = await getJson(`${BASE_URL}/langs-list`);
  const countriesUrl = new URL(`${BASE_URL}/countries-list`);
  countriesUrl.searchParams.set("lang", "en");
  const countries = await getJson(countriesUrl);
  console.log("languages:", langs.length, "countries:", Object.keys(countries).length);

  // Step 2 — Fetch the week
  const weekUrl = new URL(`${BASE_URL}/economic-events/filter`);
  weekUrl.searchParams.set("date", "current_week");
  weekUrl.searchParams.set("country_id", "5,4,72,17,35");
  weekUrl.searchParams.set("importance", "high,medium");
  weekUrl.searchParams.set("lang", "en");
  const week = await getJson(weekUrl);

  // Step 3 — Group by calendar day
  const byDay = {};
  for (const row of week.data || []) {
    const day = String(row.occurrence_time).slice(0, 10);
    (byDay[day] ||= []).push(row);
  }
  Object.keys(byDay)
    .sort()
    .forEach((day) => console.log(day, byDay[day].length));

  // Step 4 — Attach history for high-impact cards
  for (const row of week.data || []) {
    if (row.importance !== "high") continue;
    const histUrl = new URL(`${BASE_URL}/economic-events/${row.event_id}/history`);
    histUrl.searchParams.set("released_only", "true");
    histUrl.searchParams.set("limit", "12");
    histUrl.searchParams.set("lang", "en");
    const hist = await getJson(histUrl);
    row._history = hist.data || [];
    console.log(row.short_name, "history points:", row._history.length);
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Build a simple weekly calendar module from the Economic Calendar API. */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: pro',
    'Accept: application/json',
];

function apiGet(string $url, array $headers): array {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    $raw = curl_exec($ch);
    $status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    $payload = json_decode((string) $raw, true);
    if ($status >= 400 || !is_array($payload)) {
        throw new RuntimeException("HTTP {$status}: {$raw}");
    }
    return $payload;
}

// Step 1 — Load metadata
$langs = apiGet($baseUrl . '/langs-list', $headers);
$countries = apiGet($baseUrl . '/countries-list?lang=en', $headers);
echo 'languages: ' . count($langs) . ' countries: ' . count($countries) . PHP_EOL;

// Step 2 — Fetch the week
$week = apiGet($baseUrl . '/economic-events/filter?' . http_build_query([
    'date' => 'current_week',
    'country_id' => '5,4,72,17,35',
    'importance' => 'high,medium',
    'lang' => 'en',
]), $headers);

// Step 3 — Group by calendar day
$byDay = [];
foreach ($week['data'] ?? [] as $row) {
    $day = substr((string) ($row['occurrence_time'] ?? ''), 0, 10);
    $byDay[$day][] = $row;
}
ksort($byDay);
foreach ($byDay as $day => $rows) {
    echo $day . ' ' . count($rows) . PHP_EOL;
}

// Step 4 — Attach history for high-impact cards
foreach ($week['data'] ?? [] as &$row) {
    if (($row['importance'] ?? '') !== 'high') {
        continue;
    }
    $hist = apiGet($baseUrl . '/economic-events/' . $row['event_id'] . '/history?' . http_build_query([
        'released_only' => 'true',
        'limit' => 12,
        'lang' => 'en',
    ]), $headers);
    $row['_history'] = $hist['data'] ?? [];
    echo ($row['short_name'] ?? '') . ' history points: ' . count($row['_history']) . PHP_EOL;
}
unset($row);
package main

// Build a simple weekly calendar module from the Economic Calendar API.

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "sort"
    "strings"
    "time"
)

func getJSON(client *http.Client, rawURL string) map[string]any {
    req, err := http.NewRequest(http.MethodGet, rawURL, nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "pro")
    req.Header.Set("Accept", "application/json")
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }
    var payload map[string]any
    if err := json.Unmarshal(body, &payload); err != nil {
        // langs-list returns an array
        var arr []any
        if err2 := json.Unmarshal(body, &arr); err2 == nil {
            return map[string]any{"_array": arr}
        }
        panic(err)
    }
    return payload
}

func main() {
    client := &http.Client{Timeout: 30 * time.Second}

    langs := getJSON(client, "https://api.example.com/langs-list")
    countries := getJSON(client, "https://api.example.com/countries-list?lang=en")
    fmt.Println("metadata loaded", langs != nil, len(countries))

    q := url.Values{}
    q.Set("date", "current_week")
    q.Set("country_id", "5,4,72,17,35")
    q.Set("importance", "high,medium")
    q.Set("lang", "en")
    week := getJSON(client, "https://api.example.com/economic-events/filter?"+q.Encode())

    byDay := map[string]int{}
    data, _ := week["data"].([]any)
    for _, item := range data {
        row, _ := item.(map[string]any)
        day := strings.Split(fmt.Sprint(row["occurrence_time"]), "T")[0]
        byDay[day]++
    }
    days := make([]string, 0, len(byDay))
    for d := range byDay {
        days = append(days, d)
    }
    sort.Strings(days)
    for _, d := range days {
        fmt.Println(d, byDay[d])
    }
}
#!/usr/bin/env bash
# Weekly calendar module: metadata + current_week basket
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="pro"

curl -sS "${BASE_URL}/langs-list" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" | jq 'length'

curl -sS "${BASE_URL}/countries-list?lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" | jq 'keys | length'

WEEK="$(curl -sS "${BASE_URL}/economic-events/filter?date=current_week&country_id=5,4,72,17,35&importance=high,medium&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json")"

echo "${WEEK}" | jq '[.data[] | .occurrence_time[0:10]] | group_by(.) | map({day: .[0], count: length})'
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Build a simple weekly calendar module from the Economic Calendar API. */
public class Example {
    private static String get(HttpClient client, String uri) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(uri))
            .timeout(Duration.ofSeconds(30))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "pro")
            .header("Accept", "application/json")
            .GET()
            .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
        }
        return response.body();
    }

    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        System.out.println(get(client, "https://api.example.com/langs-list"));
        System.out.println(get(client, "https://api.example.com/countries-list?lang=en"));
        System.out.println(get(
            client,
            "https://api.example.com/economic-events/filter"
                + "?date=current_week&country_id=5,4,72,17,35&importance=high,medium&lang=en"
        ));
    }
}

Pagination cookbook

Detecting the last page

Stop when meta.next_cursor is null or missing. Do not assume that returned < limit is the only stop condition, although it usually coincides with a null cursor on this API.

Stable exports to CSV

#!/usr/bin/env python3
"""Paginate high-impact events and export a stable CSV."""

import csv
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "pro",
    "Accept": "application/json",
}

params = {
    "date_from": "2026-01-01",
    "date_to": "2026-06-30",
    "importance": "high",
    "lang": "en",
}

rows = []
cursor = None
while True:
    page_params = dict(params)
    if cursor:
        page_params["cursor"] = cursor
    body = requests.get(
        f"{BASE_URL}/economic-events/filter",
        headers=HEADERS,
        params=page_params,
        timeout=60,
    ).json()
    rows.extend(body.get("data", []))
    cursor = body.get("meta", {}).get("next_cursor")
    if not cursor:
        break

fieldnames = [
    "occurrence_id", "event_id", "occurrence_time", "short_name",
    "country_name", "currency", "importance", "actual", "forecast", "previous",
]
with open("events.csv", "w", newline="", encoding="utf-8") as handle:
    writer = csv.DictWriter(handle, fieldnames=fieldnames, extrasaction="ignore")
    writer.writeheader()
    writer.writerows(rows)

print("wrote", len(rows), "rows to events.csv")
/**
 * Paginate high-impact events and export a CSV string.
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "pro",
  Accept: "application/json",
};

const FIELDS = [
  "occurrence_id", "event_id", "occurrence_time", "short_name",
  "country_name", "currency", "importance", "actual", "forecast", "previous",
];

function csvEscape(value) {
  const text = value == null ? "" : String(value);
  if (/[",\n]/.test(text)) return `"${text.replace(/"/g, '""')}"`;
  return text;
}

async function fetchAll() {
  const rows = [];
  let cursor = null;
  while (true) {
    const url = new URL(`${BASE_URL}/economic-events/filter`);
    url.searchParams.set("date_from", "2026-01-01");
    url.searchParams.set("date_to", "2026-06-30");
    url.searchParams.set("importance", "high");
    url.searchParams.set("lang", "en");
    if (cursor) url.searchParams.set("cursor", cursor);

    const response = await fetch(url, { headers: HEADERS });
    const body = await response.json();
    if (!response.ok) throw new Error(JSON.stringify(body));
    rows.push(...(body.data || []));
    cursor = body.meta?.next_cursor || null;
    if (!cursor) break;
  }
  return rows;
}

async function main() {
  const rows = await fetchAll();
  const lines = [FIELDS.join(",")];
  for (const row of rows) {
    lines.push(FIELDS.map((field) => csvEscape(row[field])).join(","));
  }
  const csv = lines.join("\n");
  console.log(csv.slice(0, 500));
  console.log("total rows:", rows.length);
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Paginate high-impact events and export a stable CSV. */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: pro',
    'Accept: application/json',
];

$params = [
    'date_from' => '2026-01-01',
    'date_to' => '2026-06-30',
    'importance' => 'high',
    'lang' => 'en',
];

$rows = [];
$cursor = null;
do {
    if ($cursor) {
        $params['cursor'] = $cursor;
    }
    $ch = curl_init($baseUrl . '/economic-events/filter?' . http_build_query($params));
    curl_setopt_array($ch, [
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 60,
    ]);
    $raw = curl_exec($ch);
    $status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    $body = json_decode((string) $raw, true);
    if ($status >= 400 || !is_array($body)) {
        throw new RuntimeException("HTTP {$status}: {$raw}");
    }
    $rows = array_merge($rows, $body['data'] ?? []);
    $cursor = $body['meta']['next_cursor'] ?? null;
} while ($cursor);

$fp = fopen('events.csv', 'w');
$fields = [
    'occurrence_id', 'event_id', 'occurrence_time', 'short_name',
    'country_name', 'currency', 'importance', 'actual', 'forecast', 'previous',
];
fputcsv($fp, $fields);
foreach ($rows as $row) {
    $line = [];
    foreach ($fields as $field) {
        $line[] = $row[$field] ?? null;
    }
    fputcsv($fp, $line);
}
fclose($fp);
echo 'wrote ' . count($rows) . " rows to events.csv\n";
package main

// Paginate high-impact events (CSV write left to your app).

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    client := &http.Client{Timeout: 60 * time.Second}
    cursor := ""
    total := 0

    for {
        q := url.Values{}
        q.Set("date_from", "2026-01-01")
        q.Set("date_to", "2026-06-30")
        q.Set("importance", "high")
        q.Set("lang", "en")
        if cursor != "" {
            q.Set("cursor", cursor)
        }

        req, _ := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/filter?"+q.Encode(), nil)
        req.Header.Set("X-Api-Key", "YOUR_API_KEY")
        req.Header.Set("X-Subscription", "pro")
        req.Header.Set("Accept", "application/json")

        resp, err := client.Do(req)
        if err != nil {
            panic(err)
        }
        body, _ := io.ReadAll(resp.Body)
        resp.Body.Close()
        if resp.StatusCode >= 400 {
            fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
            os.Exit(1)
        }

        var payload map[string]any
        _ = json.Unmarshal(body, &payload)
        if data, ok := payload["data"].([]any); ok {
            total += len(data)
        }
        meta, _ := payload["meta"].(map[string]any)
        next, _ := meta["next_cursor"].(string)
        if next == "" {
            break
        }
        cursor = next
    }

    fmt.Println("total rows:", total)
}
#!/usr/bin/env bash
# Paginate and append JSON lines (convert to CSV with jq/miller as needed)
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="pro"
CURSOR=""
: > events.ndjson

while true; do
  URL="${BASE_URL}/economic-events/filter?date_from=2026-01-01&date_to=2026-06-30&importance=high&lang=en"
  [[ -n "${CURSOR}" ]] && URL="${URL}&cursor=${CURSOR}"
  PAGE="$(curl -sS "${URL}" \
    -H "X-Api-Key: ${API_KEY}" \
    -H "X-Subscription: ${SUBSCRIPTION}" \
    -H "Accept: application/json")"
  echo "${PAGE}" | jq -c '.data[]' >> events.ndjson
  CURSOR="$(echo "${PAGE}" | jq -r '.meta.next_cursor // empty')"
  [[ -z "${CURSOR}" ]] && break
done

wc -l events.ndjson
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** Paginate high-impact events for CSV/warehouse export. */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        String cursor = null;
        int pages = 0;
        while (true) {
            StringBuilder q = new StringBuilder("date_from=2026-01-01&date_to=2026-06-30&importance=high&lang=en");
            if (cursor != null) {
                q.append("&cursor=").append(URLEncoder.encode(cursor, StandardCharsets.UTF_8));
            }
            HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.example.com/economic-events/filter?" + q))
                .timeout(Duration.ofSeconds(60))
                .header("X-Api-Key", "YOUR_API_KEY")
                .header("X-Subscription", "pro")
                .header("Accept", "application/json")
                .GET()
                .build();
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            if (response.statusCode() >= 400) {
                System.err.println(response.body());
                System.exit(1);
            }
            pages++;
            Matcher m = Pattern.compile("\"next_cursor\"\\s*:\\s*\"([^\"]+)\"").matcher(response.body());
            if (m.find()) cursor = m.group(1); else break;
        }
        System.out.println("pages: " + pages);
    }
}

Resume after interruption

Persist the last successful cursor and the original query parameters. On restart, continue from that cursor with the same filters. Changing filters invalidates the cursor semantics for your export.


History cookbook

Chart series (actual vs forecast)

#!/usr/bin/env python3
"""Build an actual-vs-forecast chart series from event history."""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "basic",
    "Accept": "application/json",
}

hist = requests.get(
    f"{BASE_URL}/economic-events/1057/history",
    headers=HEADERS,
    params={"released_only": True, "limit": 24, "lang": "en"},
    timeout=30,
).json()

series = [
    {
        "date": row["date"],
        "actual": row["actual"],
        "forecast": row["forecast"],
        "previous": row["previous"],
    }
    for row in reversed(hist.get("data", []))  # chronological for charts
]

print(json.dumps(series, indent=2, ensure_ascii=False))
/**
 * Build an actual-vs-forecast chart series from event history.
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "basic",
  Accept: "application/json",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/1057/history`);
  url.searchParams.set("released_only", "true");
  url.searchParams.set("limit", "24");
  url.searchParams.set("lang", "en");

  const response = await fetch(url, { headers: HEADERS });
  const hist = await response.json();
  if (!response.ok) throw new Error(JSON.stringify(hist));

  const series = [...(hist.data || [])].reverse().map((row) => ({
    date: row.date,
    actual: row.actual,
    forecast: row.forecast,
    previous: row.previous,
  }));

  console.log(JSON.stringify(series, null, 2));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Build an actual-vs-forecast chart series from event history. */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: basic',
    'Accept: application/json',
];

$ch = curl_init($baseUrl . '/economic-events/1057/history?' . http_build_query([
    'released_only' => 'true',
    'limit' => 24,
    'lang' => 'en',
]));
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$hist = json_decode((string) $raw, true);
if ($status >= 400 || !is_array($hist)) {
    throw new RuntimeException("HTTP {$status}: {$raw}");
}

$series = [];
foreach (array_reverse($hist['data'] ?? []) as $row) {
    $series[] = [
        'date' => $row['date'] ?? null,
        'actual' => $row['actual'] ?? null,
        'forecast' => $row['forecast'] ?? null,
        'previous' => $row['previous'] ?? null,
    ];
}

echo json_encode($series, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// Build an actual-vs-forecast chart series from event history.

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
    "time"
)

func main() {
    req, _ := http.NewRequest(
        http.MethodGet,
        "https://api.example.com/economic-events/1057/history?released_only=true&limit=24&lang=en",
        nil,
    )
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload map[string]any
    _ = json.Unmarshal(body, &payload)
    data, _ := payload["data"].([]any)
    // reverse for chronological chart order
    for i, j := 0, len(data)-1; i < j; i, j = i+1, j-1 {
        data[i], data[j] = data[j], data[i]
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(data)
}
#!/usr/bin/env bash
# Chart series: reverse history rows for chronological plotting
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"

curl -sS "${BASE_URL}/economic-events/1057/history?released_only=true&limit=24&lang=en" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: basic" \
  -H "Accept: application/json" \
  | jq '[.data | reverse[] | {date, actual, forecast, previous}]'
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Build an actual-vs-forecast chart series from event history. */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(
                "https://api.example.com/economic-events/1057/history"
                    + "?released_only=true&limit=24&lang=en"))
            .timeout(Duration.ofSeconds(30))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println(response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Comparing plan caps

#!/usr/bin/env python3
"""Compare effective history limits across subscription plans."""

import requests

BASE_URL = "https://api.example.com"
BASE_HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "Accept": "application/json",
}

for plan, want in [("free", 100), ("basic", 100), ("pro", 100)]:
    headers = {**BASE_HEADERS, "X-Subscription": plan}
    body = requests.get(
        f"{BASE_URL}/economic-events/1057/history",
        headers=headers,
        params={"limit": want, "lang": "en", "released_only": True},
        timeout=30,
    ).json()
    meta = body.get("meta", {})
    print(
        plan,
        "requested",
        want,
        "effective_limit",
        meta.get("limit"),
        "returned",
        meta.get("returned"),
    )
/**
 * Compare effective history limits across subscription plans.
 */
const BASE_URL = "https://api.example.com";

async function checkPlan(plan, want) {
  const url = new URL(`${BASE_URL}/economic-events/1057/history`);
  url.searchParams.set("limit", String(want));
  url.searchParams.set("lang", "en");
  url.searchParams.set("released_only", "true");

  const response = await fetch(url, {
    headers: {
      "X-Api-Key": "YOUR_API_KEY",
      "X-Subscription": plan,
      Accept: "application/json",
    },
  });
  const body = await response.json();
  console.log(
    plan,
    "requested",
    want,
    "effective_limit",
    body.meta?.limit,
    "returned",
    body.meta?.returned
  );
}

async function main() {
  for (const [plan, want] of [
    ["free", 100],
    ["basic", 100],
    ["pro", 100],
  ]) {
    await checkPlan(plan, want);
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Compare effective history limits across subscription plans. */

$baseUrl = 'https://api.example.com';

foreach (['free' => 100, 'basic' => 100, 'pro' => 100] as $plan => $want) {
    $headers = [
        'X-Api-Key: YOUR_API_KEY',
        'X-Subscription: ' . $plan,
        'Accept: application/json',
    ];
    $ch = curl_init($baseUrl . '/economic-events/1057/history?' . http_build_query([
        'limit' => $want,
        'lang' => 'en',
        'released_only' => 'true',
    ]));
    curl_setopt_array($ch, [
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    $raw = curl_exec($ch);
    curl_close($ch);
    $body = json_decode((string) $raw, true);
    $meta = $body['meta'] ?? [];
    echo $plan
        . ' requested ' . $want
        . ' effective_limit ' . ($meta['limit'] ?? '?')
        . ' returned ' . ($meta['returned'] ?? '?')
        . PHP_EOL;
}
package main

// Compare effective history limits across subscription plans.

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "time"
)

func main() {
    plans := []string{"free", "basic", "pro"}
    client := &http.Client{Timeout: 30 * time.Second}

    for _, plan := range plans {
        req, _ := http.NewRequest(
            http.MethodGet,
            "https://api.example.com/economic-events/1057/history?limit=100&lang=en&released_only=true",
            nil,
        )
        req.Header.Set("X-Api-Key", "YOUR_API_KEY")
        req.Header.Set("X-Subscription", plan)
        req.Header.Set("Accept", "application/json")

        resp, err := client.Do(req)
        if err != nil {
            panic(err)
        }
        body, _ := io.ReadAll(resp.Body)
        resp.Body.Close()

        var payload map[string]any
        _ = json.Unmarshal(body, &payload)
        meta, _ := payload["meta"].(map[string]any)
        fmt.Println(plan, "effective_limit", meta["limit"], "returned", meta["returned"])
    }
}
#!/usr/bin/env bash
# Compare history caps for free / basic / pro
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"

for PLAN in free basic pro; do
  echo "=== ${PLAN} ==="
  curl -sS "${BASE_URL}/economic-events/1057/history?limit=100&lang=en&released_only=true" \
    -H "X-Api-Key: ${API_KEY}" \
    -H "X-Subscription: ${PLAN}" \
    -H "Accept: application/json" \
    | jq '{plan: .meta.plan, limit: .meta.limit, returned: .meta.returned}'
done
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Compare effective history limits across subscription plans. */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();
        String[] plans = {"free", "basic", "pro"};
        for (String plan : plans) {
            HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(
                    "https://api.example.com/economic-events/1057/history"
                        + "?limit=100&lang=en&released_only=true"))
                .timeout(Duration.ofSeconds(30))
                .header("X-Api-Key", "YOUR_API_KEY")
                .header("X-Subscription", plan)
                .header("Accept", "application/json")
                .GET()
                .build();
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println(plan + " => " + response.body());
        }
    }
}

Export and stream notes

Full runnable examples for these Ultra endpoints are also in §6 Export and §7 Stream. The snippets below are complete clients for cookbook navigation.

Export

#!/usr/bin/env bash
# Start Ultra export job
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="ultra"

curl -sS -X POST "${BASE_URL}/economic-events/export" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/json" | jq .
#!/usr/bin/env python3
"""Start Ultra export job"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "ultra",
    "Accept": "application/json",
}

response = requests.post(f"{BASE_URL}/economic-events/export", headers=HEADERS, timeout=30)
print("status:", response.status_code)
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
/**
 * Start Ultra export job
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "ultra",
  Accept: "application/json",
};

async function main() {
  const response = await fetch(`${BASE_URL}/economic-events/export`, {
    method: "POST",
    headers: HEADERS,
  });
  const payload = await response.json();
  console.log("status:", response.status);
  console.log(payload);
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** Start Ultra export job */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: ultra',
    'Accept: application/json',
];

$ch = curl_init($baseUrl . '/economic-events/export');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$payload = json_decode((string) $raw, true);
echo "status: {$status}" . PHP_EOL;
echo json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . PHP_EOL;
package main

// Start Ultra export job

import (
    "fmt"
    "io"
    "net/http"
    "os"
    "time"
)

func main() {
    req, err := http.NewRequest(http.MethodPost, "https://api.example.com/economic-events/export", nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "ultra")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println("status:", resp.StatusCode)
    fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** Start Ultra export job */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/export"))
            .timeout(Duration.ofSeconds(30))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "ultra")
            .header("Accept", "application/json")
            .POST(HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("status: " + response.statusCode());
        System.out.println(response.body());
    }
}

Non-Ultra plans receive HTTP 403. Confirm job delivery behavior with your operator for the deployed environment.

Stream

#!/usr/bin/env bash
# NDJSON stream for a date range
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"
SUBSCRIPTION="ultra"

curl -N -sS "${BASE_URL}/economic-events/stream?date_from=2026-08-01&date_to=2026-08-07" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "X-Subscription: ${SUBSCRIPTION}" \
  -H "Accept: application/x-ndjson"
#!/usr/bin/env python3
"""NDJSON stream for a date range"""

import json
import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "X-Subscription": "ultra",
    "Accept": "application/x-ndjson",
}

params = {
    "date_from": "2026-08-01",
    "date_to": "2026-08-07",
}

with requests.get(
    f"{BASE_URL}/economic-events/stream",
    headers=HEADERS,
    params=params,
    stream=True,
    timeout=120,
) as response:
    response.raise_for_status()
    for line in response.iter_lines(decode_unicode=True):
        if not line:
            continue
        event = json.loads(line)
        print(json.dumps(event, ensure_ascii=False))
/**
 * NDJSON stream for a date range
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  "X-Subscription": "ultra",
  Accept: "application/x-ndjson",
};

async function main() {
  const url = new URL(`${BASE_URL}/economic-events/stream`);
  url.searchParams.set("date_from", "2026-08-01");
  url.searchParams.set("date_to", "2026-08-07");

  const response = await fetch(url, { headers: HEADERS });
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  }

  const text = await response.text();
  for (const line of text.split("\n").filter(Boolean)) {
    console.log(JSON.parse(line));
  }
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** NDJSON stream for a date range */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'X-Subscription: ultra',
    'Accept: application/x-ndjson',
];

$query = http_build_query([
    'date_from' => '2026-08-01',
    'date_to' => '2026-08-07',
]);
$ch = curl_init($baseUrl . '/economic-events/stream?' . $query);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 120,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException("HTTP {$status}: {$raw}");
}

foreach (preg_split('/\r?\n/', (string) $raw) as $line) {
    $line = trim($line);
    if ($line === '') {
        continue;
    }
    $event = json_decode($line, true);
    echo json_encode($event, JSON_UNESCAPED_UNICODE) . PHP_EOL;
}
package main

// NDJSON stream for a date range

import (
    "bufio"
    "fmt"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}
    q.Set("date_from", "2026-08-01")
    q.Set("date_to", "2026-08-07")

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/economic-events/stream?"+q.Encode(), nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "ultra")
    req.Header.Set("Accept", "application/x-ndjson")

    client := &http.Client{Timeout: 120 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d\n", resp.StatusCode)
        os.Exit(1)
    }

    scanner := bufio.NewScanner(resp.Body)
    for scanner.Scan() {
        line := scanner.Text()
        if line != "" {
            fmt.Println(line)
        }
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** NDJSON stream for a date range */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/economic-events/stream?date_from=2026-08-01&date_to=2026-08-07"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "ultra")
            .header("Accept", "application/x-ndjson")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Each line is one JSON object ordered by occurrence_time DESC. Prefer /filter + cursors for interactive UIs.


GET /calendar

HTTP 302 redirect to the HTML calendar host. Useful for browsers, not for most API clients.

#!/usr/bin/env bash
# HTML calendar redirect
set -euo pipefail

BASE_URL="https://api.example.com"
API_KEY="YOUR_API_KEY"

curl -sSI "${BASE_URL}/calendar" \
  -H "X-Api-Key: ${API_KEY}" \
  -H "Accept: application/json" | head -n 20
#!/usr/bin/env python3
"""HTML calendar redirect"""

import requests

BASE_URL = "https://api.example.com"
HEADERS = {
    "X-Api-Key": "YOUR_API_KEY",
    "Accept": "application/json",
}

response = requests.get(
    f"{BASE_URL}/calendar",
    headers=HEADERS,
    allow_redirects=False,
    timeout=30,
)
print("status:", response.status_code)
print("location:", response.headers.get("Location"))
/**
 * HTML calendar redirect
 */
const BASE_URL = "https://api.example.com";
const HEADERS = {
  "X-Api-Key": "YOUR_API_KEY",
  Accept: "application/json",
};

async function main() {
  const response = await fetch(`${BASE_URL}/calendar`, {
    headers: HEADERS,
    redirect: "manual",
  });
  console.log("status:", response.status);
  console.log("location:", response.headers.get("Location"));
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});
<?php
declare(strict_types=1);
/** HTML calendar redirect */

$baseUrl = 'https://api.example.com';
$headers = [
    'X-Api-Key: YOUR_API_KEY',
    'Accept: application/json',
];

$ch = curl_init($baseUrl . '/calendar');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true,
    CURLOPT_NOBODY => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
]);
$raw = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "status: {$status}" . PHP_EOL;
if (preg_match('/^Location:\s*(.+)$/mi', (string) $raw, $m)) {
    echo "location: " . trim($m[1]) . PHP_EOL;
}
package main

// HTML calendar redirect

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func main() {
    q := url.Values{}

    req, err := http.NewRequest(http.MethodGet, "https://api.example.com/calendar", nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("X-Api-Key", "YOUR_API_KEY")
    req.Header.Set("X-Subscription", "basic")
    req.Header.Set("Accept", "application/json")

    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    if resp.StatusCode >= 400 {
        fmt.Fprintf(os.Stderr, "HTTP %d: %s\n", resp.StatusCode, body)
        os.Exit(1)
    }

    var payload any
    if err := json.Unmarshal(body, &payload); err != nil {
        panic(err)
    }
    enc := json.NewEncoder(os.Stdout)
    enc.SetIndent("", "  ")
    _ = enc.Encode(payload)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/** HTML calendar redirect */
public class Example {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/calendar"))
            .timeout(Duration.ofSeconds(120))
            .header("X-Api-Key", "YOUR_API_KEY")
            .header("X-Subscription", "basic")
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() >= 400) {
            System.err.println("HTTP " + response.statusCode() + ": " + response.body());
            System.exit(1);
        }
        System.out.println(response.body());
    }
}

Daily widget

  1. Call /economic-events/filter?date=today&importance=high,medium&lang=en.
  2. Refresh every 5–15 minutes during active hours.
  3. Key list items by occurrence_id.
  4. Show actual when present; otherwise show forecast with a “pending” badge.

Weekly planner

  1. Resolve countries via /countries-list?lang=en.
  2. Fetch date=current_week with your country/currency basket.
  3. Group by day for a calendar grid.
  4. Refresh after UTC midnight or when the ISO week changes.

Research archive

  1. Choose date_from / date_to.
  2. Use Pro/Ultra page sizes.
  3. Loop next_cursor until null.
  4. Persist to your warehouse keyed by occurrence_id.
  5. Enrich selected series with /history?released_only=true.

Multilingual product

  1. Load /langs-list for UI selectors.
  2. On Pro, send at most five lang codes per filter request.
  3. Fall back to en when a language is not in the active plan.
  4. Deduplicate multi-language rows if the UI shows one card per release.

Alert-like polling without streams

  1. Poll /filter?date=today&importance=high every 30–60 seconds.
  2. Track occurrence_id values you already processed.
  3. Emit a notification when a known pending row gains a non-null actual.

FAQ

Q: Why do I see fewer than limit rows?
A: Either fewer matching events exist, or plan/language filters reduced the set. Also check whether you are on the last page.

Q: Why is actual null for an event that already happened?
A: The value is filled after the upstream release is imported. Poll again later or use history with released_only=true for older prints.

Q: Can I sort ascending (soonest first)?
A: Filter results are newest-first (occurrence_time DESC). Reverse client-side for small pages when you need soonest-first ordering.

Q: Does country_id and currency AND together?
A: Yes. All provided filters are combined with AND logic.

Q: What happens if I pass both date and date_from?
A: date wins and overrides the from/to pair.

Q: Is importance=low,medium,high different from omitting importance?
A: The service default is already low,medium,high. Use importance=all when you want the explicit no-importance-filter path.

Q: How do I find an event_id?
A: Call /filter, read data[].event_id, then call /economic-events/{event_id}/history.


Important notes

  1. Language access is plan-gated; verify your subscription before requesting additional languages.
  2. date overrides date_from / date_to when both are present.
  3. Prefer compact comma lists without spaces: USD,EUR.
  4. Cursor pagination requires identical filters across pages.
  5. History limit is silently clamped to the plan maximum.
  6. Export and stream require higher tiers; confirm availability before building against them.
  7. Multi-language responses can contain duplicate economic releases (one row per language).
  8. This API provides economic information only and does not constitute investment advice.

Quick reference

GET  /ping
GET  /langs-list
GET  /countries-list?lang=en
GET  /economic-events/filter?date=today&currency=USD&importance=high&lang=en
GET  /economic-events/filter?date=current_week&country_id=5,4,72&lang=en
GET  /economic-events/filter?date_from=2026-08-01&date_to=2026-08-31&lang=en
GET  /economic-events/1057/history?limit=24&released_only=true&lang=en
POST /economic-events/export
GET  /economic-events/stream?date_from=2026-08-01&date_to=2026-08-07
GET  /calendar

Complete starters by language

Use the Shared client setup section at the top of this document for full cURL, Python, JavaScript, PHP, Go, and Java clients. For a complete filter request in every language (with tabs), see Filter examples → A — Today in English.


EconPulse Economic Calendar API documentation.

Ready to integrate?

Create an API key and start filtering today’s high-impact events in minutes.