API sinyal yo

API piblik sa a bay sinyal yo an JSON — ou ka konekte yon bot Telegram, yon Expert Advisor, oswa yon lòt app sou li. Li gratis, san kle, read-only.

GET /api/public/signals

Paramèt (tout opsyonèl): pair, timeframe, limit.

curl "https://fxsignal.io/api/public/signals?pair=EURUSD&timeframe=15m"
curl "https://fxsignal.io/api/public/signals?limit=6&timeframe=1h"

Repons

{
  "ok": true,
  "apiVersion": "v1",
  "timeframe": "15m",
  "count": 1,
  "generatedAt": "2026-08-19T12:00:00.000Z",
  "status": {
    "marketStatus": "live",          // live | stale | market_closed | unavailable
    "dataSource": "Twelve Data",   // Yahoo Finance sèlman lè fallbackActive: true
    "dataService": "Twelve Data REST API v1 (/time_series, /quote)",
    "dataTransport": "REST (HTTPS polling)",
    "connectionType": "rest",        // websocket | rest
    "fallbackActive": false,         // true = Twelve Data echwe, Yahoo Finance ap sèvi
    "dataTimestamp": "2026-08-19T12:00:00.000Z",
    "lastPriceUpdate": "2026-08-19T12:00:00.000Z",
    "dataAgeSeconds": 12,
    "marketState": "live",           // live | stale_data | market_closed | data_unavailable
    "dataQuality": "excellent",      // excellent | good | delayed | stale | unavailable
    "signalCalculatedAt": "2026-08-19T12:00:03.000Z",
    "freshnessLimitSeconds": 120,
    "marketOpen": true,
    "isLive": true,
    "isStale": false,
    "latencyMs": 180
  },
  "rateLimit": { "limit": 30, "remaining": 29, "windowSeconds": 60, "scope": "global" },
  "signals": [
    {
      "apiVersion": "v1",
      "signalId": "EURUSD-15m-20260819-120003",  // inik, pa duplike
      "signalStatus": "active",      // active | tp1_hit | tp2_hit | stopped | expired | cancelled
      "isNewSignal": true,
      "createdAt": "2026-08-19T12:00:03.000Z",
      "expiresAt": "2026-08-19T15:00:03.000Z",
      "closedAt": null,
      "resultPips": null,
      "resultR": null,
      "marketState": "live",
      "dataQuality": "excellent",
      "strength": "strong",          // wait | weak | standard | strong
      "strengthLabel": "STRONG BUY",
      "setupLabel": "STRONG SETUP",
      "dataSource": "Twelve Data",
      "connectionType": "rest",
      "fallbackActive": false,
      "signalPriceSource": "Twelve Data",
      "chartSource": "TradingView",  // feed endepandan, pa antre nan signal engine
      "priceDeviation": {
        "referenceSource": "Frankfurter (ECB daily reference rate)",
        "referencePrice": 1.09180,
        "priceDifferencePips": 3,
        "thresholdPips": 60,
        "priceSourceMismatch": false,
        "warning": null
      },
      "pair": "EURUSD=X",
      "label": "EUR/USD",
      "timeframe": "15m",
      "price": 1.09214,
      "direction": "buy",            // buy | sell | neutral
      "action": "BUY",               // BUY | SELL | WAIT
      "confidence": 78,              // 0-100 konfliyans scoring
      "setupQuality": "good",        // wait | weak | good | strong
      "scoreBreakdown": {
        "htfAlignment": 15, "marketStructure": 14, "bosChoch": 12,
        "orderBlock": 9, "fairValueGap": 6, "liquiditySweep": 8,
        "ema": 4, "rsi": 5, "session": 5, "riskReward": 10
      },
      "higherTimeframes": [
        { "timeframe": "H4", "trend": "bullish" },
        { "timeframe": "H1", "trend": "bullish" }
      ],
      "structuralConfirmations": 4,
      "marketStructure": "bullish",
      "bosChoch": "BOS",
      "orderBlock": { "top": 1.09210, "bottom": 1.09120 },
      "fairValueGap": { "top": 1.09300, "bottom": 1.09250 },
      "liquiditySweep": { "direction": "bullish", "price": 1.09050 },
      "rsi": 57.2,
      "session": "london",
      "inKillzone": true,
      "entry": 1.09180,
      "stopLoss": 1.08920,
      "takeProfit1": 1.09540,
      "takeProfit2": 1.09800,
      "riskReward": 2.1,
      "reasons": ["bos", "order_block: 1.09120 – 1.09210", "killzone: london"],
      "signalCalculatedAt": "2026-08-19T12:00:03.000Z",
      "dataTimestamp": "2026-08-19T12:00:00.000Z",
      "status": { "marketStatus": "live", "isLive": true, "dataAgeSeconds": 12 }
    }
  ]
}

Erè

400 invalid_query | invalid_pair | invalid_timeframe
429 rate_limited        (Retry-After header)
503 market_data_unavailable  -> "Market data temporarily unavailable — retrying connection"
500 server_error

LIVE / STALE

Chak kotasyon gen yon timestamp. Si li depase 120 segond, li pa make LIVE ankò — li vin STALE, epi sinyal la tounen WAIT. Lè mache Forex la fèmen (Van. 21:00 UTC → Dim. 21:00 UTC), marketStatus = market_closed. Nou pa janm bay yon fo pri LIVE.

Scoring konfyans (100 pwen)

HTF alignment 15 | Market structure 15 | BOS/CHOCH 15
Order Block 10 | Fair Value Gap 10 | Liquidity sweep 10
EMA 5 | RSI 5 | Session/Killzone 5 | Risk Reward 10
0-49 WAIT | 50-69 weak | 70-84 good | 85-100 strong
BUY/SELL mande omwen 2 konfimasyon estriktirèl + estrikti aliyen + pa gen konfli HTF

GET /api/public/instruments

Bay lis pè ak timeframe ki disponib yo.

Pè

  • EURUSD=X — EUR/USD
  • GBPUSD=X — GBP/USD
  • USDJPY=X — USD/JPY
  • XAUUSD=X — XAU/USD (Lò)
  • AUDUSD=X — AUD/USD
  • USDCAD=X — USD/CAD
  • USDCHF=X — USD/CHF
  • NZDUSD=X — NZD/USD
  • EURJPY=X — EUR/JPY
  • GBPJPY=X — GBP/JPY

Timeframe

  • 5m — M5
  • 15m — M15
  • 1h — H1
  • 4h — H4
  • 1d — D1

Limit ak avètisman

  • Rate limit: 30 rekèt/minit pou /signals ak 60 rekèt/minit pou /instruments, pa IP (kòd 429 ak Retry-After).
  • Sinyal yo se analiz edikatif, se pa konsèy finansye. Trading gen gwo risk.
  • CORS: Access-Control-Allow-Origin: *