{
  "openapi": "3.1.0",
  "info": {
    "title": "Sharpnel Trading — public read-only API",
    "version": "2026-09-08",
    "summary": "Dealer-gamma levels, their graded record, and a public paper-trading desk.",
    "description": "Everything here is free and needs no account. It is the evidence layer behind sharpnel-trading.com: the walls we publish each morning, whether they held, and every trade an in-terminal paper desk took against them. Real-time data and the terminal itself are the paid product and are not in this document.\n\nNothing here is investment advice. A level is a measurement of dealer positioning, not a recommendation.",
    "contact": { "name": "Sharpnel Trading", "email": "sharpneltrading@sharpnel-trading.com", "url": "https://www.sharpnel-trading.com" },
    "license": { "name": "Free to read and cite with attribution to sharpnel-trading.com" }
  },
  "servers": [{ "url": "https://www.sharpnel-trading.com" }],
  "paths": {
    "/data/scorecard": {
      "get": {
        "operationId": "getScorecard",
        "summary": "The graded record of our published levels, with the methodology verbatim",
        "description": "Rolling accuracy statistics and recent daily scores for the dealer-gamma levels published at 08:30 ET. The `metadata` block states exactly how a level is graded, including the point tolerances. Quote the record; do not compute a win rate from it.",
        "responses": { "200": { "description": "Statistics, recent daily scores, and the methodology text" } }
      }
    },
    "/api/live/desk": {
      "get": {
        "operationId": "getDeskRecord",
        "summary": "Every paper trade the in-terminal desk has taken, wins and losses",
        "description": "The desk rests a limit in front of the walls Pharos calls and publishes every simulated fill. Deliberately lagged ten minutes, the same delay as the public stream. Simulated fills on live data, before costs.",
        "responses": { "200": { "description": "Today's trades, the open position if any, and the running record" } }
      }
    },
    "/api/live/session-range": {
      "get": {
        "operationId": "getSessionRange",
        "summary": "Overnight, Asia and prior-session ranges from the recorded tape",
        "parameters": [
          { "name": "symbol", "in": "query", "required": false, "schema": { "type": "string", "default": "ES", "enum": ["ES","NQ","YM","RTY","GC","CL"] } },
          { "name": "date", "in": "query", "required": false, "schema": { "type": "string", "format": "date" }, "description": "ET trade date; defaults to today" }
        ],
        "responses": { "200": { "description": "Overnight Globex high/low, the Asia-session range, and the prior cash session's high, low and close. An empty window returns nulls, never an estimate." } }
      }
    },
    "/api/live/wall-watch": {
      "get": {
        "operationId": "getWallWatch",
        "summary": "Today's wall tests as they resolve",
        "description": "Each time price tests a published wall, an event records whether it held or traded through. This is what the record is built from.",
        "responses": { "200": { "description": "The trade date and the day's wall-test events" } }
      }
    }
  }
}
