> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aioka.io/llms.txt
> Use this file to discover all available pages before exploring further.

# EUR/USD Forex Ghost Trader Status

> Live EUR/USD Forex Ghost Trader status -- current trade, latest verdict, regime, RSI, EMA, live spread (Gate 8), session label, 6 specialist agent votes, all 9 entry gates

<Note>
  This endpoint is public -- no API key required. Powers the EUR/USD panel
  on aioka.io/live. (Sprint 186 -- first non-crypto, non-commodity asset.)
</Note>

**Tier:** Public (no auth)
**Cache:** None -- always live
**Read-only:** Never writes to any trading table.

> EUR/USD council uses 6 specialist agents unique to Forex:
> MACRO\_SAGE (VETO), TECH\_ANALYST, SESSION\_GUARDIAN (VETO),
> FLOW\_WARDEN, MOMENTUM\_HUNTER, RISK\_WARDEN (VETO).
> Three veto agents -- AVOID confidence > 0.7 forces a hard AVOID
> regardless of the chief judge ruling. EUR/USD is more macro-sensitive
> than any other AIOKA asset, hence the extra VETO compared to ETH/Gold.

> ⚠️ This is a paper-trading status snapshot, not financial advice.
> AIOKA EUR/USD Ghost Trader is a simulation in Sprint 186. Never make
> real financial decisions based solely on this signal.

## Sprint 186 field-naming convention

This endpoint returns **snake\_case** field names exclusively. No
camelCase aliases. Other AIOKA endpoints (ETH / SOL / TAO / Gold) use
camelCase aliases via Pydantic populate\_by\_name; EUR/USD does not.
TypeScript clients should write interfaces matching exactly what the
JSON contains.

## Response Fields

EUR/USD evaluates **9 entry gates** (Gate 0 news blackout through Gate 8
spread). Gates 0, 7, and 8 are unique to EUR/USD vs crypto:

* Gate 0 (news blackout) blocks entry around FOMC, NFP, CPI, ECB, Fed
  Chair Speech, FOMC Minutes (TIER-1 = full-day block; TIER-2 = ±N min
  symmetric window).
* Gate 7 (session) blocks entry outside London / NY / Overlap (Tokyo
  and Sydney sessions are intentionally blocked for EUR/USD due to thin
  liquidity).
* Gate 8 (spread) blocks entry when live ZEURZUSD spread is >= 2 pips
  (microstructure stress signal).

### Top-level

| Field                    | Type           | Meaning                                                                                                              |
| ------------------------ | -------------- | -------------------------------------------------------------------------------------------------------------------- |
| `status`                 | string         | `"WAITING"` (no open EUR/USD trade) or `"IN_TRADE"`                                                                  |
| `current_trade`          | object \| null | Open EUR/USD trade details when `status == "IN_TRADE"`                                                               |
| `latest_verdict`         | object \| null | Latest EUR/USD council verdict with agent votes                                                                      |
| `regime`                 | string \| null | Market regime (e.g. `ACCUMULATION`, `BULL_TRENDING`, `RECOVERY`)                                                     |
| `rsi_1h`                 | number \| null | EUR/USD 1H RSI                                                                                                       |
| `ema_200`                | number \| null | EUR/USD 1H EMA(200), 5 decimal places                                                                                |
| `eurusd_price`           | number \| null | Latest EUR/USD spot price (last trade), 5 dp                                                                         |
| `eurusd_bid`             | number \| null | Live best bid (5 dp)                                                                                                 |
| `eurusd_ask`             | number \| null | Live best ask (5 dp)                                                                                                 |
| `spread_pips`            | number \| null | Live (ask - bid) in pips. Must be \< 2.0 for Gate 8 to pass.                                                         |
| `session_label`          | string         | `"LONDON"` / `"OVERLAP"` / `"NEW_YORK"` / `"WEEKEND"` / `"CLOSED"`. Entry only during London / Overlap / NY.         |
| `paper_trades_validated` | int            | Count of closed validated EUR/USD paper trades (0 -- 10 milestone before live capital).                              |
| `paper_mode`             | bool           | `true` while EUR/USD is in paper mode. Becomes `false` after 10 validated paper closes AND post-validation approval. |
| `generated_at`           | string         | Response timestamp (ISO 8601 UTC)                                                                                    |
| `gates`                  | object         | Per-gate boolean evaluator (9 gates for EUR/USD)                                                                     |

### current\_trade fields (when `status == "IN_TRADE"`)

| Field             | Type           | Meaning                                                                     |
| ----------------- | -------------- | --------------------------------------------------------------------------- |
| `entry_price`     | number         | EUR/USD entry price (5 dp)                                                  |
| `size_units`      | number         | Position size in base-currency units (EUR)                                  |
| `pnl_usd`         | number         | Live P\&L in USD                                                            |
| `pnl_pips`        | number         | Live P\&L in pips (Forex-native unit)                                       |
| `tp1_hit`         | bool           | Whether TP1 partial close has fired                                         |
| `stop_loss`       | number         | Stop loss price (5 dp). Hard stop = entry × 0.995 (0.50% / \~50 pips floor) |
| `tp1_price`       | number         | TP1 target price = entry × 1.003 (+0.30% / \~30 pips)                       |
| `tp2_price`       | number         | TP2 target price = entry × 1.007 (+0.70% / \~70 pips)                       |
| `hwm`             | number \| null | High-water mark for TSL ratchet                                             |
| `session`         | string \| null | Session label at entry (`LONDON`/`OVERLAP`/`NEW_YORK`)                      |
| `spread_at_entry` | number \| null | Live spread in pips at entry fill (Gate 8 audit)                            |

### latest\_verdict fields

| Field                 | Type           | Meaning                                                                                                                                                                                              |
| --------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ruling`              | string         | `STRONG_BUY` / `BUY` / `ACCUMULATE` / `HOLD` / `REDUCE` / `AVOID`                                                                                                                                    |
| `confidence`          | number         | 0.0 -- 1.0. Entry requires confidence ≥ 0.65.                                                                                                                                                        |
| `agent_votes`         | object         | Per-agent verdict from all 6 specialist agents                                                                                                                                                       |
| `agent_votes.<AGENT>` | object         | Each agent entry has `ruling` and `confidence`                                                                                                                                                       |
| `plain_explanation`   | string \| null | Plain-English, jargon-free 2-3 sentence summary of WHY the council reached its ruling, synthesized by the Chief Judge in the same call. `null` for historical verdicts recorded before this feature. |
| `created_at`          | string         | ISO 8601 timestamp of verdict                                                                                                                                                                        |

### gates fields

| Field               | Type           | Meaning                                                          |
| ------------------- | -------------- | ---------------------------------------------------------------- |
| `news_blackout`     | bool           | Gate 0 -- no high-impact macro event within window               |
| `judiciary`         | bool           | Gate 1 -- Judiciary Agent bullish                                |
| `council`           | bool           | Gate 2 -- EUR/USD council ≥ 65% confidence and bullish           |
| `ema_proximity`     | bool           | Gate 3 -- price +0.05% to +0.30% above EMA 200                   |
| `regime`            | bool           | Gate 4 -- regime is ACCUMULATION / BULL\_TRENDING / RECOVERY     |
| `quality`           | bool           | Gate 5 -- composite quality score ≥ 65                           |
| `momentum`          | bool           | Gate 6 -- 1H momentum not FALLING                                |
| `session`           | bool           | Gate 7 -- inside London / NY / Overlap; weekend hard block       |
| `spread`            | bool           | Gate 8 -- live ZEURZUSD spread \< 2 pips                         |
| `session_label`     | string         | Current session label (see top-level fields)                     |
| `spread_pips`       | number \| null | Live spread (Gate 8 input)                                       |
| `macro_event_clear` | bool           | Gate 0 outcome (TRUE = no event in window)                       |
| `gates_met`         | int            | Count of passing gates (0 -- 9)                                  |
| `trigger`           | string \| null | Description of the first failing gate, or `null` when all 9 pass |

## Specialist Agents (6)

| Agent              | Weight | Veto | Domain                                                             |
| ------------------ | ------ | ---- | ------------------------------------------------------------------ |
| `MACRO_SAGE`       | 0.25   | ✅    | Fed-ECB rate diff, DXY, US-EU surprise, macro event proximity      |
| `TECH_ANALYST`     | 0.20   | --   | RSI multi-timeframe, MACD, Bollinger Bands, EMA 200 distance       |
| `SESSION_GUARDIAN` | 0.20   | ✅    | Session detection, spread, weekend block, vol ratio                |
| `FLOW_WARDEN`      | 0.15   | --   | CFTC COT institutional positioning, DXY momentum                   |
| `MOMENTUM_HUNTER`  | 0.10   | --   | 1H momentum, MTF alignment, tick activity heuristic                |
| `RISK_WARDEN`      | 0.10   | ✅    | Hard stop math, TSL monotonicity, BE Shield, weekend gap, drawdown |

Three VETO agents (vs ETH's two and Gold's two): AVOID with confidence

> 0.7 from any of MACRO\_SAGE, SESSION\_GUARDIAN, or RISK\_WARDEN forces a
> council ruling of AVOID regardless of the chief judge synthesis.

## EUR/USD-specific risk flags

The council surfaces these risk flags on the verdict object (visible in
the internal `/eurusd_council` Telegram command output; not persisted on
the public verdict row):

* `MACRO_HEADWIND` -- DXY rising or rate differential bearish
* `SESSION_BLOCKED` -- outside London / NY / Overlap or weekend approaching
* `SPREAD_RISK` -- live spread >= 1.5 pips (approaching 2-pip Gate 8)
* `MACRO_EVENT_IMMINENT` -- high-impact event within 30 min
* `WEEKEND_GAP_RISK` -- Friday afternoon, insufficient exit runway
* `USD_STRENGTH` -- DXY 7d change > +1%


## OpenAPI

````yaml GET /v1/forex/eurusd/status
openapi: 3.1.0
info:
  title: AIOKA Intelligence API
  description: |

    ## AI-powered crypto market intelligence

    AIOKA Intelligence API provides real-time access to our AI Council verdicts,
    market signals, regime detection, and Ghost Trader entry signals.

    ### Tiers
    - **Free**: 100 calls/day — Verdict + Regime
    - **Basic** ($49/mo): 1,000 calls/day — + Signals
    - **Pro** ($199/mo): 10,000 calls/day — + Council + Ghost

    ### Authentication
    Pass your API key in the `X-API-Key` header:

    ```
    X-API-Key: aik_free_xxxxxxxxxxxx
    ```

    ### Get your API key
    `POST /v1/keys/generate` (free tier, no credit card)
  contact:
    name: AIOKA Support
    url: https://docs.aioka.io/
    email: api@aioka.io
  license:
    name: Commercial
    url: https://aioka.io/terms
  version: 1.0.0
servers:
  - url: https://api.aioka.io
    description: Production — AIOKA Intelligence API
security: []
paths:
  /v1/forex/eurusd/status:
    get:
      tags:
        - EUR/USD (Forex) Ghost Trader
      summary: EUR/USD Forex Ghost Trader Status
      description: >-
        Returns the current state of the EUR/USD Forex Ghost Trader: open

        position (if any), latest EUR/USD council verdict, market regime,
        EUR/USD

        spot price + bid/ask spread, RSI(1H), EMA 200, current session label

        (LONDON/OVERLAP/NEW_YORK/WEEKEND/CLOSED), and per-gate boolean
        evaluation

        for all 9 entry gates.


        **Tier:** Free (no auth)

        **Cache:** None -- always live

        **Use:** aioka.io/live EUR/USD panel


        Read-only -- never writes to any trading table.


        Sprint 186 -- first non-crypto, non-commodity asset. Field names use

        snake_case throughout (deviation from camelCase convention used by

        ETH / SOL / TAO / Gold endpoints).
      operationId: get_eurusd_status_v1_forex_eurusd_status_get
      responses:
        '200':
          description: Live EUR/USD Ghost Trader status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EURUSDStatusResponse'
        '429':
          description: Rate limit exceeded
      security: []
components:
  schemas:
    EURUSDStatusResponse:
      properties:
        status:
          type: string
          title: Status
          description: '"WAITING" (no open EUR/USD trade) or "IN_TRADE".'
        current_trade:
          anyOf:
            - $ref: '#/components/schemas/EURUSDStatusCurrentTrade'
            - type: 'null'
        latest_verdict:
          anyOf:
            - $ref: '#/components/schemas/EURUSDStatusVerdict'
            - type: 'null'
        regime:
          anyOf:
            - type: string
            - type: 'null'
          title: Regime
        rsi_1h:
          anyOf:
            - type: number
            - type: 'null'
          title: Rsi 1H
        ema_200:
          anyOf:
            - type: number
            - type: 'null'
          title: Ema 200
        eurusd_price:
          anyOf:
            - type: number
            - type: 'null'
          title: Eurusd Price
        eurusd_bid:
          anyOf:
            - type: number
            - type: 'null'
          title: Eurusd Bid
        eurusd_ask:
          anyOf:
            - type: number
            - type: 'null'
          title: Eurusd Ask
        spread_pips:
          anyOf:
            - type: number
            - type: 'null'
          title: Spread Pips
          description: Live spread in pips (must be < 2.0 for Gate 8).
        session_label:
          type: string
          title: Session Label
          description: >-
            Current EUR/USD session. LONDON / OVERLAP / NEW_YORK = entry
            allowed; WEEKEND / CLOSED = blocked.
          default: UNKNOWN
        paper_trades_validated:
          type: integer
          title: Paper Trades Validated
          description: Closed validated EUR/USD paper trades (0-10 milestone).
          default: 0
        paper_mode:
          type: boolean
          title: Paper Mode
          description: >-
            EURUSD_PAPER_MODE flag; live unlocked after 10 validated paper
            closes AND post-validation approval.
          default: true
        generated_at:
          type: string
          format: date-time
          title: Generated At
        gates:
          $ref: '#/components/schemas/EURUSDGates'
      type: object
      required:
        - status
        - generated_at
      title: EURUSDStatusResponse
      example:
        ema_200: 1.17721
        eurusd_ask: 1.17841
        eurusd_bid: 1.17828
        eurusd_price: 1.17841
        gates:
          council: true
          ema_proximity: true
          gates_met: 9
          judiciary: true
          macro_event_clear: true
          momentum: true
          news_blackout: true
          quality: true
          regime: true
          session: true
          session_label: OVERLAP
          spread: true
          spread_pips: 1.3
        generated_at: '2026-05-09T14:30:00+00:00'
        latest_verdict:
          agent_votes: {}
          confidence: 0.71
          created_at: '2026-05-09T14:00:00+00:00'
          ruling: ACCUMULATE
        paper_mode: true
        paper_trades_validated: 0
        regime: ACCUMULATION
        rsi_1h: 56.2
        session_label: OVERLAP
        spread_pips: 1.3
        status: WAITING
    EURUSDStatusCurrentTrade:
      properties:
        entry_price:
          type: number
          title: Entry Price
        size_units:
          type: number
          title: Size Units
          description: Position size in base-currency units (EUR).
        pnl_usd:
          type: number
          title: Pnl Usd
        pnl_pips:
          type: number
          title: Pnl Pips
          description: Live P&L in pips (Forex-native unit).
        tp1_hit:
          type: boolean
          title: Tp1 Hit
        stop_loss:
          type: number
          title: Stop Loss
        tp1_price:
          type: number
          title: Tp1 Price
        tp2_price:
          type: number
          title: Tp2 Price
        hwm:
          anyOf:
            - type: number
            - type: 'null'
          title: Hwm
        session:
          anyOf:
            - type: string
            - type: 'null'
          title: Session
          description: Session label at entry (LONDON / OVERLAP / NEW_YORK).
        spread_at_entry:
          anyOf:
            - type: number
            - type: 'null'
          title: Spread At Entry
          description: ZEURZUSD spread in pips at entry fill (Gate 8 audit).
      type: object
      required:
        - entry_price
        - size_units
        - pnl_usd
        - pnl_pips
        - tp1_hit
        - stop_loss
        - tp1_price
        - tp2_price
      title: EURUSDStatusCurrentTrade
    EURUSDStatusVerdict:
      properties:
        ruling:
          type: string
          title: Ruling
        confidence:
          type: number
          title: Confidence
        agent_votes:
          type: object
          title: Agent Votes
        created_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Created At
        plain_explanation:
          anyOf:
            - type: string
            - type: 'null'
          title: Plain Explanation
      type: object
      required:
        - ruling
        - confidence
      title: EURUSDStatusVerdict
    EURUSDGates:
      properties:
        news_blackout:
          type: boolean
          title: News Blackout
          default: false
        judiciary:
          type: boolean
          title: Judiciary
          default: false
        council:
          type: boolean
          title: Council
          default: false
        ema_proximity:
          type: boolean
          title: Ema Proximity
          default: false
        regime:
          type: boolean
          title: Regime
          default: false
        quality:
          type: boolean
          title: Quality
          default: false
        momentum:
          type: boolean
          title: Momentum
          default: false
        session:
          type: boolean
          title: Session
          default: false
        spread:
          type: boolean
          title: Spread
          default: false
        session_label:
          type: string
          title: Session Label
          description: LONDON / OVERLAP / NEW_YORK / WEEKEND / CLOSED
          default: UNKNOWN
        spread_pips:
          anyOf:
            - type: number
            - type: 'null'
          title: Spread Pips
          description: Live ZEURZUSD bid-ask spread in pips (Gate 8 input).
        macro_event_clear:
          type: boolean
          title: Macro Event Clear
          description: Gate 0 outcome -- True when no high-impact event in window.
          default: true
        gates_met:
          type: integer
          title: Gates Met
          description: Count of passing gates (0-9).
          default: 0
        trigger:
          anyOf:
            - type: string
            - type: 'null'
          title: Trigger
          description: Description of the first failing gate, or None when all 9 pass.
      type: object
      title: EURUSDGates
      description: |-
        Per-gate boolean status for the EUR/USD 9-gate entry framework.

        Spec enumerates Gate 0 (news blackout) through Gate 8 (spread)
        inclusive = 9 distinct checks. The header in the spec doc says
        "8 gates" colloquially but every evaluation row shipped here is
        required for entry.

````