FNEWSTEER API

Fundamental Analysis (News) Steer — a loss-prevention API for price action traders. Know when not to trade so news events don't blindside your technically sound setups.

Hosted · fnewsteer-api.onrender.com
Cold starts ~30–60s on first request
OpenAPI 3.1.0

Authentication

All /v1/ and /admin/ endpoints require an API key in the request header. The /health endpoint is public.

HEADER
X-API-Key: your-secret-api-key
Public hosted key: f1e922df0a7d52af4ff2bfc3c4eb1da01e5f8ea4779e28acb3200ced29aaf5a5

Smart Blackout Windows

Event Type Window
FOMC, Federal Funds Rate, Interest Rate Decision ±60 min
Non-Farm Payrolls (NFP) ±60 min
CPI, GDP, Inflation, Monetary Policy ±60 min
All other High impact events ±30 min

Pass window_minutes to any endpoint to override for your strategy.

Algo Bot Integration

PYTHON
import httpx

FNEWSTEER_URL = "https://fnewsteer-api.onrender.com"
API_KEY = "your-api-key"

def is_safe_to_trade(symbol: str) -> bool:
    """Fail-safe: returns False on any error."""
    try:
        r = httpx.get(
            f"{FNEWSTEER_URL}/v1/news/check",
            params={"symbol": symbol},
            headers={"X-API-Key": API_KEY},
            timeout=5.0,
        )
        r.raise_for_status()
        data = r.json()
        if not data["safe_to_trade"]:
            for ev in data["blocking_events"]:
                print(f"Blocked: {ev['title']} — {ev['minutes_to_event']:.0f}m")
        return data["safe_to_trade"]
    except Exception as e:
        print(f"[FNEWSTEER] Check failed: {e}. Blocking as precaution.")
        return False

# In your trading loop:
if is_safe_to_trade("EURUSD"):
    place_order(...)
else:
    print("Sitting on hands — news window active.")

Endpoints

Try It — cold start & CORS: The API runs on Render's free tier and sleeps after inactivity. First request may take 30–60s. If you get a network error, open the health endpoint ↗ in a new tab to wake the server, then retry. Some browser security policies (CORS) may block requests from this page — use curl from your terminal if issues persist.
GET /health Health check · No auth required
Returns service status and cache age. Call this first in automated pipelines to verify the data layer is live.
Try it
RESPONSE
{ "status": "ok", "cache_age_seconds": 312.4, "cache_populated": true }
GET /v1/news/check Safe-to-trade check · Primary bot endpoint
The primary bot integration endpoint. Pass a currency or pair and get back a binary safe_to_trade signal. Call this before placing any order.
Parameters
symbol required string Currency (USD) or pair (EURUSD) to check
include_medium optional boolean Also block on Medium impact events. Default: false
window_minutes optional integer Override blackout window (1–1440 min). Omit to use smart defaults.
Try it
symbol
include_medium
GET /v1/news/upcoming Full week calendar
Returns all high-impact (and optionally medium-impact) news events for the current week. Each event includes its computed blackout window.
Parameters
currency optional string Filter by currency (USD) or pair (EURUSD)
include_medium optional boolean Include medium impact events. Default: false
window_minutes optional integer Override blackout window for all events (1–1440)
Try it
currency
GET /v1/news/blackout-zones Blackout zones · For backtesting
Returns a flat list of time ranges to avoid for the current week. Feed this into your backtesting engine to exclude news-contaminated zones.
Parameters
currency optional string Filter by currency or pair. Omit for all currencies.
include_medium optional boolean Include medium impact events. Default: false
window_minutes optional integer Override blackout window in minutes
Try it
currency
POST /admin/refresh-cache Force cache refresh
Invalidates the in-memory calendar cache so the next request fetches fresh data from ForexFactory.
Requires authentication. Use when you suspect stale data.
Try it

Response Schemas

CheckResponse
safe_to_tradebooleanPrimary signal. true = safe to trade right now
symbolstringThe symbol that was checked
currencies_checkedstring[]Currencies extracted from the pair (e.g. ["EUR","USD"])
checked_atdatetimeUTC timestamp of the check
blocking_eventsBlockingEvent[]Events currently within their blackout window. Empty if safe.
UpcomingNewsResponse
fetched_atdatetimeWhen this data was fetched from ForexFactory
event_countintegerTotal number of events returned
eventsNewsEvent[]Full event list with computed blackout windows
BlackoutZone
startdatetimeBlackout window start (UTC)
enddatetimeBlackout window end (UTC)
eventstringEvent name (e.g. "Non-Farm Payrolls")
currencystringAffected currency
impactstring"High" or "Medium"
event_timedatetimeActual scheduled event time (UTC)