{"openapi":"3.1.1","info":{"title":"SteadyTrader Supported API","version":"1.0.0","description":"The supported discovery and licensed indicator API. It is not an anonymous or general-purpose live market-data API. Private account, billing, administration, and internal product endpoints are intentionally excluded."},"servers":[{"url":"https://steadytrader.co","description":"SteadyTrader production"}],"paths":{"/api":{"get":{"operationId":"getApiIndex","summary":"Get the supported API index","description":"Returns stable links and the intentionally supported discovery and licensed-indicator endpoints.","x-agent-callable":true,"responses":{"200":{"description":"Supported API index.","headers":{"RateLimit-Policy":{"description":"IETF RateLimit policy. The api policy allows 240 requests in each 60-second window at the coarse public edge.","schema":{"type":"string","example":"\"api\";q=240;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiIndex"}}}},"429":{"description":"Structured error that an automated client can act on.","headers":{"RateLimit-Policy":{"description":"IETF RateLimit policy. The api policy allows 240 requests in each 60-second window at the coarse public edge.","schema":{"type":"string","example":"\"api\";q=240;w=60"}},"RateLimit":{"description":"Present on throttled responses and reports zero remaining with seconds until reset.","schema":{"type":"string","example":"\"api\";r=0;t=30"}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","minimum":1,"example":30}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonError"}}}}}}},"/api/agent-info":{"get":{"operationId":"getAgentInfo","summary":"Get agent usage guidance","description":"Returns best-fit use cases, explicit limitations, safety guidance, and links for agents working with SteadyTrader.","x-agent-callable":true,"responses":{"200":{"description":"Agent usage guidance.","headers":{"RateLimit-Policy":{"description":"IETF RateLimit policy. The api policy allows 240 requests in each 60-second window at the coarse public edge.","schema":{"type":"string","example":"\"api\";q=240;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentInfo"}}}},"429":{"description":"Structured error that an automated client can act on.","headers":{"RateLimit-Policy":{"description":"IETF RateLimit policy. The api policy allows 240 requests in each 60-second window at the coarse public edge.","schema":{"type":"string","example":"\"api\";q=240;w=60"}},"RateLimit":{"description":"Present on throttled responses and reports zero remaining with seconds until reset.","schema":{"type":"string","example":"\"api\";r=0;t=30"}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","minimum":1,"example":30}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonError"}}}}}}},"/api/levels":{"get":{"operationId":"getIndicatorLevels","summary":"Get licensed indicator levels","description":"First-party SteadyTrader indicator endpoint. Returns the current level set for one supported symbol after license, platform, installation, and single-instance checks. It is not a general-agent tool or a general live market-data feed.","x-agent-callable":false,"security":[{"licenseBearer":[],"platformHeader":[],"installHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":true,"description":"Supported underlying symbol.","schema":{"type":"string","minLength":1,"maxLength":8,"pattern":"^[A-Za-z0-9.^-]+$","example":"SPY"}},{"name":"date","in":"query","required":false,"description":"Optional replay session date. Replay storage is not currently available.","schema":{"type":"string","pattern":"^\\d{8}$","example":"20260822"}},{"name":"X-Platform","in":"header","required":true,"description":"Licensed chart-platform identifier.","schema":{"type":"string","enum":["nt8","motivewave","atas","quantower","sierrachart","tradingview"]}},{"name":"X-Install-Id","in":"header","required":true,"description":"Stable installation fingerprint generated by the first-party client.","schema":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$","writeOnly":true}}],"responses":{"200":{"description":"Current modeled indicator levels.","headers":{"RateLimit-Policy":{"description":"IETF RateLimit policy. The api policy allows 240 requests in each 60-second window at the coarse public edge.","schema":{"type":"string","example":"\"api\";q=240;w=60, \"levels-ip\";q=120;w=60, \"license-key\";q=12;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LevelPayload"}}}},"400":{"description":"The symbol parameter is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LevelError"}}}},"401":{"description":"License is not active for this platform or the instance cannot be accepted. The decision is deliberately opaque.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LevelLicenseError"}}}},"404":{"description":"The symbol is not supported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LevelError"}}}},"409":{"description":"Historical level storage is not yet available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LevelError"}}}},"429":{"description":"A coarse edge, route IP, or license-key limit was exceeded.","headers":{"RateLimit-Policy":{"description":"IETF RateLimit policy. The api policy allows 240 requests in each 60-second window at the coarse public edge.","schema":{"type":"string","example":"\"api\";q=240;w=60, \"levels-ip\";q=120;w=60, \"license-key\";q=12;w=60"}},"RateLimit":{"description":"Present on throttled responses and reports zero remaining with seconds until reset.","schema":{"type":"string","example":"\"levels-ip\";r=0;t=30"}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","minimum":1,"example":30}}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/JsonError"},{"$ref":"#/components/schemas/LevelRateLimitError"}]}}}},"502":{"description":"The level engine is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LevelError"}}}}}}},"/api/license/validate":{"post":{"operationId":"validateIndicatorLicense","summary":"Validate an indicator installation","description":"First-party SteadyTrader indicator endpoint. Validates body-supplied license credentials and refreshes the single-instance heartbeat. It is not a general-agent tool. Every license refusal is intentionally returned as the exact same opaque result.","x-agent-callable":false,"requestBody":{"required":true,"description":"License credentials stored by the indicator client. Never expose these values in logs or public prompts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseValidationRequest"}}}},"responses":{"200":{"description":"Opaque accepted or refused license result.","headers":{"RateLimit-Policy":{"description":"IETF RateLimit policy. The api policy allows 240 requests in each 60-second window at the coarse public edge.","schema":{"type":"string","example":"\"api\";q=240;w=60, \"license-validate-ip\";q=60;w=60, \"license-key\";q=12;w=60"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseResult"}}}},"429":{"description":"A coarse edge, route IP, or license-key limit was exceeded.","headers":{"RateLimit-Policy":{"description":"IETF RateLimit policy. The api policy allows 240 requests in each 60-second window at the coarse public edge.","schema":{"type":"string","example":"\"api\";q=240;w=60, \"license-validate-ip\";q=60;w=60, \"license-key\";q=12;w=60"}},"RateLimit":{"description":"Present on throttled responses and reports zero remaining with seconds until reset.","schema":{"type":"string","example":"\"license-validate-ip\";r=0;t=30"}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","minimum":1,"example":30}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonError"}}}},"503":{"description":"Required server schema is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonError"}}}}}}}},"components":{"securitySchemes":{"licenseBearer":{"type":"http","scheme":"bearer","bearerFormat":"SteadyTrader license key","description":"Account license key supplied as Authorization: Bearer <key>."},"platformHeader":{"type":"apiKey","in":"header","name":"X-Platform","description":"Supported platform identifier."},"installHeader":{"type":"apiKey","in":"header","name":"X-Install-Id","description":"Stable installation fingerprint."}},"schemas":{"ApiEndpoint":{"type":"object","additionalProperties":false,"required":["path","method","purpose"],"properties":{"path":{"type":"string"},"method":{"type":"string","enum":["GET","POST"]},"purpose":{"type":"string"}}},"ApiIndex":{"type":"object","additionalProperties":false,"required":["name","description","documentation","openapi","agentInfo","endpoints"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"documentation":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"agentInfo":{"type":"string","format":"uri"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/ApiEndpoint"}}}},"AgentInfo":{"type":"object","additionalProperties":false,"required":["name","description","whenToUse","whenNotToUse","documentation","methodology","openapi","support"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"whenToUse":{"type":"array","items":{"type":"string"}},"whenNotToUse":{"type":"array","items":{"type":"string"}},"documentation":{"type":"string","format":"uri"},"methodology":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"support":{"type":"string","format":"uri"}}},"WallTier":{"type":"object","additionalProperties":false,"required":["strike","gex"],"properties":{"strike":{"type":"number"},"gex":{"type":"number","description":"Modeled exposure magnitude in millions of dollars per one-percent move."}}},"LevelPayload":{"type":"object","additionalProperties":false,"required":["ok","symbol","spot","asOf","callWalls","putWalls","dexCallWalls","dexPutWalls","callWall","putWall","gammaFlip","maxPain","gammaPeak","majorWall","netGex","source"],"properties":{"ok":{"type":"boolean","const":true},"symbol":{"type":"string"},"spot":{"type":"number"},"asOf":{"type":"integer","minimum":0,"description":"Unix epoch milliseconds."},"callWalls":{"type":"array","items":{"$ref":"#/components/schemas/WallTier"}},"putWalls":{"type":"array","items":{"$ref":"#/components/schemas/WallTier"}},"dexCallWalls":{"type":"array","items":{"$ref":"#/components/schemas/WallTier"}},"dexPutWalls":{"type":"array","items":{"$ref":"#/components/schemas/WallTier"}},"callWall":{"type":"number"},"putWall":{"type":"number"},"gammaFlip":{"type":"number"},"maxPain":{"type":"number"},"gammaPeak":{"type":"number"},"majorWall":{"type":"number"},"netGex":{"type":"number"},"source":{"type":"string","enum":["live","sample"]}}},"LicenseValidationRequest":{"type":"object","additionalProperties":false,"required":["key","platform","fingerprint"],"properties":{"key":{"type":"string","pattern":"^ST-[0-9A-HJKMNP-TV-Z]{8}-[0-9A-HJKMNP-TV-Z]{8}-[0-9A-HJKMNP-TV-Z]{8}$","writeOnly":true},"platform":{"type":"string","enum":["nt8","motivewave","atas","quantower","sierrachart","tradingview"]},"fingerprint":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$","writeOnly":true}}},"LicenseResult":{"type":"object","additionalProperties":false,"required":["ok"],"properties":{"ok":{"type":"boolean"},"platform":{"type":"string","enum":["nt8","motivewave","atas","quantower","sierrachart","tradingview"]},"error":{"type":"string"}}},"JsonError":{"type":"object","additionalProperties":false,"required":["error","code","resolution"],"properties":{"error":{"type":"string"},"code":{"type":"string"},"resolution":{"type":"string"}}},"LevelError":{"type":"object","additionalProperties":false,"required":["error","code","resolution"],"properties":{"ok":{"type":"boolean","const":false},"error":{"type":"string"},"code":{"type":"string"},"resolution":{"type":"string"},"supported":{"type":"boolean","const":false},"source":{"type":"string","const":"error"}}},"LevelLicenseError":{"type":"object","additionalProperties":false,"required":["ok","error","code","resolution"],"properties":{"ok":{"type":"boolean","const":false},"error":{"type":"string"},"code":{"type":"string","const":"license_unavailable"},"resolution":{"type":"string"}}},"LevelRateLimitError":{"type":"object","additionalProperties":false,"required":["ok","error","code","resolution"],"properties":{"ok":{"type":"boolean","const":false},"error":{"type":"string"},"code":{"type":"string","const":"rate_limit_exceeded"},"resolution":{"type":"string"}}}}}}