News Calendar API Documentation

Last Updated: 02/07/2026 16:03 EST

Note: Due to a huge increase in traffic, free API usage has decreased to 1 request per day.

Overview

The Calendar API offers fast and free access to the latest Forex news events from a variety of sources, including MQL5, Forex Factory, and FxStreet. Users can retrieve data through GET requests or by utilizing our libraries.

To authenticate your GET requests, you must include your API key in the request header. Generate and manage your API key via your profile, and monitor your usage here.

Authentication

{
  "Content-Type": "application/json",
  "Authorization": "Api-Key YOUR_API_KEY"
}
var request = URLRequest(url: URL(string: "https://www.jblanked.com/news/api/YOUR-ENDPOINT")!)
request.addValue("Api-Key YOUR_API_KEY", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
string headers = "Content-Type: application/json" + "\r\n" + "Authorization: Api-Key YOUR_API_KEY";

Rate Limit & Pricing

Rate Limit

One request per second to ensure service stability and fair usage.

Pricing

1 credit per premium use, otherwise free. Credits are purchased via our billing page. Charges only occur if users have credits.

Endpoints

Today MQL5

GET /news/api/mql5/calendar/today/

List of today's events ordered by time from MQL5. Optional params: currency (USD, CAD, EUR, GBP, AUD, CHF, JPY, NZD) and impact (High, Medium, Low, None).


Today Forex Factory

GET /news/api/forex-factory/calendar/today/

List of today's events ordered by time from Forex Factory. Same optional params as above.


Today FxStreet

GET /news/api/fxstreet/calendar/today/

List of today's events ordered by time from FxStreet. Same optional params.


This Week MQL5

GET /news/api/mql5/calendar/week/

List of this week's events ordered by time from MQL5. Optional: currency, impact, offset.


This Week Forex Factory

GET /news/api/forex-factory/calendar/week/


This Week FxStreet

GET /news/api/fxstreet/calendar/week/


Date Range (All Sources)

Filter events by date range using from and to parameters in YYYY-MM-DD format:

  • GET /news/api/mql5/calendar/range/?from=2025-09-17&to=2025-09-24¤cy=USD&impact=High
  • GET /news/api/forex-factory/calendar/range/?from=2025-09-17&to=2025-09-24
  • GET /news/api/fxstreet/calendar/range/?from=2025-09-17&to=2025-09-24

Example JSON Response

{
  "Name": "Core CPI m/m",
  "Currency": "USD",
  "Category": "Consumer Inflation Report",
  "Impact": "High",
  "Date": "2024.02.08 15:30:00",
  "Actual": 0.4,
  "Forecast": 0.4,
  "Previous": 0.2,
  "Outcome": "Actual = Forecast > Previous",
  "Strength": "Strong Data",
  "Quality": "Bad Data"
}
{
  "Name": "Core CPI m/m",
  "Currency": "USD",
  "Category": "Consumer Inflation Report",
  "Impact": "High",
  "Date": "2024.02.08 15:30:00",
  "Actual": 0.4,
  "Forecast": 0.4,
  "Previous": 0.2,
  "Outcome": "Actual = Forecast > Previous",
  "Strength": "Strong Data",
  "Quality": "Bad Data"
}
{
  "Name": "Core CPI m/m",
  "Currency": "USD",
  "Category": "Consumer Inflation Report",
  "Impact": "High",
  "Date": "2024.02.08 15:30:00",
  "Actual": 0.4,
  "Forecast": 0.4,
  "Previous": 0.2,
  "Outcome": "Actual = Forecast > Previous",
  "Strength": "Strong Data",
  "Quality": "Bad Data"
}

Usage: GET Requests

import requests

url = "https://www.jblanked.com/news/api/mql5/calendar/today/"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Api-Key YOUR_API_KEY",
}
response = requests.get(url, headers=headers)

if response.status_code == 200:
    data = response.json()
    print(data)
    print(data[0]["Name"])
else:
    print(f"Error: {response.status_code}")
    print(response.json())
import Dispatch
import Foundation

if let url = URL(string: "https://www.jblanked.com/news/api/mql5/calendar/today/") {
    let apiKey = "YOUR_API_KEY"
    var request = URLRequest(url: url)
    request.addValue("Api-Key \(apiKey)", forHTTPHeaderField: "Authorization")
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

    do {
        let (dataReturned, _) = try await URLSession.shared.data(for: request)

        let decoder = JSONDecoder()
        let newsList = try decoder.decode([HistoryData].self, from: dataReturned)

        print(newsList)

    } catch {
        print("Error has occurred: \(error)")
    }

}

struct HistoryData: Decodable, Hashable {
    var Date: String
    var Actual: Double
    var Forecast: Double
    var Previous: Double
    var Outcome: String

    private enum CodingKeys: String, CodingKey {
        case Date
        case Actual
        case Forecast
        case Previous
        case Outcome
    }

    init() {
        self.Date = ""
        self.Actual = 0.0
        self.Forecast = 0.0
        self.Previous = 0.0
        self.Outcome = ""
    }
}
#include <jb-news\news.mqh>   // get from https://github.com/jblanked/MQL-Library
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   CRequests request;
   request.url = "https://www.jblanked.com/news/api/mql5/calendar/today/";
   request.key = "YOUR_API_KEY";

   if(!request.GET())
     {
      Print("Failed to get data from the today endpoint");
      return INIT_FAILED;
     }

   // print result
   Print(request.result);

  // or do something with the json data
  string firstEventName = request.loader[0]["Name"].ToStr();

  return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

Usage: Library

import Dispatch
import Foundation
import JBNews

let yourAPIKey: String = "YOUR-API-KEY"
let newsModel: JBNews = JBNews(yourAPIKey)

Task {
    let calendar: [HistoryData] = await newsModel.calendar()

    print(calendar)
}
#include <jb-news\news.mqh>

CJBNews jb;

int OnInit(){
  jb.api_key = "API_KEY";

  jb.offset = 0; // GMT-3 = 0, GMT = 3, EST = 7, PST = 10

  jb.chart();

  return INIT_SUCCEEDED;
}
from jb_news.news import CJBNews

jb = CJBNews()
api_key = "YOUR_API_KEY_HERE"
jb.offset = 7  # GMT-3 = 0, GMT = 3, EST = 7, PST = 10
if jb.calendar(api_key,today=True):
    for event in jb.calendar_info:
        name = event.name
        currency = event.currency
        event_id = event.eventID
        category = event.category
        impact = event.impact
        date = event.date
        actual = event.actual
        forecast = event.forecast
        previous = event.previous
        outcome = event.outcome
        strength = event.strength
        quality = event.quality

        # print the calendar info
        print(f"Event Name: {name}\nEvent ID: {event_id}\nCurrency: {currency}\nDate: {date}\nActual: {actual}\nForecast: {forecast}\nPrevious: {previous}")
Support