{"openapi":"3.0.3","info":{"title":"TAAPI.IO API","version":"2.0.0","description":"Technical Analysis API providing indicator calculations and OHLCV candle data for crypto and stock markets.\n\nEach indicator is exposed as its own endpoint (`GET /indicator/<name>`) with only the parameters that indicator actually accepts documented.\n\n## Authentication\n\nAll endpoints require a valid API key passed as a **Bearer token** in the `Authorization` header:\n\n```\nAuthorization: Bearer <your-api-key>\n```\n\nGet your API key at [taapi.io](https://taapi.io).\n\n## Rate Limiting\n\nRequests are rate-limited based on your subscription plan. When the limit is exceeded the API returns **HTTP 429**.\n\n| Plan | Example limit |\n|------|--------------|\n| Free | 1 request / 15 seconds |\n| Basic | 5 requests / 15 seconds |\n| Pro | 30 requests / 15 seconds |\n| Expert | 75 requests / 15 seconds |\n\nWhen you receive a 429, wait until the current window expires before retrying.\n\n## Real-time streaming (WebSocket)\n\nFor live indicator updates over a persistent connection, use the **streaming** service on the same domain:\n\n- **WebSocket URL:** `wss://v2.taapi.io/streaming` (or your base URL + `/streaming` if using path-based routing)\n- **Health check:** `GET https://v2.taapi.io/streaming/health`\n\n**Connection flow:**\n\n1. Connect to the WebSocket URL.\n2. **Authenticate** — send: `{ \"type\": \"auth\", \"token\": \"Bearer <your-api-key>\" }`\n   - Response: `{ \"type\": \"auth_ok\" }` or `{ \"type\": \"auth_error\", \"error\": \"...\" }`\n3. **Subscribe** to an indicator (after auth) — send:\n   `{ \"type\": \"subscribe\", \"id\": \"my-chart-1\", \"exchange\": \"binance\", \"symbol\": \"BTC/USDT\", \"interval\": \"1m\", \"indicator\": \"rsi\", \"params\": { \"period\": 14 } }`\n4. **Receive updates** — server sends: `{ \"type\": \"update\", \"subscription\": \"EXCHANGE:SYMBOL:INTERVAL\", \"data\": { \"rsi\": 45.2 } }`\n5. **Unsubscribe** — send: `{ \"type\": \"unsubscribe\", \"id\": \"binance_btc/usdt_1m_my-chart-1\" }`\n6. **List subscriptions** — send: `{ \"type\": \"list\" }` → response: `{ \"type\": \"subscriptions\", \"data\": [...] }`\n\nUse the same API key (Bearer token) as for the REST API."},"servers":[{"url":"https://v2.taapi.io","description":"Production"},{"url":"http://localhost:8080","description":"Local development"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"Your TAAPI API key, passed as a Bearer token in the Authorization header."}},"parameters":{"exchange":{"name":"exchange","in":"query","required":true,"description":"Exchange identifier (e.g. `binance`, `bybit`, `coinbase`, `NYSE`)","schema":{"type":"string","example":"binance"}},"symbol":{"name":"symbol","in":"query","required":true,"description":"Trading pair or ticker symbol (e.g. `BTCUSDT`, `ETHUSDT`, `AAPL`)","schema":{"type":"string","example":"BTCUSDT"}},"timeframe":{"name":"timeframe","in":"query","required":true,"description":"Candle timeframe","schema":{"type":"string","enum":["1m","5m","15m","1h","4h","1d","1w"],"example":"1h"}},"results":{"name":"results","in":"query","required":false,"description":"Number of results to return. Use `max` to return all available results.","schema":{"type":"integer","default":1,"example":1}},"backtrack":{"name":"backtrack","in":"query","required":false,"description":"Number of candles to skip from the end (shift results back in time).","schema":{"type":"integer","default":0,"example":0}}},"schemas":{"ErrorResponse":{"type":"object","properties":{"error":{"type":"string","example":"Unknown indicator: fakeindicator"}}},"PendingResponse":{"type":"object","properties":{"pending":{"type":"boolean","example":true},"key":{"type":"string","example":"ta:binance:BTCUSDT:1h:rsi:abc123:rmax"}}},"Candle":{"type":"object","properties":{"timestamp":{"type":"integer","example":1708300800},"timestampHuman":{"type":"string","example":"2024-02-19 00:00:00"},"open":{"type":"number","format":"double","example":51200.5},"high":{"type":"number","format":"double","example":52100},"low":{"type":"number","format":"double","example":50900.25},"close":{"type":"number","format":"double","example":51850.75},"volume":{"type":"number","format":"double","example":1234.56}}}}},"tags":[{"name":"Reference Data","description":"Endpoints to discover available exchanges and supported market symbols."},{"name":"Indicator Calls","description":"Calculate technical indicators — either one indicator per request (Single) or multiple indicators across multiple assets in a single round-trip (Bulk)."},{"name":"Market Data","description":"Raw OHLCV (Open, High, Low, Close, Volume) candle data from supported exchanges and markets."},{"name":"Manual Candles","description":"Calculate indicators over a list of provided candles instead of fetching them from an exchange. You must provide your own OHLCV data."},{"name":"Cycle","description":"Cycle indicators"},{"name":"Divergence","description":"Divergence indicators"},{"name":"Market Structure","description":"Market Structure indicators"},{"name":"Math","description":"Math indicators"},{"name":"Momentum","description":"Momentum indicators"},{"name":"Pattern Recognition - Advanced","description":"Pattern Recognition - Advanced indicators"},{"name":"Pattern Recognition - Simple","description":"Pattern Recognition - Simple indicators"},{"name":"Statistics","description":"Statistics indicators"},{"name":"Trend","description":"Trend indicators"},{"name":"Volatility","description":"Volatility indicators"},{"name":"Volume","description":"Volume indicators"}],"paths":{"/indicator/rsi":{"get":{"summary":"Single Indicator Calculation","description":"**RSI** — Relative Strength Index measures the speed and magnitude of recent price changes to evaluate overbought or oversold conditions. Values above 70 suggest overbought; below 30 suggest oversold.\n\nThis example uses RSI, but every supported indicator follows the exact same request pattern:\n\n```\nGET /indicator/<name>?exchange=binance&symbol=BTCUSDT&timeframe=1h\n```\n\nBrowse the indicator categories in the sidebar to find any supported indicator and see its specific parameters.\n\n## Common Parameters\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `exchange` | ✅ | Exchange identifier, e.g. `binance`, `bybit`, `NYSE` |\n| `symbol` | ✅ | Trading pair or ticker, e.g. `BTCUSDT`, `AAPL` |\n| `timeframe` | ✅ | Candle interval: `1m`, `5m`, `15m`, `1h`, `4h`, `1d`, `1w` |\n| `results` | ❌ | Number of historical values to return (default: `1`) |\n| `backtrack` | ❌ | Candles to skip from the most recent (default: `0`) |\n\n## Response Shape\n\nResults are **always wrapped in an array**, even when only one value is returned (`results=1`):\n\n```json\n{ \"value\": [62.34], \"timestamp\": [1708300800] }\n```\n\nMulti-output indicators return named array fields (e.g. `valueFastK` / `valueFastD` for StochRSI).\n\nTo calculate multiple indicators or assets in a single request — use the **Bulk Indicator Calculations** endpoint.","operationId":"get_rsi","tags":["Indicator Calls","Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Relative Strength Index (RSI) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}},"examples":{"rsiDefault":{"summary":"RSI — single result (default)","value":{"value":[62.34],"timestamp":[1708300800]}},"rsiMultiple":{"summary":"RSI — multiple results (results=3)","value":{"value":[58.12,60.77,62.34],"timestamp":[1708214400,1708257600,1708300800]}},"rsiBacktrack":{"summary":"RSI — one candle back (backtrack=1)","value":{"value":[60.77],"timestamp":[1708257600]}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/bulk":{"post":{"summary":"Bulk Indicator Calculations","description":"Calculate multiple technical indicators across multiple assets in a single request.\n\nEach **construct** represents one asset (exchange + symbol + timeframe) and contains an array of indicators to compute for that asset. Constructs are processed in parallel — one candle fetch per asset, all indicators computed from that shared candle set.\n\n## Construct & Indicator IDs\n\nBoth constructs and indicators require a unique `id`. These become the keys of the response object:\n\n```js\nresponse.btc_1h.ema_fast.value\n```\n\n- Only alphanumeric characters and underscores allowed\n- Construct ids must be unique within the request\n- Indicator ids must be unique within their construct\n- No two constructs may target the same exchange + symbol + timeframe\n\n## Indicator Names\n\nThe `indicator` field in each indicator object must match the identifier used by the individual `GET /indicator/<name>` endpoints (e.g. `ema`, `rsi`, `macd`, `stochrsi`). You can browse all supported indicators and their parameters in the **Single Indicator** section of this documentation — each endpoint is named `/indicator/<name>` and lists every accepted parameter.\n\nThe same indicator can appear multiple times in a single construct with different parameters — just give each one a unique `id`:\n\n```json\n{ \"id\": \"ema_fast\", \"indicator\": \"ema\", \"period\": 9 }\n{ \"id\": \"ema_slow\", \"indicator\": \"ema\", \"period\": 50 }\n```\n\n## Response Shape\n\n**Default (`verbose: false`)** — each indicator id maps directly to its result data:\n\n```json\n{\n  \"btc_1h\": {\n    \"ema_fast\": { \"value\": [49200.5], \"timestamp\": [1708300800] },\n    \"rsi_14\":  { \"value\": [62.3],     \"timestamp\": [1708300800] }\n  }\n}\n```\n\n**Verbose (`verbose: true`)** — each indicator includes full metadata:\n\n```json\n{\n  \"btc_1h\": {\n    \"_asset\": { \"exchange\": \"bybit\", \"symbol\": \"BTCUSDT\", \"timeframe\": \"1h\" },\n    \"ema_fast\": {\n      \"indicator\": \"ema\",\n      \"params\": { \"period\": 9 },\n      \"result\": { \"value\": [49200.5], \"timestamp\": [1708300800] },\n      \"errors\": []\n    }\n  }\n}\n```\n\n## Error Handling\n\nIf a candle fetch fails (e.g. invalid symbol), the construct returns immediately with `_error` set — no timeout:\n\n```json\n{\n  \"btc_1h\": {\n    \"_error\": \"Failed to fetch candles: 404 Not Found — check exchange, symbol and timeframe parameters\",\n    \"ema_fast\": null\n  }\n}\n```\n\n## Limits\n\n- Maximum **20 constructs** per request (hard cap, not configurable)\n- Maximum **20 indicators** per construct (hard cap, not configurable)\n- Plan-based construct limits apply — see your subscription","operationId":"postBulk","tags":["Indicator Calls"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["constructs"],"properties":{"verbose":{"type":"boolean","default":false,"description":"When true, each indicator result includes its name, normalised parameters, and an errors array. When false (default), only the raw result data is returned."},"constructs":{"type":"array","minItems":1,"maxItems":20,"description":"Array of constructs to calculate. Each construct defines one asset and its indicators.","items":{"type":"object","required":["id","exchange","symbol","timeframe","indicators"],"properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_]+$","description":"Unique identifier for this construct. Becomes the top-level key in the response. Only alphanumeric and underscores allowed.","example":"btc_1h"},"exchange":{"type":"string","description":"Exchange identifier. Case-insensitive — normalised to lowercase internally.","example":"bybit"},"symbol":{"type":"string","description":"Trading pair. Case-insensitive — normalised to uppercase internally.","example":"BTCUSDT"},"timeframe":{"type":"string","enum":["1m","5m","15m","1h","4h","1d","1w"],"description":"Candle timeframe.","example":"1h"},"indicators":{"type":"array","minItems":1,"maxItems":20,"description":"Indicators to compute. Candles are fetched once and shared across all indicators in the construct.","items":{"type":"object","required":["id","indicator"],"properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_]+$","description":"Unique identifier for this indicator within the construct.","example":"ema_fast"},"indicator":{"type":"string","description":"Indicator name (e.g. `ema`, `rsi`, `macd`). Case-insensitive.","example":"ema"},"results":{"type":"integer","default":1,"description":"Number of result values to return.","example":1},"backtrack":{"type":"integer","default":0,"description":"Number of candles to skip from the most recent.","example":0}},"additionalProperties":{"description":"Indicator-specific parameters (e.g. `period`, `fastPeriod`). Merged with defaults."}}}}}}}},"examples":{"singleConstruct":{"summary":"Single construct — EMA, StochRSI with multiple results","value":{"verbose":false,"constructs":[{"id":"bitcoin_analysis","exchange":"bybit","symbol":"btcusdt","timeframe":"1m","indicators":[{"id":"ema_fast","indicator":"ema","backtrack":0,"results":2,"period":9},{"id":"ema_slow","indicator":"ema","backtrack":0,"results":2,"period":20},{"id":"stochrsi","indicator":"stochrsi","backtrack":1,"results":3}]}]}},"multiConstruct":{"summary":"Two constructs — BTC 15m and XRP 1h in parallel","value":{"verbose":false,"constructs":[{"id":"bitcoin_analysis","exchange":"bybit","symbol":"btcusdt","timeframe":"15m","indicators":[{"id":"ema_fast","indicator":"ema","backtrack":0,"results":2,"period":9},{"id":"ema_slow","indicator":"ema","backtrack":0,"results":2,"period":20},{"id":"stochrsi","indicator":"stochrsi","backtrack":1,"results":3}]},{"id":"ripple_analysis","exchange":"bybit","symbol":"XRPUSDT","timeframe":"1h","indicators":[{"id":"ema200","indicator":"ema","backtrack":0,"results":2,"period":200},{"id":"rsi","indicator":"rsi","backtrack":1,"results":4}]}]}},"verboseOutput":{"summary":"Single construct, verbose: true — EMA, Aroon, KDJ","value":{"verbose":true,"constructs":[{"id":"stellar_analysis","exchange":"binance","symbol":"xlmusdt","timeframe":"1d","indicators":[{"id":"ema50","indicator":"ema","backtrack":0,"results":2,"period":50},{"id":"aroon","indicator":"aroon","backtrack":0,"results":2},{"id":"kdj","indicator":"kdj","backtrack":1,"results":3,"period":9,"signal":3}]}]}}}}}},"responses":{"200":{"description":"Results keyed by construct id then indicator id. A `_error` key at the construct level means a candle fetch failed for that construct.","content":{"application/json":{"schema":{"type":"object","description":"Top-level keys are construct ids.","additionalProperties":{"type":"object","properties":{"_error":{"type":"string","description":"Present only when a candle fetch failed. All indicator values will be null.","example":"Failed to fetch candles: 404 Not Found — check exchange, symbol and timeframe parameters"},"_asset":{"type":"object","description":"Present only when verbose: true.","properties":{"exchange":{"type":"string","example":"bybit"},"symbol":{"type":"string","example":"BTCUSDT"},"timeframe":{"type":"string","example":"1h"}}}},"additionalProperties":{"description":"Indicator result — raw data (verbose: false) or verbose envelope (verbose: true), or null on failure.","oneOf":[{"type":"object","description":"Raw result (verbose: false)","properties":{"value":{"description":"Indicator output value(s).","oneOf":[{"type":"number","format":"double"},{"type":"array","items":{"type":"number","format":"double"}}]},"timestamp":{"description":"Unix timestamp(s) aligned to each result.","oneOf":[{"type":"integer"},{"type":"array","items":{"type":"integer"}}]}}},{"type":"object","description":"Verbose envelope (verbose: true)","properties":{"indicator":{"type":"string","example":"ema"},"params":{"type":"object","description":"Fully normalised parameters including defaults.","example":{"period":9}},"result":{"nullable":true,"type":"object","properties":{"value":{"oneOf":[{"type":"number","format":"double"},{"type":"array","items":{"type":"number","format":"double"}}]},"timestamp":{"oneOf":[{"type":"integer"},{"type":"array","items":{"type":"integer"}}]}}},"errors":{"type":"array","items":{"type":"string"},"description":"Empty on success.","example":[]}}},{"type":"null","description":"null when computation failed and verbose: false"}]}}},"examples":{"singleConstruct":{"summary":"Single construct — EMA arrays and multi-output StochRSI","value":{"bitcoin_analysis":{"ema_fast":{"value":[66723.02766924276,66716.86213539421],"timestamp":[1771501380,1771501440]},"ema_slow":{"value":[66768.35764346743,66761.10453456578],"timestamp":[1771501380,1771501440]},"stochrsi":{"valueFastK":[48.81699906731188,59.24713584288045,52.30496453900702],"valueFastD":[32.24318512928567,46.9850006066362,53.45636648306649],"timestamp":[1771501260,1771501320,1771501380]}}}},"multiConstruct":{"summary":"Two constructs — BTC 15m and XRP 1h results side by side","value":{"bitcoin_analysis":{"ema_fast":{"value":[66863.98414684412,66802.9273174753],"timestamp":[1771500600,1771501500]},"ema_slow":{"value":[66915.3432222163,66881.37720105283],"timestamp":[1771500600,1771501500]},"stochrsi":{"valueFastK":[18.004521473758277,12.255927020191153,11.093517066032684],"valueFastD":[14.938403513847367,14.324671187873081,13.784655186660665],"timestamp":[1771498800,1771499700,1771500600]}},"ripple_analysis":{"ema200":{"value":[1.4523849987797652,1.4519473371003646],"timestamp":[1771495200,1771498800]},"rsi":{"value":[45.041929267129575,37.93109081903071,37.2969842845039,35.575696585395676],"timestamp":[1771484400,1771488000,1771491600,1771495200]}}}},"verboseOutput":{"summary":"Single construct, verbose: true — full metadata envelope","value":{"stellar_analysis":{"_asset":{"exchange":"binance","symbol":"xlmusdt","timeframe":"1d"},"ema50":{"indicator":"ema","params":{"period":50},"result":{"value":[0.19289592987113444,0.19158628556246252],"timestamp":[1771372800,1771459200]},"errors":[]},"aroon":{"indicator":"aroon","params":{"period":14},"result":{"valueAroonDown":[14.285714285714286,7.142857142857143],"valueAroonUp":[78.57142857142857,71.42857142857143],"timestamp":[1771372800,1771459200]},"errors":[]},"kdj":{"indicator":"kdj","params":{"dPeriod":9,"kPeriod":9,"kSmooth":3,"period":9,"signal":3},"result":{"valueK":[61.00336253939539,54.96815078383934,46.77800961346865],"valueD":[57.975261765447264,56.97289143824462,53.57459749665263],"valueJ":[67.05956408729163,50.95866947502877,33.18483384710069],"timestamp":[1771200000,1771286400,1771372800]},"errors":[]}}}}}}}},"400":{"description":"Validation error — missing or invalid fields in the request body.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"examples":{"missingId":{"summary":"Construct missing id","value":{"error":"Construct [0] is missing a required 'id' field"}},"invalidId":{"summary":"Invalid id characters","value":{"error":"Construct [0] id \"btc 1h\" is invalid. Only alphanumeric characters and underscores are allowed."}},"duplicateConstructId":{"summary":"Duplicate construct id","value":{"error":"Duplicate construct id \"btc_1h\". Construct ids must be unique within the request."}},"duplicateAsset":{"summary":"Duplicate asset in two constructs","value":{"error":"Duplicate construct: exchange \"bybit\", symbol \"BTCUSDT\", timeframe \"1h\" appears more than once. Merge the indicators into a single construct."}},"duplicateIndicatorId":{"summary":"Duplicate indicator id within a construct","value":{"error":"Construct \"btc_1h\" has duplicate indicator id \"ema_fast\". Indicator ids must be unique within a construct."}},"unknownIndicator":{"summary":"Unknown indicator name","value":{"error":"Construct \"btc_1h\" references unknown indicator: fakeindicator"}},"tooManyConstructs":{"summary":"Exceeds absolute hard cap (20)","value":{"error":"Too many constructs. Maximum allowed per request is 20."}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"429":{"description":"Plan construct limit exceeded — your subscription allows fewer constructs per bulk request than you submitted.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Too many constructs. Your plan allows 1 construct(s) per bulk request."}}}}}}}}},"/candles":{"get":{"summary":"OHLCV Candles","description":"Returns raw OHLCV (Open, High, Low, Close, Volume) candle data for the specified market and timeframe.","operationId":"getCandles","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Array of OHLCV candles, ordered oldest to newest.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Candle"}}}}},"202":{"description":"Fetch queued — retry after a short delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/exchanges":{"get":{"summary":"List Exchanges","description":"Returns a list of all supported cryptocurrency and stock exchanges.","operationId":"getExchanges","tags":["Reference Data"],"responses":{"200":{"description":"List of exchanges.","content":{"application/json":{"schema":{"type":"object","properties":{"exchanges":{"type":"array","items":{"type":"string"},"example":["binance","bybit","gateio"]},"count":{"type":"integer","example":3}}}}}}}}},"/exchanges/{exchange}/symbols":{"get":{"summary":"List Symbols by Exchange","description":"Returns all supported trading pairs or symbols for a specific exchange.","operationId":"getSymbols","tags":["Reference Data"],"parameters":[{"name":"exchange","in":"path","required":true,"description":"Exchange identifier (e.g. `binance`, `bybit`)","schema":{"type":"string","example":"binance"}}],"responses":{"200":{"description":"List of symbols.","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","example":2},"symbols":{"type":"array","items":{"type":"string"},"example":["BTCUSDT","ETHUSDT"]}}}}}},"404":{"description":"Exchange not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/indicator/2crows":{"get":{"summary":"Two Crows","description":"**2CROWS** — Two Crows is a bearish reversal pattern consisting of a long bullish candle followed by two bearish candles that open with a gap up.","operationId":"get_2crows","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Two Crows result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/3blackcrows":{"get":{"summary":"Three Black Crows","description":"**3BLACKCROWS** — Three Black Crows is a strong bearish reversal pattern of three consecutive long bearish candles, each closing near its low.","operationId":"get_3blackcrows","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Three Black Crows result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/3inside":{"get":{"summary":"Three Inside Up/Down","description":"**3INSIDE** — Three Inside Up/Down is a reversal pattern where a small candle is followed by a larger candle in the opposite direction, confirmed by a third candle.","operationId":"get_3inside","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Three Inside Up/Down result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/3linestrike":{"get":{"summary":"Three-Line Strike ","description":"**3LINESTRIKE** — Three-Line Strike is a four-candle pattern where three consecutive candles in one direction are followed by a single candle that engulfs all three.","operationId":"get_3linestrike","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Three-Line Strike  result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/3outside":{"get":{"summary":"Three Outside Up/Down","description":"**3OUTSIDE** — Three Outside Up/Down is a reversal pattern where an engulfing candle is confirmed by a third candle continuing in the new direction.","operationId":"get_3outside","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Three Outside Up/Down result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/3starsinsouth":{"get":{"summary":"Three Stars In The South","description":"**3STARSINSOUTH** — Three Stars in the South is a bullish reversal pattern of three bearish candles with progressively smaller bodies and lower shadows.","operationId":"get_3starsinsouth","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Three Stars In The South result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/3whitesoldiers":{"get":{"summary":"Three White Soldiers","description":"**3WHITESOLDIERS** — Three White Soldiers is a strong bullish reversal pattern of three consecutive long bullish candles, each closing near its high.","operationId":"get_3whitesoldiers","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Three White Soldiers result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/abandonedbaby":{"get":{"summary":"Abandoned Baby","description":"**ABANDONEDBABY** — Abandoned Baby is a rare three-candle reversal pattern with a doji that gaps away from both the preceding and following candles.","operationId":"get_abandonedbaby","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"penetration","in":"query","required":false,"description":"Penetration","schema":{"type":"number","format":"double","default":0.3,"example":0.3}}],"responses":{"200":{"description":"Abandoned Baby result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/abs":{"get":{"summary":"Absolute Value","description":"**ABS** — Absolute Value returns the magnitude of each value in the input series, converting negative values to positive.","operationId":"get_abs","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Absolute Value result","content":{"application/json":{"schema":{"type":"object","properties":{"abs":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/accbands":{"get":{"summary":"Acceleration Bands","description":"**ACCBANDS** — Acceleration Bands are plotted above and below a simple moving average using a formula based on the high-low range, expanding during trending markets.","operationId":"get_accbands","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":20,"example":20}}],"responses":{"200":{"description":"Acceleration Bands result","content":{"application/json":{"schema":{"type":"object","properties":{"valueRealUpperBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueRealMiddleBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueRealLowerBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/accosc":{"get":{"summary":"Accelerator Oscillator","description":"**ACCOSC** — Accelerator Oscillator measures the acceleration or deceleration of the current market driving force. It is the difference between the Awesome Oscillator and its 5-period simple moving average.","operationId":"get_accosc","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"lengthSlow","in":"query","required":false,"description":"lengthSlow","schema":{"type":"integer","default":34,"example":34}},{"name":"lengthFast","in":"query","required":false,"description":"lengthFast","schema":{"type":"integer","default":5,"example":5}}],"responses":{"200":{"description":"Accelerator Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/acos":{"get":{"summary":"Arc Cosine","description":"**ACOS** — Arc Cosine applies the inverse cosine function to each value in the input series, returning values in radians.","operationId":"get_acos","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Arc Cosine result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ad":{"get":{"summary":"Chaikin A/D Line","description":"**AD** — Chaikin A/D Line is a cumulative volume indicator that adds or subtracts each period's volume based on where the close falls within the high-low range.","operationId":"get_ad","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Chaikin A/D Line result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/add":{"get":{"summary":"Addition","description":"**ADD** — Vector Addition adds two price series element-by-element, useful for combining indicator outputs.","operationId":"get_add","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Addition result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/adosc":{"get":{"summary":"Chaikin A/D Oscillator","description":"**ADOSC** — Chaikin A/D Oscillator is the MACD of the Chaikin A/D Line, measuring the momentum of accumulation and distribution.","operationId":"get_adosc","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"fastPeriod","in":"query","required":false,"description":"Fast Period","schema":{"type":"integer","default":3,"example":3}},{"name":"slowPeriod","in":"query","required":false,"description":"Slow Period","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Chaikin A/D Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/advanceblock":{"get":{"summary":"Advance Block","description":"**ADVANCEBLOCK** — Advance Block is a bearish reversal pattern of three bullish candles where each successive candle has a smaller body, signaling weakening buying pressure.","operationId":"get_advanceblock","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Advance Block result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/advancedpatternsbearish":{"get":{"summary":"Advanced Patterns Bearish","description":"**ADVANCEDPATTERNSBEARISH** — Composite indicator that evaluates and returns any active bearish advanced pattern (e.g. Double Top, Descending Triangle, Head & Shoulders).","operationId":"get_advancedpatternsbearish","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"depth","in":"query","required":false,"description":"Lookback and lookforward period for pivot detection. Controls the width of structural swings.","schema":{"type":"integer","default":10,"example":10}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation.","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Advanced Patterns Bearish result","content":{"application/json":{"schema":{"type":"object","properties":{"is_confirmed":{"description":"Explicit boolean flag indicating if the pattern is fully confirmed.","type":"array","items":{"type":"boolean"}},"name":{"description":"The human-readable name of the active pattern.","type":"array","items":{"type":"string"}},"key":{"description":"The unique key identifier of the active pattern.","type":"array","items":{"type":"string"}},"start_timestamp":{"description":"Unix timestamp of the pattern's start.","type":"array","items":{"type":"integer"}},"end_timestamp":{"description":"Unix timestamp of the pattern's structural end (before breakout).","type":"array","items":{"type":"integer"}},"breakout_timestamp":{"description":"Unix timestamp of the breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"Closing price of the breakout candle.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/advancedpatternsbullish":{"get":{"summary":"Advanced Patterns Bullish","description":"**ADVANCEDPATTERNSBULLISH** — Composite indicator that evaluates and returns any active bullish advanced pattern (e.g. Double Bottom, Ascending Triangle, Inverse Head & Shoulders).","operationId":"get_advancedpatternsbullish","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"depth","in":"query","required":false,"description":"Lookback and lookforward period for pivot detection. Controls the width of structural swings.","schema":{"type":"integer","default":10,"example":10}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation.","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Advanced Patterns Bullish result","content":{"application/json":{"schema":{"type":"object","properties":{"is_confirmed":{"description":"Explicit boolean flag indicating if the pattern is fully confirmed.","type":"array","items":{"type":"boolean"}},"name":{"description":"The human-readable name of the active pattern.","type":"array","items":{"type":"string"}},"key":{"description":"The unique key identifier of the active pattern.","type":"array","items":{"type":"string"}},"start_timestamp":{"description":"Unix timestamp of the pattern's start.","type":"array","items":{"type":"integer"}},"end_timestamp":{"description":"Unix timestamp of the pattern's structural end (before breakout).","type":"array","items":{"type":"integer"}},"breakout_timestamp":{"description":"Unix timestamp of the breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"Closing price of the breakout candle.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/adx":{"get":{"summary":"Average Directional Index (ADX)","description":"**ADX** — Average Directional Movement Index quantifies the strength of a trend regardless of direction. Values above 25 indicate a strong trend; below 20 suggest a ranging market.","operationId":"get_adx","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Average Directional Index (ADX) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/adxr":{"get":{"summary":"Average Directional Movement Index Rating","description":"**ADXR** — Average Directional Movement Index Rating is a smoothed version of ADX, calculated as the average of the current ADX and the ADX from a prior period.","operationId":"get_adxr","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Average Directional Movement Index Rating result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ao":{"get":{"summary":"Awesome Oscillator","description":"**AO** — Awesome Oscillator is a momentum indicator that compares a 5-period and 34-period simple moving average of the bar's midpoint, used to gauge market momentum and potential reversals.","operationId":"get_ao","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Awesome Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"ao":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/apo":{"get":{"summary":"Absolute Price Oscillator","description":"**APO** — Absolute Price Oscillator shows the difference between two exponential moving averages of price, helping identify trend direction and momentum shifts.","operationId":"get_apo","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"fastPeriod","in":"query","required":false,"description":"Fast Period","schema":{"type":"integer","default":12,"example":12}},{"name":"slowPeriod","in":"query","required":false,"description":"Slow Period","schema":{"type":"integer","default":26,"example":26}},{"name":"maType","in":"query","required":false,"description":"MA Type","schema":{"type":"integer","default":0,"example":0}}],"responses":{"200":{"description":"Absolute Price Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/aroon":{"get":{"summary":"Aroon","description":"Aroon indicator measures how recently the highest high and lowest low occurred within a given period. It consists of Aroon Up and Aroon Down lines to identify trend changes.","operationId":"get_aroon","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Aroon result","content":{"application/json":{"schema":{"type":"object","properties":{"valueAroonDown":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueAroonUp":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/aroonosc":{"get":{"summary":"Aroon Oscillator","description":"**AROONOSC** — Aroon Oscillator is the difference between Aroon Up and Aroon Down, providing a single line that oscillates between -100 and 100 to signal trend direction.","operationId":"get_aroonosc","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Aroon Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/asin":{"get":{"summary":"Arc Sine","description":"**ASIN** — Arc Sine applies the inverse sine function to each value in the input series, returning values in radians.","operationId":"get_asin","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Arc Sine result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/atan":{"get":{"summary":"Arc Tangent","description":"**ATAN** — Arc Tangent applies the inverse tangent function to each value in the input series, returning values in radians.","operationId":"get_atan","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Arc Tangent result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/atr":{"get":{"summary":"Average True Range (ATR)","description":"**ATR** — Average True Range measures market volatility by calculating the average of the true range over a period. Higher ATR values indicate greater volatility.","operationId":"get_atr","tags":["Volatility"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Average True Range (ATR) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/avgdev":{"get":{"summary":"Average Deviation","description":"**AVGDEV** — Average Deviation calculates the mean absolute deviation of price from its average over a period.","operationId":"get_avgdev","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Average Deviation result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/avgprice":{"get":{"summary":"Average Price","description":"**AVGPRICE** — Average Price returns the arithmetic mean of the open, high, low, and close for each bar.","operationId":"get_avgprice","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Average Price result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/bbands":{"get":{"summary":"Bollinger Bands","description":"**BBANDS** — Bollinger Bands consist of a middle SMA and two standard deviation bands above and below. They adapt to volatility, widening during volatile markets and narrowing during calm periods.","operationId":"get_bbands","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":20,"example":20}},{"name":"stddev","in":"query","required":false,"description":"stddev","schema":{"type":"number","format":"double","default":2,"example":2}}],"responses":{"200":{"description":"Bollinger Bands result","content":{"application/json":{"schema":{"type":"object","properties":{"valueUpperBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueMiddleBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueLowerBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/bbw":{"get":{"summary":"Bollinger Bands Width","description":"**BBW** — Bollinger Bands Width measures the width of the Bollinger Bands relative to the middle band, indicating market volatility. Low values precede breakouts; high values suggest high volatility.","operationId":"get_bbw","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":20,"example":20}},{"name":"multiplier","in":"query","required":false,"description":"multiplier","schema":{"type":"integer","default":2,"example":2}}],"responses":{"200":{"description":"Bollinger Bands Width result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"upperBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"lowerBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"middleBand":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/belthold":{"get":{"summary":"Belt-hold","description":"**BELTHOLD** — Belt Hold is a single-candle pattern that opens at its extreme (high or low) and closes significantly in the opposite direction.","operationId":"get_belthold","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Belt-hold result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/beta":{"get":{"summary":"Beta","description":"Beta measures the sensitivity of a security's returns relative to a benchmark. A beta above 1 indicates greater volatility than the benchmark.","operationId":"get_beta","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":5,"example":5}}],"responses":{"200":{"description":"Beta result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/bop":{"get":{"summary":"Balance Of Power","description":"**BOP** — Balance of Power measures the strength of buyers versus sellers by relating the close price to the trading range, oscillating between -1 and 1.","operationId":"get_bop","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Balance Of Power result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/breakaway":{"get":{"summary":"Breakaway","description":"Breakaway is a five-candle reversal pattern that begins with a long candle followed by a gap and three smaller candles in the same direction, then a reversal.","operationId":"get_breakaway","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Breakaway result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/cci":{"get":{"summary":"Commodity Channel Index (CCI)","description":"**CCI** — Commodity Channel Index measures the deviation of price from its statistical mean. High values indicate the asset is trading above its average; low values indicate below-average trading.","operationId":"get_cci","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}},{"name":"tp","in":"query","required":false,"description":"tp","schema":{"type":"string","default":"hlc3","example":"hlc3"}}],"responses":{"200":{"description":"Commodity Channel Index (CCI) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ceil":{"get":{"summary":"Ceiling","description":"**CEIL** — Ceiling rounds each value in the input series up to the nearest integer.","operationId":"get_ceil","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Ceiling result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/chop":{"get":{"summary":"Choppiness Index","description":"**CHOP** — Choppiness Index determines whether a market is trending or consolidating. Values near 100 indicate a choppy, sideways market; values near 0 indicate a strong trend.","operationId":"get_chop","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Choppiness Index result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/closingmarubozu":{"get":{"summary":"Closing Marubozu","description":"**CLOSINGMARUBOZU** — Closing Marubozu is a candle with no shadow on the closing end — a bullish Marubozu has no upper shadow; a bearish one has no lower shadow.","operationId":"get_closingmarubozu","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Closing Marubozu result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/cmf":{"get":{"summary":"Chaikin Money Flow","description":"**CMF** — Chaikin Money Flow measures the amount of money flow volume over a period. Positive values indicate buying pressure; negative values indicate selling pressure.","operationId":"get_cmf","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Chaikin Money Flow result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/cmo":{"get":{"summary":"Chande Momentum Oscillator","description":"**CMO** — Chande Momentum Oscillator measures momentum by comparing the sum of recent gains to the sum of recent losses, oscillating between -100 and 100.","operationId":"get_cmo","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"optInTimePeriod","in":"query","required":false,"description":"optInTimePeriod","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Chande Momentum Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/concealbabyswall":{"get":{"summary":"Concealing Baby Swallow","description":"**CONCEALBABYSWALL** — Concealing Baby Swallow is a four-candle bullish reversal pattern consisting of two Marubozu candles followed by a candle that gaps down and engulfs the next.","operationId":"get_concealbabyswall","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Concealing Baby Swallow result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/coppockcurve":{"get":{"summary":"Coppock Curve","description":"**COPPOCKCURVE** — Coppock Curve is a long-term momentum indicator originally designed to identify buying opportunities in major stock indices after bear market lows.","operationId":"get_coppockcurve","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"wmaLength","in":"query","required":false,"description":"wmaLength","schema":{"type":"integer","default":10,"example":10}},{"name":"longRoCLength","in":"query","required":false,"description":"longRoCLength","schema":{"type":"integer","default":14,"example":14}},{"name":"shortRoCLength","in":"query","required":false,"description":"shortRoCLength","schema":{"type":"integer","default":11,"example":11}}],"responses":{"200":{"description":"Coppock Curve result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/correl":{"get":{"summary":"Pearson's Correlation Coefficient","description":"**CORREL** — Pearson's Correlation Coefficient measures the linear relationship between two price series, ranging from -1 (perfect inverse) to +1 (perfect positive correlation).","operationId":"get_correl","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Pearson's Correlation Coefficient result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/cos":{"get":{"summary":"Cosine","description":"**COS** — Cosine applies the cosine trigonometric function to each value in the input series.","operationId":"get_cos","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Cosine result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/cosh":{"get":{"summary":"Hyperbolic Cosine","description":"**COSH** — Hyperbolic Cosine applies the hyperbolic cosine function to each value in the input series.","operationId":"get_cosh","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hyperbolic Cosine result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/counterattack":{"get":{"summary":"Counterattack","description":"Counterattack is a two-candle reversal pattern where a long candle in one direction is followed by a candle of equal length in the opposite direction.","operationId":"get_counterattack","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Counterattack result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/crossany":{"get":{"summary":"Cross Any","description":"**CROSSANY** — Cross Any returns true when any two input series cross each other, regardless of direction.","operationId":"get_crossany","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Cross Any result","content":{"application/json":{"schema":{"type":"object","properties":{"crossany":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/crossover":{"get":{"summary":"Crossover","description":"Crossover returns true when the first input series crosses above the second, useful for detecting bullish signal crossovers.","operationId":"get_crossover","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Crossover result","content":{"application/json":{"schema":{"type":"object","properties":{"crossover":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/cupandhandle":{"get":{"summary":"Cup and Handle","description":"**CUPANDHANDLE** — Cup and Handle is a bullish continuation pattern shaped like a teacup — a rounded bottom (cup) followed by a short consolidation (handle) before a breakout.","operationId":"get_cupandhandle","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"depth","in":"query","required":false,"description":"Lookback and lookforward period for pivot detection. Controls the width of structural swings.","schema":{"type":"integer","default":10,"example":10}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation if deviationType is 'atr'.","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Cup and Handle result","content":{"application/json":{"schema":{"type":"object","properties":{"h1_timestamp":{"description":"Unix timestamp of the left rim of the cup (H1).","type":"array","items":{"type":"integer"}},"h1_price":{"description":"Price level at the left rim of the cup (H1).","type":"array","items":{"type":"number","format":"double"}},"lmin_timestamp":{"description":"Unix timestamp of the lowest point at the bottom of the cup (Lmin).","type":"array","items":{"type":"integer"}},"lmin_price":{"description":"Price level at the lowest point of the cup (Lmin).","type":"array","items":{"type":"number","format":"double"}},"h2_timestamp":{"description":"Unix timestamp of the right rim of the cup (H2).","type":"array","items":{"type":"integer"}},"h2_price":{"description":"Price level at the right rim of the cup (H2).","type":"array","items":{"type":"number","format":"double"}},"handle_low_timestamp":{"description":"Unix timestamp of the lowest point within the handle.","type":"array","items":{"type":"integer"}},"handle_low_price":{"description":"Price level at the lowest point within the handle.","type":"array","items":{"type":"number","format":"double"}},"cup_pivot_timestamps":{"description":"Array of timestamps plotting the interior zigzag path of the cup's U-shape.","type":"array","items":{"type":"number","format":"double"}},"cup_pivot_prices":{"description":"Array of prices plotting the interior zigzag path of the cup's U-shape.","type":"array","items":{"type":"number","format":"double"}},"neckline_level":{"description":"The price level of the horizontal resistance neckline (highest wick between H1 and H2).","type":"array","items":{"type":"number","format":"double"}},"neckline_right_timestamp":{"description":"Timestamp denoting where the neckline extends to on the right.","type":"array","items":{"type":"integer"}},"breakout_neckline_price":{"description":"The specific price of the neckline at the exact moment of the breakout.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke above the neckline.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Cup and Handle pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical upside price target calculated by adding the cup's depth to the neckline.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bullish' for a standard Cup and Handle.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/cupandhandleinverse":{"get":{"summary":"Cup and Handle Inverse","description":"**CUPANDHANDLEINVERSE** — Inverse Cup and Handle is a bearish continuation pattern — an inverted rounded top (cup) followed by a brief consolidation (handle) before a breakdown.","operationId":"get_cupandhandleinverse","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"depth","in":"query","required":false,"description":"Lookback and lookforward period for pivot detection. Controls the width of structural swings.","schema":{"type":"integer","default":10,"example":10}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation if deviationType is 'atr'.","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Cup and Handle Inverse result","content":{"application/json":{"schema":{"type":"object","properties":{"l1_timestamp":{"description":"Unix timestamp of the left rim of the inverted cup (L1).","type":"array","items":{"type":"integer"}},"l1_price":{"description":"Price level at the left rim of the inverted cup (L1).","type":"array","items":{"type":"number","format":"double"}},"hmax_timestamp":{"description":"Unix timestamp of the highest point at the top of the inverted cup (Hmax).","type":"array","items":{"type":"integer"}},"hmax_price":{"description":"Price level at the highest point of the inverted cup (Hmax).","type":"array","items":{"type":"number","format":"double"}},"l2_timestamp":{"description":"Unix timestamp of the right rim of the inverted cup (L2).","type":"array","items":{"type":"integer"}},"l2_price":{"description":"Price level at the right rim of the inverted cup (L2).","type":"array","items":{"type":"number","format":"double"}},"handle_high_timestamp":{"description":"Unix timestamp of the highest point within the inverted handle.","type":"array","items":{"type":"integer"}},"handle_high_price":{"description":"Price level at the highest point within the inverted handle.","type":"array","items":{"type":"number","format":"double"}},"cup_pivot_timestamps":{"description":"Array of timestamps plotting the interior zigzag path of the inverted cup's dome-shape.","type":"array","items":{"type":"number","format":"double"}},"cup_pivot_prices":{"description":"Array of prices plotting the interior zigzag path of the inverted cup's dome-shape.","type":"array","items":{"type":"number","format":"double"}},"neckline_level":{"description":"The price level of the horizontal support neckline (lowest wick between L1 and L2).","type":"array","items":{"type":"number","format":"double"}},"neckline_right_timestamp":{"description":"Timestamp denoting where the neckline extends to on the right.","type":"array","items":{"type":"integer"}},"breakout_neckline_price":{"description":"The specific price of the neckline at the exact moment of the breakout.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke below the neckline.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Inverse Cup and Handle pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakdown.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakdown.","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical downside price target calculated by subtracting the cup's height from the neckline.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bearish' for an Inverse Cup and Handle.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/cvi":{"get":{"summary":"Chaikin Volatility Index","description":"**CVI** — Chaikin Volatility Index measures the rate of change of the trading range (high minus low), indicating expanding or contracting volatility.","operationId":"get_cvi","tags":["Volatility"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Chaikin Volatility Index result","content":{"application/json":{"schema":{"type":"object","properties":{"cvi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/darkcloudcover":{"get":{"summary":"Dark Cloud Cover","description":"**DARKCLOUDCOVER** — Dark Cloud Cover is a bearish reversal pattern where a bullish candle is followed by a bearish candle that opens above the prior high and closes below the midpoint.","operationId":"get_darkcloudcover","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"penetration","in":"query","required":false,"description":"Penetration","schema":{"type":"number","format":"double","default":0.5,"example":0.5}}],"responses":{"200":{"description":"Dark Cloud Cover result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/decay":{"get":{"summary":"Linear Decay","description":"**DECAY** — Linear Decay applies a linear decay function to the input series, reducing values over time at a constant rate.","operationId":"get_decay","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Linear Decay result","content":{"application/json":{"schema":{"type":"object","properties":{"decay":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/dema":{"get":{"summary":"Double Exponential Moving Average (DEMA)","description":"**DEMA** — Double Exponential Moving Average reduces the lag of a traditional EMA by applying the exponential smoothing twice, making it more responsive to recent price changes.","operationId":"get_dema","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Double Exponential Moving Average (DEMA) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/di":{"get":{"summary":"Directional Indicator","description":"**DI** — Directional Indicator (DI) consists of +DI and -DI lines that measure upward and downward price movement. Used together with ADX to assess trend direction and strength.","operationId":"get_di","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Directional Indicator result","content":{"application/json":{"schema":{"type":"object","properties":{"plus_di":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"minus_di":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/div":{"get":{"summary":"Division","description":"**DIV** — Vector Division divides one price series by another element-by-element, useful for calculating ratios.","operationId":"get_div","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Division result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/dm":{"get":{"summary":"Directional Movement","description":"**DM** — Directional Movement measures the largest part of today's price range that is outside the previous day's range, forming the basis of the ADX system.","operationId":"get_dm","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Directional Movement result","content":{"application/json":{"schema":{"type":"object","properties":{"plus_dm":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"minus_dm":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/dmi":{"get":{"summary":"Directional Movement Index","description":"**DMI** — Directional Movement Index combines +DI and -DI to indicate trend direction. A bullish signal occurs when +DI crosses above -DI.","operationId":"get_dmi","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Directional Movement Index result","content":{"application/json":{"schema":{"type":"object","properties":{"adx":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"plusdi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"minusdi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/doji":{"get":{"summary":"Doji","description":"Doji is a candle where the open and close are nearly equal, signaling indecision in the market and a potential reversal when appearing after a trend.","operationId":"get_doji","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Doji result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/dojistar":{"get":{"summary":"Doji Star","description":"**DOJISTAR** — Doji Star is a two-candle pattern where a Doji gaps away from the prior candle, signaling indecision and a potential reversal.","operationId":"get_dojistar","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Doji Star result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/donchianchannels":{"get":{"summary":"Donchian Channels","description":"**DONCHIANCHANNELS** — Donchian Channels plot the highest high and lowest low over a period, forming a channel. Breakouts above or below the channel signal potential trend starts.","operationId":"get_donchianchannels","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":20,"example":20}}],"responses":{"200":{"description":"Donchian Channels result","content":{"application/json":{"schema":{"type":"object","properties":{"lower":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"middle":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"upper":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/doublebottom":{"get":{"summary":"Double Bottom","description":"**DOUBLEBOTTOM** — Double Bottom is a bullish reversal pattern with two troughs at approximately the same price level, forming a 'W' shape and signaling the end of a downtrend.","operationId":"get_doublebottom","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"depth","in":"query","required":false,"description":"Lookback and lookforward period for pivot detection. Controls the width of structural swings.","schema":{"type":"integer","default":10,"example":10}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation if deviationType is 'atr'.","schema":{"type":"integer","default":14,"example":14}},{"name":"bottomToleranceATR","in":"query","required":false,"description":"Maximum allowed price difference between the two bottoms, normalized by ATR.","schema":{"type":"number","format":"double","default":0.75,"example":0.75}},{"name":"minHeightATR","in":"query","required":false,"description":"Minimum required height of the pattern (neckline peak to first bottom), normalized by ATR.","schema":{"type":"number","format":"double","default":1.5,"example":1.5}},{"name":"symmetryMin","in":"query","required":false,"description":"Minimum ratio of time spent forming the left side vs the right side of the pattern.","schema":{"type":"number","format":"double","default":0.3,"example":0.3}},{"name":"symmetryMax","in":"query","required":false,"description":"Maximum ratio of time spent forming the left side vs the right side of the pattern.","schema":{"type":"number","format":"double","default":4,"example":4}},{"name":"breakoutLookahead","in":"query","required":false,"description":"Number of candles to look ahead after the second bottom to confirm a breakout.","schema":{"type":"integer","default":20,"example":20}},{"name":"necklineBuffer","in":"query","required":false,"description":"ATR-based buffer above the neckline to filter out false breakouts during formation.","schema":{"type":"number","format":"double","default":0.1,"example":0.1}}],"responses":{"200":{"description":"Double Bottom result","content":{"application/json":{"schema":{"type":"object","properties":{"l1_timestamp":{"description":"Unix timestamp of the first bottom (L1).","type":"array","items":{"type":"integer"}},"l1_price":{"description":"Price level at the first bottom (L1).","type":"array","items":{"type":"number","format":"double"}},"h1_timestamp":{"description":"Unix timestamp of the neckline peak (H1) between the two bottoms.","type":"array","items":{"type":"integer"}},"h1_price":{"description":"Price level at the neckline peak (H1).","type":"array","items":{"type":"number","format":"double"}},"l2_timestamp":{"description":"Unix timestamp of the second bottom (L2).","type":"array","items":{"type":"integer"}},"l2_price":{"description":"Price level at the second bottom (L2).","type":"array","items":{"type":"number","format":"double"}},"neckline_level":{"description":"The price level of the horizontal resistance neckline (body high of H1).","type":"array","items":{"type":"number","format":"double"}},"neckline_right_timestamp":{"description":"Timestamp denoting where the neckline extends to on the right.","type":"array","items":{"type":"integer"}},"breakout_neckline_price":{"description":"The specific price of the neckline at the exact moment of the breakout.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke above the neckline.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Double Bottom pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical upside price target calculated by adding the pattern's height to the neckline.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bullish' for a Double Bottom.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/doubletop":{"get":{"summary":"Double Top","description":"**DOUBLETOP** — Double Top is a bearish reversal pattern with two peaks at approximately the same price level, forming an 'M' shape and signaling the end of an uptrend.","operationId":"get_doubletop","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"depth","in":"query","required":false,"description":"Lookback and lookforward period for pivot detection. Controls the width of structural swings.","schema":{"type":"integer","default":10,"example":10}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation if deviationType is 'atr'.","schema":{"type":"integer","default":14,"example":14}},{"name":"topToleranceATR","in":"query","required":false,"description":"Maximum allowed price difference between the two tops, normalized by ATR.","schema":{"type":"number","format":"double","default":0.75,"example":0.75}},{"name":"minHeightATR","in":"query","required":false,"description":"Minimum required height of the pattern (first top down to neckline valley), normalized by ATR.","schema":{"type":"number","format":"double","default":1.5,"example":1.5}},{"name":"symmetryMin","in":"query","required":false,"description":"Minimum ratio of time spent forming the left side vs the right side of the pattern.","schema":{"type":"number","format":"double","default":0.3,"example":0.3}},{"name":"symmetryMax","in":"query","required":false,"description":"Maximum ratio of time spent forming the left side vs the right side of the pattern.","schema":{"type":"number","format":"double","default":4,"example":4}},{"name":"breakoutLookahead","in":"query","required":false,"description":"Number of candles to look ahead after the second top to confirm a breakdown.","schema":{"type":"integer","default":20,"example":20}},{"name":"necklineBuffer","in":"query","required":false,"description":"ATR-based buffer below the neckline to filter out false breakdowns during formation.","schema":{"type":"number","format":"double","default":0.1,"example":0.1}}],"responses":{"200":{"description":"Double Top result","content":{"application/json":{"schema":{"type":"object","properties":{"h1_timestamp":{"description":"Unix timestamp of the first top (H1).","type":"array","items":{"type":"integer"}},"h1_price":{"description":"Price level at the first top (H1).","type":"array","items":{"type":"number","format":"double"}},"l1_timestamp":{"description":"Unix timestamp of the neckline valley (L1) between the two tops.","type":"array","items":{"type":"integer"}},"l1_price":{"description":"Price level at the neckline valley (L1).","type":"array","items":{"type":"number","format":"double"}},"h2_timestamp":{"description":"Unix timestamp of the second top (H2).","type":"array","items":{"type":"integer"}},"h2_price":{"description":"Price level at the second top (H2).","type":"array","items":{"type":"number","format":"double"}},"neckline_level":{"description":"The price level of the horizontal support neckline (body low of L1).","type":"array","items":{"type":"number","format":"double"}},"neckline_right_timestamp":{"description":"Timestamp denoting where the neckline extends to on the right.","type":"array","items":{"type":"integer"}},"breakout_neckline_price":{"description":"The specific price of the neckline at the exact moment of the breakout.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke below the neckline.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Double Top pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakdown.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakdown.","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical downside price target calculated by subtracting the pattern's height from the neckline.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bearish' for a Double Top.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/dpo":{"get":{"summary":"Detrended Price Oscillator","description":"**DPO** — Detrended Price Oscillator removes the trend from price to identify cycles. It compares a past price to a simple moving average, highlighting overbought and oversold conditions.","operationId":"get_dpo","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Detrended Price Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"dpo":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/dragonflydoji":{"get":{"summary":"Dragonfly Doji","description":"**DRAGONFLYDOJI** — Dragonfly Doji has a long lower shadow and no upper shadow, with the open and close at the high. It signals a potential bullish reversal.","operationId":"get_dragonflydoji","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Dragonfly Doji result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/dss":{"get":{"summary":"Double Smoothed Stochastic","description":"**DSS** — Double Smoothed Stochastic applies double smoothing to the Stochastic Oscillator, reducing noise and producing cleaner trend signals.","operationId":"get_dss","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"pds","in":"query","required":false,"description":"pds","schema":{"type":"integer","default":10,"example":10}},{"name":"emaLength","in":"query","required":false,"description":"emaLength","schema":{"type":"integer","default":9,"example":9}},{"name":"triggerLength","in":"query","required":false,"description":"triggerLength","schema":{"type":"integer","default":5,"example":5}}],"responses":{"200":{"description":"Double Smoothed Stochastic result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"trigger":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/dx":{"get":{"summary":"Directional Movement Index","description":"**DX** — Directional Movement Index is the ratio of the absolute difference between +DI and -DI to their sum, used as a component in calculating ADX.","operationId":"get_dx","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Directional Movement Index result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/edecay":{"get":{"summary":"Exponential Decay","description":"**EDECAY** — Exponential Decay applies an exponential decay function to the input series, reducing values over time at a decreasing rate.","operationId":"get_edecay","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Exponential Decay result","content":{"application/json":{"schema":{"type":"object","properties":{"edecay":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ema":{"get":{"summary":"Exponential Moving Average (EMA)","description":"**EMA** — Exponential Moving Average gives more weight to recent prices than a simple moving average, making it more responsive to new information and faster to react to price changes.","operationId":"get_ema","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":30,"example":30}},{"name":"source","in":"query","required":false,"description":"source","schema":{"type":"string","default":"close","example":"close"}}],"responses":{"200":{"description":"Exponential Moving Average (EMA) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/emv":{"get":{"summary":"Ease of Movement","description":"**EMV** — Ease of Movement (EMV) is a volume-based oscillator that relates price change to volume, indicating how easily a security moves in price.","operationId":"get_emv","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Ease of Movement result","content":{"application/json":{"schema":{"type":"object","properties":{"emv":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/engulfing":{"get":{"summary":"Engulfing Pattern","description":"**ENGULFING** — Engulfing Pattern is a two-candle reversal where the second candle's body completely engulfs the first. A bullish engulfing signals a bottom; bearish signals a top.","operationId":"get_engulfing","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Engulfing Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/eom":{"get":{"summary":"Ease of Movement","description":"**EOM** — Ease of Movement relates price change to volume, showing how easily price moves. High positive values suggest prices are rising with little resistance.","operationId":"get_eom","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}},{"name":"divisor","in":"query","required":false,"description":"divisor","schema":{"type":"integer","default":10000,"example":10000}}],"responses":{"200":{"description":"Ease of Movement result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/eveningdojistar":{"get":{"summary":"Evening Doji Star","description":"**EVENINGDOJISTAR** — Evening Doji Star is a three-candle bearish reversal pattern where a bullish candle is followed by a Doji gap and then a bearish candle.","operationId":"get_eveningdojistar","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"penetration","in":"query","required":false,"description":"Penetration","schema":{"type":"number","format":"double","default":0.3,"example":0.3}}],"responses":{"200":{"description":"Evening Doji Star result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/eveningstar":{"get":{"summary":"Evening Star","description":"**EVENINGSTAR** — Evening Star is a three-candle bearish reversal pattern consisting of a large bullish candle, a small-bodied candle, and a large bearish candle.","operationId":"get_eveningstar","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"penetration","in":"query","required":false,"description":"Penetration","schema":{"type":"number","format":"double","default":0.3,"example":0.3}}],"responses":{"200":{"description":"Evening Star result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/exp":{"get":{"summary":"Exponential","description":"**EXP** — Exponential applies the natural exponential function (e^x) to each value in the input series.","operationId":"get_exp","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Exponential result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/fibonacciretracement":{"get":{"summary":"Fibonacci Retracement","description":"**FIBONACCIRETRACEMENT** — Fibonacci Retracement identifies potential support and resistance levels based on Fibonacci ratios (23.6%, 38.2%, 50%, 61.8%) applied to a prior price swing.","operationId":"get_fibonacciretracement","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":50,"example":50}},{"name":"retracement","in":"query","required":false,"description":"retracement","schema":{"type":"number","format":"double","default":0.618,"example":0.618}},{"name":"trend","in":"query","required":false,"description":"trend","schema":{"type":"string","default":"AUTO","example":"AUTO"}}],"responses":{"200":{"description":"Fibonacci Retracement result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"trend":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"startPrice":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"endPrice":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"startTimestamp":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"endTimestamp":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/fisher":{"get":{"summary":"Fisher Transform","description":"**FISHER** — Fisher Transform converts prices into a Gaussian normal distribution, making turning points easier to identify. Sharp peaks signal potential reversals.","operationId":"get_fisher","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Fisher Transform result","content":{"application/json":{"schema":{"type":"object","properties":{"fisher":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"fisher_signal":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/floor":{"get":{"summary":"Floor","description":"Floor rounds each value in the input series down to the nearest integer.","operationId":"get_floor","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Floor result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/fosc":{"get":{"summary":"Forecast Oscillator","description":"**FOSC** — Forecast Oscillator compares the actual closing price to a time-series forecast, showing the percentage difference between the two.","operationId":"get_fosc","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Forecast Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"fosc":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/gapsidesidewhite":{"get":{"summary":"Gap Side-by-Side White Lines","description":"**GAPSIDESIDEWHITE** — Up/Down Gap Side-by-Side White Lines is a continuation pattern where two white candles of similar size appear after a gap in the trend direction.","operationId":"get_gapsidesidewhite","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Gap Side-by-Side White Lines result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/gravestonedoji":{"get":{"summary":"Gravestone Doji","description":"**GRAVESTONEDOJI** — Gravestone Doji has a long upper shadow and no lower shadow, with the open and close at the low. It signals a potential bearish reversal.","operationId":"get_gravestonedoji","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Gravestone Doji result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/hammer":{"get":{"summary":"Hammer","description":"Hammer is a bullish reversal candle with a small body at the top and a long lower shadow at least twice the body length, appearing after a downtrend.","operationId":"get_hammer","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hammer result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/hangingman":{"get":{"summary":"Hanging Man","description":"**HANGINGMAN** — Hanging Man is a bearish reversal candle with a small body at the top and a long lower shadow, appearing after an uptrend.","operationId":"get_hangingman","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hanging Man result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/harami":{"get":{"summary":"Harami Pattern","description":"**HARAMI** — Harami is a two-candle pattern where a small candle is contained within the body of the prior large candle, signaling a potential reversal.","operationId":"get_harami","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Harami Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/haramicross":{"get":{"summary":"Harami Cross Pattern","description":"**HARAMICROSS** — Harami Cross is a Harami pattern where the second candle is a Doji, strengthening the reversal signal.","operationId":"get_haramicross","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Harami Cross Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/headandshoulders":{"get":{"summary":"Head and Shoulders","description":"**HEADANDSHOULDERS** — Head and Shoulders is a bearish reversal pattern with three peaks — a higher middle peak (head) flanked by two lower peaks (shoulders) — signaling a trend reversal.","operationId":"get_headandshoulders","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"depth","in":"query","required":false,"description":"Lookback and lookforward period for pivot detection. Controls the width of structural swings.","schema":{"type":"integer","default":10,"example":10}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation if deviationType is 'atr'.","schema":{"type":"integer","default":14,"example":14}},{"name":"headProminenceATR","in":"query","required":false,"description":"Minimum required prominence of the head relative to both shoulders, normalized by ATR.","schema":{"type":"number","format":"double","default":1.2,"example":1.2}},{"name":"shoulderToleranceATR","in":"query","required":false,"description":"Maximum allowed price difference between the left and right shoulders, normalized by ATR.","schema":{"type":"number","format":"double","default":1.5,"example":1.5}},{"name":"minDepthATR","in":"query","required":false,"description":"Minimum depth of the two troughs (L1 and L2), ensuring distinct shoulders.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"symmetryMin","in":"query","required":false,"description":"Minimum ratio of time spent forming the left half vs the right half of the pattern.","schema":{"type":"number","format":"double","default":0.5,"example":0.5}},{"name":"symmetryMax","in":"query","required":false,"description":"Maximum ratio of time spent forming the left half vs the right half of the pattern.","schema":{"type":"number","format":"double","default":3.5,"example":3.5}},{"name":"breakoutLookahead","in":"query","required":false,"description":"Number of candles to look ahead after the right shoulder to confirm a breakdown.","schema":{"type":"integer","default":20,"example":20}},{"name":"necklineBuffer","in":"query","required":false,"description":"ATR-based buffer below the neckline to filter out false breakdowns during formation.","schema":{"type":"number","format":"double","default":0.2,"example":0.2}}],"responses":{"200":{"description":"Head and Shoulders result","content":{"application/json":{"schema":{"type":"object","properties":{"h1_timestamp":{"description":"Unix timestamp of the left shoulder peak (H1).","type":"array","items":{"type":"integer"}},"h1_price":{"description":"Price level at the left shoulder peak (H1).","type":"array","items":{"type":"number","format":"double"}},"l1_timestamp":{"description":"Unix timestamp of the first trough (L1) separating the left shoulder from the head.","type":"array","items":{"type":"integer"}},"l1_price":{"description":"Price level at the first trough (L1).","type":"array","items":{"type":"number","format":"double"}},"h2_timestamp":{"description":"Unix timestamp of the head peak (H2).","type":"array","items":{"type":"integer"}},"h2_price":{"description":"Price level at the head peak (H2).","type":"array","items":{"type":"number","format":"double"}},"l2_timestamp":{"description":"Unix timestamp of the second trough (L2) separating the head from the right shoulder.","type":"array","items":{"type":"integer"}},"l2_price":{"description":"Price level at the second trough (L2).","type":"array","items":{"type":"number","format":"double"}},"h3_timestamp":{"description":"Unix timestamp of the right shoulder peak (H3).","type":"array","items":{"type":"integer"}},"h3_price":{"description":"Price level at the right shoulder peak (H3).","type":"array","items":{"type":"number","format":"double"}},"neckline_left_timestamp":{"description":"Unix timestamp of the neckline start anchor (L1).","type":"array","items":{"type":"integer"}},"neckline_left_price":{"description":"Price level of the neckline start anchor (L1).","type":"array","items":{"type":"number","format":"double"}},"neckline_right_timestamp":{"description":"Timestamp denoting where the neckline extends to on the right.","type":"array","items":{"type":"integer"}},"neckline_right_price":{"description":"The price level of the neckline at the right endpoint.","type":"array","items":{"type":"number","format":"double"}},"neckline_at_h2":{"description":"The calculated price of the neckline directly beneath the head peak (H2), used to measure pattern height.","type":"array","items":{"type":"number","format":"double"}},"breakout_neckline_price":{"description":"The specific price of the sloped neckline at the exact moment of the breakout.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke below the neckline.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Head and Shoulders pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakdown.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakdown.","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical downside price target calculated by subtracting the pattern's height from the breakout neckline price.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bearish' for a Head and Shoulders.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/heikinashicandles":{"get":{"summary":"Heikin Ashi Candles","description":"**HEIKINASHICANDLES** — Returns Heikin Ashi candles, which smooth price action by averaging OHLC values, making trends easier to identify.","operationId":"get_heikinashicandles","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Heikin Ashi Candles result","content":{"application/json":{"schema":{"type":"object","properties":{"values":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/highwave":{"get":{"summary":"High-Wave Candle","description":"**HIGHWAVE** — High Wave Candle has very long upper and lower shadows with a small body, indicating extreme indecision and a potential reversal.","operationId":"get_highwave","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"High-Wave Candle result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/hikkake":{"get":{"summary":"Hikkake Pattern","description":"**HIKKAKE** — Hikkake Pattern is a failed inside bar that traps traders in the wrong direction before reversing, creating a reliable reversal signal.","operationId":"get_hikkake","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hikkake Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/hikkakemod":{"get":{"summary":"Modified Hikkake Pattern","description":"**HIKKAKEMOD** — Modified Hikkake Pattern is a variation of the Hikkake with additional confirmation criteria for a stronger reversal signal.","operationId":"get_hikkakemod","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Modified Hikkake Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/hiloact":{"get":{"summary":"HILO Activator","description":"**HILOACT** — HILO Activator is a trend-following indicator that uses the highest high and lowest low to generate buy and sell signals, acting as a trailing stop.","operationId":"get_hiloact","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"length","in":"query","required":false,"description":"length","schema":{"type":"integer","default":3,"example":3}},{"name":"displace","in":"query","required":false,"description":"displace","schema":{"type":"integer","default":0,"example":0}}],"responses":{"200":{"description":"HILO Activator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"trend":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/hma":{"get":{"summary":"Hull Moving Average","description":"**HMA** — Hull Moving Average dramatically reduces lag while maintaining smoothness, using weighted moving averages to produce a faster and more accurate trend indicator.","operationId":"get_hma","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Hull Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"hma":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/homingpigeon":{"get":{"summary":"Homing Pigeon","description":"**HOMINGPIGEON** — Homing Pigeon is a bullish reversal pattern of two bearish candles where the second is contained within the first, suggesting slowing selling pressure.","operationId":"get_homingpigeon","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Homing Pigeon result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ht_dcperiod":{"get":{"summary":"Hilbert Transform - Dominant Cycle Period","description":"**HT_DCPERIOD** — Hilbert Transform Dominant Cycle Period uses the Hilbert Transform to measure the period of the dominant price cycle in bars.","operationId":"get_ht_dcperiod","tags":["Cycle"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hilbert Transform - Dominant Cycle Period result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ht_dcphase":{"get":{"summary":"Hilbert Transform - Dominant Cycle Phase","description":"**HT_DCPHASE** — Hilbert Transform Dominant Cycle Phase measures the phase of the dominant cycle, useful for timing entries and exits relative to the cycle.","operationId":"get_ht_dcphase","tags":["Cycle"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hilbert Transform - Dominant Cycle Phase result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ht_phasor":{"get":{"summary":"Hilbert Transform - Phasor Components","description":"**HT_PHASOR** — Hilbert Transform Phasor Components returns the in-phase and quadrature components of the dominant cycle, used in advanced cycle analysis.","operationId":"get_ht_phasor","tags":["Cycle"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hilbert Transform - Phasor Components result","content":{"application/json":{"schema":{"type":"object","properties":{"valueInPhase":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueQuadrature":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ht_sine":{"get":{"summary":"Hilbert Transform - SineWave","description":"**HT_SINE** — Hilbert Transform SineWave generates sine and lead sine lines from the dominant cycle, providing anticipatory buy and sell signals.","operationId":"get_ht_sine","tags":["Cycle"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hilbert Transform - SineWave result","content":{"application/json":{"schema":{"type":"object","properties":{"valueSine":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueLeadSine":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ht_trendline":{"get":{"summary":"Hilbert Transform - Instantaneous Trendline","description":"**HT_TRENDLINE** — Hilbert Transform Instantaneous Trendline uses the Hilbert Transform to extract the dominant cycle and produce a smooth trendline with minimal lag.","operationId":"get_ht_trendline","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hilbert Transform - Instantaneous Trendline result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ht_trendmode":{"get":{"summary":"Hilbert Transform - Trend vs Cycle Mode","description":"**HT_TRENDMODE** — Hilbert Transform Trend vs Cycle Mode identifies whether the market is currently in a trending or cycling mode, returning 1 for trend and 0 for cycle.","operationId":"get_ht_trendmode","tags":["Cycle"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hilbert Transform - Trend vs Cycle Mode result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ichimoku":{"get":{"summary":"Ichimoku Cloud","description":"**ICHIMOKU** — Ichimoku Cloud is a comprehensive trend system that shows support/resistance, trend direction, and momentum through five lines and a shaded cloud region.","operationId":"get_ichimoku","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"conversionPeriod","in":"query","required":false,"description":"conversionPeriod","schema":{"type":"integer","default":9,"example":9}},{"name":"basePeriod","in":"query","required":false,"description":"basePeriod","schema":{"type":"integer","default":26,"example":26}},{"name":"spanPeriod","in":"query","required":false,"description":"spanPeriod","schema":{"type":"integer","default":52,"example":52}},{"name":"displacement","in":"query","required":false,"description":"displacement","schema":{"type":"integer","default":26,"example":26}}],"responses":{"200":{"description":"Ichimoku Cloud result","content":{"application/json":{"schema":{"type":"object","properties":{"conversion":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"base":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"spanA":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"spanB":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"currentSpanA":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"currentSpanB":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"laggingSpanA":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"laggingSpanB":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/identical3crows":{"get":{"summary":"Identical Three Crows","description":"**IDENTICAL3CROWS** — Identical Three Crows is a bearish reversal pattern of three consecutive bearish candles that open at or near the prior close.","operationId":"get_identical3crows","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Identical Three Crows result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/imi":{"get":{"summary":"Intraday Momentum Index","description":"**IMI** — Intraday Momentum Index combines candlestick analysis with RSI to measure intraday momentum. Values above 70 are overbought; below 30 are oversold.","operationId":"get_imi","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Intraday Momentum Index result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/inneck":{"get":{"summary":"In-Neck Pattern","description":"**INNECK** — In-Neck Pattern is a bearish continuation pattern where a bearish candle is followed by a small bullish candle that closes near the prior low.","operationId":"get_inneck","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"In-Neck Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/inverseheadandshoulders":{"get":{"summary":"Head and Shoulders Inverse","description":"**INVERSEHEADANDSHOULDERS** — Head and Shoulders Inverse Pattern","operationId":"get_inverseheadandshoulders","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"depth","in":"query","required":false,"description":"Lookback and lookforward period for pivot detection. Controls the width of structural swings.","schema":{"type":"integer","default":10,"example":10}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation if deviationType is 'atr'.","schema":{"type":"integer","default":14,"example":14}},{"name":"headProminenceATR","in":"query","required":false,"description":"Minimum required prominence of the head relative to both shoulders, normalized by ATR.","schema":{"type":"number","format":"double","default":1.2,"example":1.2}},{"name":"shoulderToleranceATR","in":"query","required":false,"description":"Maximum allowed price difference between the left and right shoulders, normalized by ATR.","schema":{"type":"number","format":"double","default":1.5,"example":1.5}},{"name":"minDepthATR","in":"query","required":false,"description":"Minimum depth of the two peaks (H1 and H2), ensuring distinct shoulders.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"symmetryMin","in":"query","required":false,"description":"Minimum ratio of time spent forming the left half vs the right half of the pattern.","schema":{"type":"number","format":"double","default":0.5,"example":0.5}},{"name":"symmetryMax","in":"query","required":false,"description":"Maximum ratio of time spent forming the left half vs the right half of the pattern.","schema":{"type":"number","format":"double","default":3.5,"example":3.5}},{"name":"breakoutLookahead","in":"query","required":false,"description":"Number of candles to look ahead after the right shoulder to confirm a breakout.","schema":{"type":"integer","default":20,"example":20}},{"name":"necklineBuffer","in":"query","required":false,"description":"ATR-based buffer above the neckline to filter out false breakouts during formation.","schema":{"type":"number","format":"double","default":0.2,"example":0.2}}],"responses":{"200":{"description":"Head and Shoulders Inverse result","content":{"application/json":{"schema":{"type":"object","properties":{"l1_timestamp":{"description":"Unix timestamp of the left shoulder trough (L1).","type":"array","items":{"type":"integer"}},"l1_price":{"description":"Price level at the left shoulder trough (L1).","type":"array","items":{"type":"number","format":"double"}},"h1_timestamp":{"description":"Unix timestamp of the first peak (H1) separating the left shoulder from the head.","type":"array","items":{"type":"integer"}},"h1_price":{"description":"Price level at the first peak (H1).","type":"array","items":{"type":"number","format":"double"}},"l2_timestamp":{"description":"Unix timestamp of the head trough (L2).","type":"array","items":{"type":"integer"}},"l2_price":{"description":"Price level at the head trough (L2).","type":"array","items":{"type":"number","format":"double"}},"h2_timestamp":{"description":"Unix timestamp of the second peak (H2) separating the head from the right shoulder.","type":"array","items":{"type":"integer"}},"h2_price":{"description":"Price level at the second peak (H2).","type":"array","items":{"type":"number","format":"double"}},"l3_timestamp":{"description":"Unix timestamp of the right shoulder trough (L3).","type":"array","items":{"type":"integer"}},"l3_price":{"description":"Price level at the right shoulder trough (L3).","type":"array","items":{"type":"number","format":"double"}},"neckline_left_timestamp":{"description":"Unix timestamp of the neckline start anchor (H1).","type":"array","items":{"type":"integer"}},"neckline_left_price":{"description":"Price level of the neckline start anchor (H1).","type":"array","items":{"type":"number","format":"double"}},"neckline_right_timestamp":{"description":"Timestamp denoting where the neckline extends to on the right.","type":"array","items":{"type":"integer"}},"neckline_right_price":{"description":"The price level of the neckline at the right endpoint.","type":"array","items":{"type":"number","format":"double"}},"neckline_at_l2":{"description":"The calculated price of the neckline directly above the head trough (L2), used to measure pattern height.","type":"array","items":{"type":"number","format":"double"}},"breakout_neckline_price":{"description":"The specific price of the sloped neckline at the exact moment of the breakout.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke above the neckline.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Inverse Head and Shoulders pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical upside price target calculated by adding the pattern's height to the breakout neckline price.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bullish' for an Inverse Head and Shoulders.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/invertedhammer":{"get":{"summary":"Inverted Hammer","description":"**INVERTEDHAMMER** — Inverted Hammer is a potential bullish reversal candle with a small body at the bottom and a long upper shadow, appearing after a downtrend.","operationId":"get_invertedhammer","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Inverted Hammer result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/kama":{"get":{"summary":"Kaufman Adaptive Moving Average","description":"**KAMA** — Kaufman Adaptive Moving Average adjusts its speed based on market volatility. It moves quickly during trending markets and slowly during choppy, sideways markets.","operationId":"get_kama","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Kaufman Adaptive Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/kdj":{"get":{"summary":"KDJ Indicator","description":"**KDJ** — KDJ Indicator is a stochastic oscillator variant popular in Asian markets. It adds a J line to the standard %K and %D lines to highlight overbought and oversold extremes.","operationId":"get_kdj","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":9,"example":9}},{"name":"signal","in":"query","required":false,"description":"signal","schema":{"type":"integer","default":3,"example":3}}],"responses":{"200":{"description":"KDJ Indicator result","content":{"application/json":{"schema":{"type":"object","properties":{"valueK":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueD":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueJ":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/keltnerchannels":{"get":{"summary":"Keltner Channels","description":"**KELTNERCHANNELS** — Keltner Channels use an EMA as the middle line with ATR-based bands above and below, expanding during volatile periods and contracting during calm markets.","operationId":"get_keltnerchannels","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":20,"example":20}},{"name":"multiplier","in":"query","required":false,"description":"multiplier","schema":{"type":"integer","default":2,"example":2}},{"name":"atrLength","in":"query","required":false,"description":"atrLength","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Keltner Channels result","content":{"application/json":{"schema":{"type":"object","properties":{"lower":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"middle":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"upper":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/kicking":{"get":{"summary":"Kicking","description":"Kicking Pattern is a two-candle reversal consisting of two Marubozu candles in opposite directions with a gap between them.","operationId":"get_kicking","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Kicking result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/kickingbylength":{"get":{"summary":"Kicking by Length","description":"**KICKINGBYLENGTH** — Kicking by Length is a Kicking Pattern variant where the longer Marubozu determines the signal direction.","operationId":"get_kickingbylength","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Kicking by Length result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/kvo":{"get":{"summary":"Klinger Volume Oscillator","description":"**KVO** — Klinger Volume Oscillator compares volume to price movement to identify long-term money flow trends while remaining sensitive to short-term fluctuations.","operationId":"get_kvo","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"short_period","in":"query","required":false,"description":"short period","schema":{"type":"number","format":"double"}},{"name":"long_period","in":"query","required":false,"description":"long period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Klinger Volume Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"kvo":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ladderbottom":{"get":{"summary":"Ladder Bottom","description":"**LADDERBOTTOM** — Ladder Bottom is a five-candle bullish reversal pattern beginning with three bearish candles, followed by an inverted hammer and a bullish candle.","operationId":"get_ladderbottom","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Ladder Bottom result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/lag":{"get":{"summary":"Lag","description":"Lag shifts the input series backward by a specified number of periods, returning the value from N bars ago.","operationId":"get_lag","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Lag result","content":{"application/json":{"schema":{"type":"object","properties":{"lag":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/linearreg":{"get":{"summary":"Linear Regression","description":"**LINEARREG** — Linear Regression fits a straight line to price data using the least-squares method, providing a statistical trend estimate.","operationId":"get_linearreg","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Linear Regression result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/linearreg_angle":{"get":{"summary":"Linear Regression Angle","description":"**LINEARREG_ANGLE** — Linear Regression Angle returns the angle of the linear regression line in degrees, indicating the steepness of the trend.","operationId":"get_linearreg_angle","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Linear Regression Angle result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/linearreg_intercept":{"get":{"summary":"Linear Regression Intercept","description":"**LINEARREG_INTERCEPT** — Linear Regression Intercept returns the y-intercept of the linear regression line, representing the starting value of the trend.","operationId":"get_linearreg_intercept","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Linear Regression Intercept result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/linearreg_slope":{"get":{"summary":"Linear Regression Slope","description":"**LINEARREG_SLOPE** — Linear Regression Slope returns the slope of the linear regression line, indicating the rate of price change per bar.","operationId":"get_linearreg_slope","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Linear Regression Slope result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/linreg":{"get":{"summary":"Linear Regression","description":"**LINREG** — Linear Regression fits a straight line to price data and returns the endpoint of that line, providing a lag-free trend estimate.","operationId":"get_linreg","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Linear Regression result","content":{"application/json":{"schema":{"type":"object","properties":{"linreg":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/linregintercept":{"get":{"summary":"Linear Regression Intercept","description":"**LINREGINTERCEPT** — Linear Regression Intercept returns the y-intercept of the linear regression line fitted to recent price data.","operationId":"get_linregintercept","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Linear Regression Intercept result","content":{"application/json":{"schema":{"type":"object","properties":{"linregintercept":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/linregslope":{"get":{"summary":"Linear Regression Slope","description":"**LINREGSLOPE** — Linear Regression Slope returns the slope of the linear regression line, measuring the rate of price change per bar.","operationId":"get_linregslope","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Linear Regression Slope result","content":{"application/json":{"schema":{"type":"object","properties":{"linregslope":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ln":{"get":{"summary":"Natural Logarithm","description":"**LN** — Natural Logarithm applies the natural log function to each value in the input series, useful for normalizing price data.","operationId":"get_ln","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Natural Logarithm result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/log10":{"get":{"summary":"Base-10 Logarithm","description":"**LOG10** — Base-10 Logarithm applies the log base 10 function to each value in the input series.","operationId":"get_log10","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Base-10 Logarithm result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/longleggeddoji":{"get":{"summary":"Long Legged Doji","description":"**LONGLEGGEDDOJI** — Long-Legged Doji has very long upper and lower shadows with the open and close near the midpoint, indicating strong indecision.","operationId":"get_longleggeddoji","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Long Legged Doji result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/longline":{"get":{"summary":"Long Line Candle","description":"**LONGLINE** — Long Line Candle is a candle with a long body and short shadows, indicating strong directional conviction.","operationId":"get_longline","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Long Line Candle result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ma":{"get":{"summary":"Moving Average","description":"**MA** — Moving Average calculates the average price over a specified period, smoothing out short-term fluctuations to reveal the underlying trend direction.","operationId":"get_ma","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}},{"name":"maType","in":"query","required":false,"description":"MA Type","schema":{"type":"integer","default":0,"example":0}}],"responses":{"200":{"description":"Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/macd":{"get":{"summary":"MACD","description":"Moving Average Convergence/Divergence tracks the relationship between two EMAs of price. The MACD line, signal line, and histogram together identify trend direction, momentum, and reversals.","operationId":"get_macd","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"fastPeriod","in":"query","required":false,"description":"Fast Period","schema":{"type":"integer","default":12,"example":12}},{"name":"slowPeriod","in":"query","required":false,"description":"Slow Period","schema":{"type":"integer","default":26,"example":26}},{"name":"signalPeriod","in":"query","required":false,"description":"Signal Period","schema":{"type":"integer","default":9,"example":9}}],"responses":{"200":{"description":"MACD result","content":{"application/json":{"schema":{"type":"object","properties":{"valueMACD":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueMACDSignal":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueMACDHist":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/mama":{"get":{"summary":"MESA Adaptive Moving Average","description":"**MAMA** — MESA Adaptive Moving Average uses the Hilbert Transform to adapt its speed to the dominant market cycle, reducing whipsaws in ranging markets.","operationId":"get_mama","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"fastLimit","in":"query","required":false,"description":"Fast Limit","schema":{"type":"number","format":"double","default":0.5,"example":0.5}},{"name":"slowLimit","in":"query","required":false,"description":"Slow Limit","schema":{"type":"number","format":"double","default":0.05,"example":0.05}}],"responses":{"200":{"description":"MESA Adaptive Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"valueMAMA":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueFAMA":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/marketfi":{"get":{"summary":"Market Facilitation Index","description":"**MARKETFI** — Market Facilitation Index measures the efficiency of price movement per unit of volume. Rising MFI with rising volume indicates a strong, efficient trend.","operationId":"get_marketfi","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Market Facilitation Index result","content":{"application/json":{"schema":{"type":"object","properties":{"marketfi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/marubozu":{"get":{"summary":"Marubozu","description":"Marubozu is a candle with no shadows — the open equals the low (bullish) or the high (bearish) — indicating strong momentum in one direction.","operationId":"get_marubozu","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Marubozu result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/mass":{"get":{"summary":"Mass Index","description":"**MASS** — Mass Index uses the high-low range to identify trend reversals. A 'reversal bulge' occurs when the index rises above 27 and then falls below 26.5.","operationId":"get_mass","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Mass Index result","content":{"application/json":{"schema":{"type":"object","properties":{"mass":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/matchinglow":{"get":{"summary":"Matching Low","description":"**MATCHINGLOW** — Matching Low is a two-candle bullish reversal pattern where two bearish candles close at the same low, suggesting strong support at that level.","operationId":"get_matchinglow","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Matching Low result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/mathold":{"get":{"summary":"Mat Hold","description":"**MATHOLD** — Mat Hold is a five-candle bullish continuation pattern where a large bullish candle is followed by a brief pullback and then a resumption of the uptrend.","operationId":"get_mathold","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"penetration","in":"query","required":false,"description":"Penetration","schema":{"type":"number","format":"double","default":0.5,"example":0.5}}],"responses":{"200":{"description":"Mat Hold result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/mavp":{"get":{"summary":"Moving Average with Variable Period","description":"**MAVP** — Moving Average with Variable Period calculates a moving average where the period itself varies over time, adapting to changing market conditions.","operationId":"get_mavp","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"minPeriod","in":"query","required":false,"description":"Minimum Period","schema":{"type":"integer","default":2,"example":2}},{"name":"maxPeriod","in":"query","required":false,"description":"Maximum Period","schema":{"type":"integer","default":30,"example":30}},{"name":"maType","in":"query","required":false,"description":"MA Type","schema":{"type":"integer","default":0,"example":0}}],"responses":{"200":{"description":"Moving Average with Variable Period result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/max":{"get":{"summary":"Maximum","description":"**MAX** — Maximum returns the highest value in the input series over a specified lookback period.","operationId":"get_max","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Maximum result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/maxindex":{"get":{"summary":"Maximum Index","description":"**MAXINDEX** — Maximum Index returns the index (bar offset) of the highest value over a specified lookback period.","operationId":"get_maxindex","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Maximum Index result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/md":{"get":{"summary":"Mean Deviation","description":"**MD** — Mean Deviation calculates the average absolute deviation of price from its mean over a period, measuring the typical spread of prices.","operationId":"get_md","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Mean Deviation result","content":{"application/json":{"schema":{"type":"object","properties":{"md":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/medprice":{"get":{"summary":"Median Price","description":"**MEDPRICE** — Median Price returns the midpoint of the high-low range: (high + low) / 2.","operationId":"get_medprice","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Median Price result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/mfi":{"get":{"summary":"Money Flow Index (MFI)","description":"**MFI** — Money Flow Index is a volume-weighted RSI that measures buying and selling pressure. Values above 80 indicate overbought conditions; below 20 indicate oversold.","operationId":"get_mfi","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Money Flow Index (MFI) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/midpoint":{"get":{"summary":"Midpoint","description":"MidPoint calculates the midpoint of price over a specified period as (highest high + lowest low) / 2, providing a simple measure of the price center.","operationId":"get_midpoint","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Midpoint result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/midprice":{"get":{"summary":"Midpoint Price","description":"**MIDPRICE** — Midpoint Price calculates the midpoint of the high-low range over a period, useful as a baseline for other calculations.","operationId":"get_midprice","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Midpoint Price result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/min":{"get":{"summary":"Minimum","description":"**MIN** — Minimum returns the lowest value in the input series over a specified lookback period.","operationId":"get_min","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Minimum result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/minindex":{"get":{"summary":"Minimum Index","description":"**MININDEX** — Minimum Index returns the index (bar offset) of the lowest value over a specified lookback period.","operationId":"get_minindex","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Minimum Index result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/minmax":{"get":{"summary":"Minimum and Maximum","description":"**MINMAX** — Min/Max returns both the lowest and highest values over a specified lookback period in a single call.","operationId":"get_minmax","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Minimum and Maximum result","content":{"application/json":{"schema":{"type":"object","properties":{"valueMin":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueMax":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/minmaxindex":{"get":{"summary":"Minimum and Maximum Index","description":"**MINMAXINDEX** — Min/Max Index returns the bar offsets of both the lowest and highest values over a specified lookback period.","operationId":"get_minmaxindex","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Minimum and Maximum Index result","content":{"application/json":{"schema":{"type":"object","properties":{"valueMinIdx":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueMaxIdx":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/minus_di":{"get":{"summary":"Minus Directional Indicator","description":"**MINUS_DI** — Minus Directional Indicator (-DI) measures the strength of downward price movement. Used with +DI and ADX to assess trend direction.","operationId":"get_minus_di","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Minus Directional Indicator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/minus_dm":{"get":{"summary":"Minus Directional Movement","description":"**MINUS_DM** — Minus Directional Movement (-DM) measures the portion of today's range that extends below yesterday's range, contributing to the -DI calculation.","operationId":"get_minus_dm","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Minus Directional Movement result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/mom":{"get":{"summary":"Momentum","description":"**MOM** — Momentum measures the rate of change in price over a specified period. Positive values indicate upward momentum; negative values indicate downward momentum.","operationId":"get_mom","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Momentum result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/momentumsr":{"get":{"summary":"Momentum Support & Resistance","description":"**MOMENTUMSR** — Momentum-driven Support and Resistance levels based on RSI and CMO extremes.","operationId":"get_momentumsr","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"minimumLength","in":"query","required":false,"description":"minimumLength","schema":{"type":"integer","default":3,"example":3}},{"name":"rsiLength","in":"query","required":false,"description":"rsiLength","schema":{"type":"integer","default":9,"example":9}}],"responses":{"200":{"description":"Momentum Support & Resistance result","content":{"application/json":{"schema":{"type":"object","properties":{"supportSegments":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"resistanceSegments":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/morningdojistar":{"get":{"summary":"Morning Doji Star","description":"**MORNINGDOJISTAR** — Morning Doji Star is a three-candle bullish reversal pattern where a bearish candle is followed by a Doji gap and then a bullish candle.","operationId":"get_morningdojistar","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"penetration","in":"query","required":false,"description":"Penetration","schema":{"type":"number","format":"double","default":0.3,"example":0.3}}],"responses":{"200":{"description":"Morning Doji Star result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/morningstar":{"get":{"summary":"Morning Star","description":"**MORNINGSTAR** — Morning Star is a three-candle bullish reversal pattern consisting of a large bearish candle, a small-bodied candle, and a large bullish candle.","operationId":"get_morningstar","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"penetration","in":"query","required":false,"description":"Penetration","schema":{"type":"number","format":"double","default":0.3,"example":0.3}}],"responses":{"200":{"description":"Morning Star result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/msw":{"get":{"summary":"Mesa Sine Wave","description":"**MSW** — Mesa Sine Wave uses the Hilbert Transform to generate two sine wave lines that oscillate with the dominant market cycle, signaling turning points.","operationId":"get_msw","tags":["Cycle"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Mesa Sine Wave result","content":{"application/json":{"schema":{"type":"object","properties":{"msw_sine":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"msw_lead":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/mul":{"get":{"summary":"Multiplication","description":"**MUL** — Vector Multiplication multiplies two input series element-by-element, useful for scaling indicator values.","operationId":"get_mul","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Multiplication result","content":{"application/json":{"schema":{"type":"object","properties":{"mul":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/mult":{"get":{"summary":"Multiplication","description":"**MULT** — Vector Multiplication multiplies two price series element-by-element.","operationId":"get_mult","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Multiplication result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/natr":{"get":{"summary":"Normalized Average True Range","description":"**NATR** — Normalized Average True Range expresses ATR as a percentage of the closing price, making volatility comparable across different price levels.","operationId":"get_natr","tags":["Volatility"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Normalized Average True Range result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/nvi":{"get":{"summary":"Negative Volume Index","description":"**NVI** — Negative Volume Index tracks price changes on days when volume decreases, based on the theory that smart money is active on low-volume days.","operationId":"get_nvi","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Negative Volume Index result","content":{"application/json":{"schema":{"type":"object","properties":{"nvi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/obv":{"get":{"summary":"On Balance Volume (OBV)","description":"**OBV** — On Balance Volume adds volume on up days and subtracts it on down days, creating a running total that reflects buying and selling pressure.","operationId":"get_obv","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"On Balance Volume (OBV) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/onneck":{"get":{"summary":"On-Neck Pattern","description":"**ONNECK** — On-Neck Pattern is a bearish continuation pattern where a bearish candle is followed by a small bullish candle that closes near the prior low.","operationId":"get_onneck","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"On-Neck Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/openingmarubozu":{"get":{"summary":"Opening Marubozu","description":"**OPENINGMARUBOZU** — Opening Marubozu is a candle with no shadow on the opening end — a bullish Opening Marubozu has no lower shadow; a bearish one has no upper shadow.","operationId":"get_openingmarubozu","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Opening Marubozu result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/pd":{"get":{"summary":"Price Deviation","description":"**PD** — Price Deviation measures how far the current price deviates from a moving average, expressed as an absolute or percentage value.","operationId":"get_pd","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":5,"example":5}}],"responses":{"200":{"description":"Price Deviation result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/piercing":{"get":{"summary":"Piercing Pattern","description":"**PIERCING** — Piercing Pattern is a bullish reversal pattern where a bearish candle is followed by a bullish candle that opens below the prior low and closes above the midpoint.","operationId":"get_piercing","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Piercing Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/pivotpoints":{"get":{"summary":"Pivot Points","description":"**PIVOTPOINTS** — Pivot Points calculate key support and resistance levels based on the prior period's high, low, and close, widely used by day traders to identify turning points.","operationId":"get_pivotpoints","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Pivot Points result","content":{"application/json":{"schema":{"type":"object","properties":{"r3":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"r2":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"r1":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"pl":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"s1":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"s2":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"s3":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/plus_di":{"get":{"summary":"Plus Directional Indicator","description":"**PLUS_DI** — Plus Directional Indicator (+DI) measures the strength of upward price movement. Used with -DI and ADX to assess trend direction.","operationId":"get_plus_di","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Plus Directional Indicator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/plus_dm":{"get":{"summary":"Plus Directional Movement","description":"**PLUS_DM** — Plus Directional Movement (+DM) measures the portion of today's range that extends above yesterday's range, contributing to the +DI calculation.","operationId":"get_plus_dm","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Plus Directional Movement result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ppo":{"get":{"summary":"Percentage Price Oscillator","description":"**PPO** — Percentage Price Oscillator shows the percentage difference between two EMAs, making it comparable across different price levels unlike the absolute MACD.","operationId":"get_ppo","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"fastPeriod","in":"query","required":false,"description":"Fast Period","schema":{"type":"integer","default":12,"example":12}},{"name":"slowPeriod","in":"query","required":false,"description":"Slow Period","schema":{"type":"integer","default":26,"example":26}},{"name":"maType","in":"query","required":false,"description":"MA Type","schema":{"type":"integer","default":0,"example":0}}],"responses":{"200":{"description":"Percentage Price Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/price":{"get":{"summary":"Price","description":"Returns the current or most recent price for the specified symbol and exchange.","operationId":"get_price","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Price result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/priorswinghigh":{"get":{"summary":"Prior Swing High","description":"**PRIORSWINGHIGH** — Returns the price level of the most recent swing high prior to the current bar, useful for identifying resistance levels.","operationId":"get_priorswinghigh","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Prior Swing High result","content":{"application/json":{"schema":{"type":"object","properties":{"valueClose":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueHigh":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/priorswinglow":{"get":{"summary":"Prior Swing Low","description":"**PRIORSWINGLOW** — Returns the price level of the most recent swing low prior to the current bar, useful for identifying support levels.","operationId":"get_priorswinglow","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Prior Swing Low result","content":{"application/json":{"schema":{"type":"object","properties":{"valueClose":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueLow":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/psar":{"get":{"summary":"Parabolic SAR","description":"**PSAR** — Parabolic SAR places dots above or below price to indicate potential stop and reverse points. It trails price during a trend and flips when the trend reverses.","operationId":"get_psar","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"start","in":"query","required":false,"description":"start","schema":{"type":"number","format":"double","default":0.02,"example":0.02}},{"name":"increment","in":"query","required":false,"description":"increment","schema":{"type":"number","format":"double","default":0.02,"example":0.02}},{"name":"maximum","in":"query","required":false,"description":"maximum","schema":{"type":"number","format":"double","default":0.2,"example":0.2}}],"responses":{"200":{"description":"Parabolic SAR result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/pvi":{"get":{"summary":"Positive Volume Index","description":"**PVI** — Positive Volume Index tracks price changes on days when volume increases, based on the theory that uninformed investors are active on high-volume days.","operationId":"get_pvi","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Positive Volume Index result","content":{"application/json":{"schema":{"type":"object","properties":{"pvi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/qstick":{"get":{"summary":"Qstick","description":"Qstick Indicator is a moving average of the difference between open and close prices, measuring buying or selling pressure over time.","operationId":"get_qstick","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Qstick result","content":{"application/json":{"schema":{"type":"object","properties":{"qstick":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/resistanceline":{"get":{"summary":"Resistance Line","description":"**RESISTANCELINE** — Resistance Line identifies a horizontal price level where selling pressure has historically prevented further upward movement.","operationId":"get_resistanceline","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Resistance Line result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/resistancesegments":{"get":{"summary":"Resistance Segments","description":"**RESISTANCESEGMENTS** — Resistance Segments identifies multiple resistance zones across a price range, providing a broader view of overhead supply levels.","operationId":"get_resistancesegments","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Resistance Segments result","content":{"application/json":{"schema":{"type":"object","properties":{"i1":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"i2":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"price":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"length":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rickshawman":{"get":{"summary":"Rickshaw Man","description":"**RICKSHAWMAN** — Rickshaw Man is a long-legged Doji where the open and close are at or near the midpoint of the candle, indicating extreme indecision.","operationId":"get_rickshawman","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Rickshaw Man result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/risefall3methods":{"get":{"summary":"Rising/Falling Three Methods","description":"**RISEFALL3METHODS** — Rising/Falling Three Methods is a continuation pattern with a long candle, three small counter-trend candles, and a final candle that closes beyond the first.","operationId":"get_risefall3methods","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Rising/Falling Three Methods result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/roc":{"get":{"summary":"Rate of Change","description":"**ROC** — Rate of Change measures the percentage change in price over a specified period, showing the speed at which price is moving.","operationId":"get_roc","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Rate of Change result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rocp":{"get":{"summary":"Rate of Change Percentage","description":"**ROCP** — Rate of Change Percentage calculates (price - prevPrice) / prevPrice, expressing momentum as a ratio rather than a percentage.","operationId":"get_rocp","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Rate of Change Percentage result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rocr":{"get":{"summary":"Rate of Change Ratio","description":"**ROCR** — Rate of Change Ratio calculates price / prevPrice, providing a ratio-based measure of momentum.","operationId":"get_rocr","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Rate of Change Ratio result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rocr100":{"get":{"summary":"Rate of Change Ratio (100 Scale)","description":"**ROCR100** — Rate of Change Ratio 100 Scale calculates (price / prevPrice) × 100, scaling the ratio for easier comparison.","operationId":"get_rocr100","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Rate of Change Ratio (100 Scale) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/round":{"get":{"summary":"Round","description":"Round rounds each value in the input series to the nearest integer.","operationId":"get_round","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Round result","content":{"application/json":{"schema":{"type":"object","properties":{"round":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rsidivergence":{"get":{"summary":"RSI Divergence","description":"**RSIDIVERGENCE** — RSI Divergence detects both bullish and bearish divergences between price action and the RSI indicator, signaling potential trend reversals.","operationId":"get_rsidivergence","tags":["Divergence"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}},{"name":"srcKey","in":"query","required":false,"description":"srcKey","schema":{"type":"string","default":"close","example":"close"}},{"name":"lbR","in":"query","required":false,"description":"lbR","schema":{"type":"integer","default":5,"example":5}},{"name":"lbL","in":"query","required":false,"description":"lbL","schema":{"type":"integer","default":14,"example":14}},{"name":"rangeUpper","in":"query","required":false,"description":"rangeUpper","schema":{"type":"integer","default":60,"example":60}},{"name":"rangeLower","in":"query","required":false,"description":"rangeLower","schema":{"type":"integer","default":5,"example":5}},{"name":"plotBull","in":"query","required":false,"description":"plotBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBull","in":"query","required":false,"description":"plotHiddenBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotBear","in":"query","required":false,"description":"plotBear","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBear","in":"query","required":false,"description":"plotHiddenBear","schema":{"type":"boolean","default":true,"example":true}}],"responses":{"200":{"description":"RSI Divergence result","content":{"application/json":{"schema":{"type":"object","properties":{"bull":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"hiddenBull":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"bear":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"hiddenBear":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"rsi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rsidivergencebearish":{"get":{"summary":"RSI Bearish Divergence","description":"**RSIDIVERGENCEBEARISH** — RSI Bearish Divergence occurs when price makes a higher high but RSI makes a lower high, warning of weakening upward momentum and a potential reversal downward.","operationId":"get_rsidivergencebearish","tags":["Divergence"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}},{"name":"srcKey","in":"query","required":false,"description":"srcKey","schema":{"type":"string","default":"close","example":"close"}},{"name":"lbR","in":"query","required":false,"description":"lbR","schema":{"type":"integer","default":5,"example":5}},{"name":"lbL","in":"query","required":false,"description":"lbL","schema":{"type":"integer","default":14,"example":14}},{"name":"rangeUpper","in":"query","required":false,"description":"rangeUpper","schema":{"type":"integer","default":60,"example":60}},{"name":"rangeLower","in":"query","required":false,"description":"rangeLower","schema":{"type":"integer","default":5,"example":5}},{"name":"plotBull","in":"query","required":false,"description":"plotBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBull","in":"query","required":false,"description":"plotHiddenBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotBear","in":"query","required":false,"description":"plotBear","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBear","in":"query","required":false,"description":"plotHiddenBear","schema":{"type":"boolean","default":true,"example":true}}],"responses":{"200":{"description":"RSI Bearish Divergence result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"rsi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rsidivergencebullish":{"get":{"summary":"RSI Bullish Divergence","description":"**RSIDIVERGENCEBULLISH** — RSI Bullish Divergence occurs when price makes a lower low but RSI makes a higher low, signaling weakening downward momentum and a potential reversal upward.","operationId":"get_rsidivergencebullish","tags":["Divergence"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}},{"name":"srcKey","in":"query","required":false,"description":"srcKey","schema":{"type":"string","default":"close","example":"close"}},{"name":"lbR","in":"query","required":false,"description":"lbR","schema":{"type":"integer","default":5,"example":5}},{"name":"lbL","in":"query","required":false,"description":"lbL","schema":{"type":"integer","default":14,"example":14}},{"name":"rangeUpper","in":"query","required":false,"description":"rangeUpper","schema":{"type":"integer","default":60,"example":60}},{"name":"rangeLower","in":"query","required":false,"description":"rangeLower","schema":{"type":"integer","default":5,"example":5}},{"name":"plotBull","in":"query","required":false,"description":"plotBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBull","in":"query","required":false,"description":"plotHiddenBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotBear","in":"query","required":false,"description":"plotBear","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBear","in":"query","required":false,"description":"plotHiddenBear","schema":{"type":"boolean","default":true,"example":true}}],"responses":{"200":{"description":"RSI Bullish Divergence result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"rsi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rsidivergencehiddenbearish":{"get":{"summary":"RSI Hidden Bearish Divergence","description":"**RSIDIVERGENCEHIDDENBEARISH** — RSI Hidden Bearish Divergence occurs when price makes a lower high but RSI makes a higher high, confirming continuation of a downtrend.","operationId":"get_rsidivergencehiddenbearish","tags":["Divergence"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}},{"name":"srcKey","in":"query","required":false,"description":"srcKey","schema":{"type":"string","default":"close","example":"close"}},{"name":"lbR","in":"query","required":false,"description":"lbR","schema":{"type":"integer","default":5,"example":5}},{"name":"lbL","in":"query","required":false,"description":"lbL","schema":{"type":"integer","default":14,"example":14}},{"name":"rangeUpper","in":"query","required":false,"description":"rangeUpper","schema":{"type":"integer","default":60,"example":60}},{"name":"rangeLower","in":"query","required":false,"description":"rangeLower","schema":{"type":"integer","default":5,"example":5}},{"name":"plotBull","in":"query","required":false,"description":"plotBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBull","in":"query","required":false,"description":"plotHiddenBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotBear","in":"query","required":false,"description":"plotBear","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBear","in":"query","required":false,"description":"plotHiddenBear","schema":{"type":"boolean","default":true,"example":true}}],"responses":{"200":{"description":"RSI Hidden Bearish Divergence result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"rsi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rsidivergencehiddenbullish":{"get":{"summary":"RSI Hidden Bullish Divergence","description":"**RSIDIVERGENCEHIDDENBULLISH** — RSI Hidden Bullish Divergence occurs when price makes a higher low but RSI makes a lower low, confirming continuation of an uptrend.","operationId":"get_rsidivergencehiddenbullish","tags":["Divergence"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}},{"name":"srcKey","in":"query","required":false,"description":"srcKey","schema":{"type":"string","default":"close","example":"close"}},{"name":"lbR","in":"query","required":false,"description":"lbR","schema":{"type":"integer","default":5,"example":5}},{"name":"lbL","in":"query","required":false,"description":"lbL","schema":{"type":"integer","default":14,"example":14}},{"name":"rangeUpper","in":"query","required":false,"description":"rangeUpper","schema":{"type":"integer","default":60,"example":60}},{"name":"rangeLower","in":"query","required":false,"description":"rangeLower","schema":{"type":"integer","default":5,"example":5}},{"name":"plotBull","in":"query","required":false,"description":"plotBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBull","in":"query","required":false,"description":"plotHiddenBull","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotBear","in":"query","required":false,"description":"plotBear","schema":{"type":"boolean","default":true,"example":true}},{"name":"plotHiddenBear","in":"query","required":false,"description":"plotHiddenBear","schema":{"type":"boolean","default":true,"example":true}}],"responses":{"200":{"description":"RSI Hidden Bullish Divergence result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"rsi":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/rvgi":{"get":{"summary":"Relative Vigor Index","description":"**RVGI** — Relative Vigor Index measures the conviction of a recent price move by comparing the closing price to the trading range, smoothed with a symmetric moving average.","operationId":"get_rvgi","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"length","in":"query","required":false,"description":"length","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Relative Vigor Index result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"signal":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"trend":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sar":{"get":{"summary":"Parabolic SAR","description":"**SAR** — Parabolic SAR places dots above or below price to signal trend direction and potential reversal points, accelerating as the trend matures.","operationId":"get_sar","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"acceleration","in":"query","required":false,"description":"Acceleration Factor","schema":{"type":"number","format":"double","default":0.02,"example":0.02}},{"name":"maximum","in":"query","required":false,"description":"AF Maximum","schema":{"type":"number","format":"double","default":0.2,"example":0.2}}],"responses":{"200":{"description":"Parabolic SAR result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sarext":{"get":{"summary":"Parabolic SAR - Extended","description":"**SAREXT** — Parabolic SAR Extended is a configurable version of the Parabolic SAR with adjustable acceleration factors for both the start and maximum values.","operationId":"get_sarext","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"startValue","in":"query","required":false,"description":"Start Value","schema":{"type":"number","format":"double","default":0,"example":0}},{"name":"offsetOnReverse","in":"query","required":false,"description":"Offset on Reverse","schema":{"type":"number","format":"double","default":0,"example":0}},{"name":"accelerationInitLong","in":"query","required":false,"description":"AF Init Long","schema":{"type":"number","format":"double","default":0.02,"example":0.02}},{"name":"accelerationLong","in":"query","required":false,"description":"AF Long","schema":{"type":"number","format":"double","default":0.02,"example":0.02}},{"name":"accelerationMaxLong","in":"query","required":false,"description":"AF Max Long","schema":{"type":"number","format":"double","default":0.2,"example":0.2}},{"name":"accelerationInitShort","in":"query","required":false,"description":"AF Init Short","schema":{"type":"number","format":"double","default":0.02,"example":0.02}},{"name":"accelerationShort","in":"query","required":false,"description":"AF Short","schema":{"type":"number","format":"double","default":0.02,"example":0.02}},{"name":"accelerationMaxShort","in":"query","required":false,"description":"AF Max Short","schema":{"type":"number","format":"double","default":0.2,"example":0.2}}],"responses":{"200":{"description":"Parabolic SAR - Extended result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/separatinglines":{"get":{"summary":"Separating Lines","description":"**SEPARATINGLINES** — Separating Lines is a two-candle continuation pattern where both candles open at the same price but close in opposite directions.","operationId":"get_separatinglines","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Separating Lines result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/shootingstar":{"get":{"summary":"Shooting Star","description":"**SHOOTINGSTAR** — Shooting Star is a bearish reversal candle with a small body at the bottom and a long upper shadow, appearing after an uptrend.","operationId":"get_shootingstar","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Shooting Star result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/shortline":{"get":{"summary":"Short Line Candle","description":"**SHORTLINE** — Short Line Candle is a candle with a short body and short shadows, indicating low conviction and often appearing during consolidation.","operationId":"get_shortline","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Short Line Candle result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sin":{"get":{"summary":"Sine","description":"**SIN** — Sine applies the sine trigonometric function to each value in the input series.","operationId":"get_sin","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Sine result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sinh":{"get":{"summary":"Hyperbolic Sine","description":"**SINH** — Hyperbolic Sine applies the hyperbolic sine function to each value in the input series.","operationId":"get_sinh","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hyperbolic Sine result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sma":{"get":{"summary":"Simple Moving Average (SMA)","description":"**SMA** — Simple Moving Average calculates the arithmetic mean of price over a specified period, providing a straightforward measure of the average price trend.","operationId":"get_sma","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Simple Moving Average (SMA) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/smi":{"get":{"summary":"Stochastic Momentum Index","description":"**SMI** — Stochastic Momentum Index refines the Stochastic Oscillator by measuring where the close is relative to the midpoint of the high-low range, rather than the range extremes.","operationId":"get_smi","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"percentageKLength","in":"query","required":false,"description":"percentageKLength","schema":{"type":"integer","default":10,"example":10}},{"name":"percentageDLength","in":"query","required":false,"description":"percentageDLength","schema":{"type":"integer","default":3,"example":3}},{"name":"emaLength","in":"query","required":false,"description":"emaLength","schema":{"type":"integer","default":3,"example":3}}],"responses":{"200":{"description":"Stochastic Momentum Index result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"signal":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/smma":{"get":{"summary":"Smoothed Moving Average","description":"**SMMA** — Smoothed Moving Average applies additional smoothing to reduce noise, giving equal weight to all periods but with a longer effective lookback than a standard SMA.","operationId":"get_smma","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":7,"example":7}}],"responses":{"200":{"description":"Smoothed Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/spinningtop":{"get":{"summary":"Spinning Top","description":"**SPINNINGTOP** — Spinning Top is a candle with a small body and long upper and lower shadows, indicating indecision between buyers and sellers.","operationId":"get_spinningtop","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Spinning Top result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sqrt":{"get":{"summary":"Square Root","description":"**SQRT** — Square Root applies the square root function to each value in the input series.","operationId":"get_sqrt","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Square Root result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/squeeze":{"get":{"summary":"Squeeze Momentum Index","description":"**SQUEEZE** — Squeeze Momentum Index identifies periods of low volatility (the squeeze) followed by explosive moves, combining Bollinger Bands and Keltner Channels.","operationId":"get_squeeze","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"bbLength","in":"query","required":false,"description":"bbLength","schema":{"type":"integer","default":20,"example":20}},{"name":"bbMult","in":"query","required":false,"description":"bbMult","schema":{"type":"number","format":"double","default":2,"example":2}},{"name":"kcLength","in":"query","required":false,"description":"kcLength","schema":{"type":"integer","default":20,"example":20}},{"name":"kcMult","in":"query","required":false,"description":"kcMult","schema":{"type":"number","format":"double","default":1.5,"example":1.5}}],"responses":{"200":{"description":"Squeeze Momentum Index result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"squeeze":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/srl":{"get":{"summary":"Support/Resistance Levels","description":"**SRL** — Support/Resistance Levels identifies key horizontal price levels where the market has repeatedly reversed, providing actionable support and resistance zones.","operationId":"get_srl","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Support/Resistance Levels result","content":{"application/json":{"schema":{"type":"object","properties":{"valueClose":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/stalledpattern":{"get":{"summary":"Stalled Pattern","description":"**STALLEDPATTERN** — Stalled Pattern is a three-candle bearish reversal pattern where three bullish candles show progressively weakening momentum.","operationId":"get_stalledpattern","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Stalled Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/stc":{"get":{"summary":"Schaff Trend Cycle","description":"**STC** — Schaff Trend Cycle combines MACD and a Stochastic formula to produce a faster and more accurate cycle indicator, reducing the lag of traditional MACD signals.","operationId":"get_stc","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"fastLength","in":"query","required":false,"description":"fastLength","schema":{"type":"integer","default":23,"example":23}},{"name":"slowLength","in":"query","required":false,"description":"slowLength","schema":{"type":"integer","default":50,"example":50}},{"name":"cycleLength","in":"query","required":false,"description":"cycleLength","schema":{"type":"integer","default":10,"example":10}},{"name":"d1Length","in":"query","required":false,"description":"d1Length","schema":{"type":"integer","default":3,"example":3}},{"name":"d2Length","in":"query","required":false,"description":"d2Length","schema":{"type":"integer","default":3,"example":3}}],"responses":{"200":{"description":"Schaff Trend Cycle result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"trend":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/stddev":{"get":{"summary":"Standard Deviation","description":"**STDDEV** — Standard Deviation measures the dispersion of price from its mean. Higher values indicate greater price variability and volatility.","operationId":"get_stddev","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":5,"example":5}}],"responses":{"200":{"description":"Standard Deviation result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/stderr":{"get":{"summary":"Standard Error","description":"**STDERR** — Standard Error measures the accuracy of a linear regression fit to price data — lower values indicate a tighter fit to the trend line.","operationId":"get_stderr","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Standard Error result","content":{"application/json":{"schema":{"type":"object","properties":{"stderr":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sticksandwich":{"get":{"summary":"Stick Sandwich","description":"**STICKSANDWICH** — Stick Sandwich is a bullish reversal pattern where two bearish candles with the same close surround a bullish candle.","operationId":"get_sticksandwich","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Stick Sandwich result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/stoch":{"get":{"summary":"Stochastic Oscillator","description":"**STOCH** — Stochastic Oscillator (TradingView) compares a closing price to its price range over a given period. The %K and %D lines identify overbought and oversold conditions.","operationId":"get_stoch","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"kPeriod","in":"query","required":false,"description":"kPeriod","schema":{"type":"integer","default":5,"example":5}},{"name":"dPeriod","in":"query","required":false,"description":"dPeriod","schema":{"type":"integer","default":3,"example":3}},{"name":"kSmooth","in":"query","required":false,"description":"kSmooth","schema":{"type":"integer","default":3,"example":3}}],"responses":{"200":{"description":"Stochastic Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"valueK":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueD":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/stochf":{"get":{"summary":"Stochastic Fast","description":"**STOCHF** — Stochastic Fast is the unsmoothed version of the Stochastic Oscillator, more sensitive to price changes and generating more frequent signals.","operationId":"get_stochf","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"kPeriod","in":"query","required":false,"description":"Fast-K Period","schema":{"type":"integer","default":5,"example":5}},{"name":"fastD_Period","in":"query","required":false,"description":"Fast-D Period","schema":{"type":"integer","default":3,"example":3}},{"name":"fastD_MAType","in":"query","required":false,"description":"Fast-D MA","schema":{"type":"integer","default":0,"example":0}}],"responses":{"200":{"description":"Stochastic Fast result","content":{"application/json":{"schema":{"type":"object","properties":{"valueFastK":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueFastD":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/stochrsi":{"get":{"summary":"Stochastic RSI","description":"**STOCHRSI** — Stochastic RSI applies the Stochastic formula to RSI values rather than price, creating a more sensitive oscillator for identifying overbought and oversold RSI levels.","operationId":"get_stochrsi","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"rsiPeriod","in":"query","required":false,"description":"rsiPeriod","schema":{"type":"integer","default":14,"example":14}},{"name":"stochasticPeriod","in":"query","required":false,"description":"stochasticPeriod","schema":{"type":"integer","default":14,"example":14}},{"name":"kPeriod","in":"query","required":false,"description":"kPeriod","schema":{"type":"integer","default":5,"example":5}},{"name":"dPeriod","in":"query","required":false,"description":"dPeriod","schema":{"type":"integer","default":3,"example":3}}],"responses":{"200":{"description":"Stochastic RSI result","content":{"application/json":{"schema":{"type":"object","properties":{"valueK":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueD":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/stochtv":{"get":{"summary":"Stochastic Oscillator (TradingView)","description":"**STOCHTV** — Stochastic Oscillator (TradingView) is TradingView's implementation of the classic Stochastic, using a smoothed %K and %D to reduce noise.","operationId":"get_stochtv","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"kPeriod","in":"query","required":false,"description":"kPeriod","schema":{"type":"integer","default":14,"example":14}},{"name":"dPeriod","in":"query","required":false,"description":"dPeriod","schema":{"type":"integer","default":3,"example":3}},{"name":"kSmooth","in":"query","required":false,"description":"kSmooth","schema":{"type":"integer","default":3,"example":3}}],"responses":{"200":{"description":"Stochastic Oscillator (TradingView) result","content":{"application/json":{"schema":{"type":"object","properties":{"valueK":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueD":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sub":{"get":{"summary":"Subtraction","description":"**SUB** — Vector Subtraction subtracts one price series from another element-by-element.","operationId":"get_sub","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Subtraction result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/sum":{"get":{"summary":"Summation","description":"**SUM** — Summation returns the rolling sum of the input series over a specified lookback period.","operationId":"get_sum","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Summation result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/supertrend":{"get":{"summary":"SuperTrend","description":"SuperTrend is a trend-following indicator based on ATR that plots above price in a downtrend and below price in an uptrend, providing clear buy and sell signals.","operationId":"get_supertrend","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":7,"example":7}},{"name":"multiplier","in":"query","required":false,"description":"multiplier","schema":{"type":"integer","default":3,"example":3}}],"responses":{"200":{"description":"SuperTrend result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueAdvice":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/supportline":{"get":{"summary":"Support Line","description":"**SUPPORTLINE** — Support Line identifies a horizontal price level where buying pressure has historically prevented further downward movement.","operationId":"get_supportline","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Support Line result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/supportresistance":{"get":{"summary":"Support Resistance","description":"**SUPPORTRESISTANCE** — Support and Resistance Horizontal Lines","operationId":"get_supportresistance","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"lookback","in":"query","required":false,"description":"lookback","schema":{"type":"integer","default":5,"example":5}},{"name":"lookforward","in":"query","required":false,"description":"lookforward","schema":{"type":"integer","default":5,"example":5}},{"name":"deviationATR","in":"query","required":false,"description":"deviationATR","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"deviationType","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"source","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"merge_distance","in":"query","required":false,"description":"merge_distance","schema":{"type":"number","format":"double","default":0.5,"example":0.5}},{"name":"min_touches","in":"query","required":false,"description":"min_touches","schema":{"type":"integer","default":2,"example":2}},{"name":"max_lines","in":"query","required":false,"description":"max_lines","schema":{"type":"integer","default":20,"example":20}}],"responses":{"200":{"description":"Support Resistance result","content":{"application/json":{"schema":{"type":"object","properties":{"line_type":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"left_timestamp":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"right_timestamp":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"price":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"pattern_index":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/supportsegments":{"get":{"summary":"Support Segments","description":"**SUPPORTSEGMENTS** — Support/Resistance Segments identifies key price levels where the market has historically reversed, drawing horizontal zones of support and resistance.","operationId":"get_supportsegments","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"rsiLength","in":"query","required":false,"description":"rsiLength","schema":{"type":"integer","default":9,"example":9}}],"responses":{"200":{"description":"Support Segments result","content":{"application/json":{"schema":{"type":"object","properties":{"i1":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"i2":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"price":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"length":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/t3":{"get":{"summary":"Triple Exponential Moving Average","description":"**T3** — Triple Exponential Moving Average (T3) applies exponential smoothing six times with a volume factor, producing an extremely smooth moving average with minimal lag.","operationId":"get_t3","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":5,"example":5}},{"name":"vFactor","in":"query","required":false,"description":"Volume Factor","schema":{"type":"number","format":"double","default":0.7,"example":0.7}}],"responses":{"200":{"description":"Triple Exponential Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/takuri":{"get":{"summary":"Takuri","description":"Takuri is a Japanese candlestick pattern similar to a Dragonfly Doji with an exceptionally long lower shadow, signaling a strong bullish reversal.","operationId":"get_takuri","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Takuri result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/tan":{"get":{"summary":"Tangent","description":"**TAN** — Tangent applies the tangent trigonometric function to each value in the input series.","operationId":"get_tan","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Tangent result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/tanh":{"get":{"summary":"Hyperbolic Tangent","description":"**TANH** — Hyperbolic Tangent applies the hyperbolic tangent function to each value in the input series.","operationId":"get_tanh","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Hyperbolic Tangent result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/tasukigap":{"get":{"summary":"Tasuki Gap","description":"**TASUKIGAP** — Tasuki Gap is a continuation pattern where a gap is followed by two candles, with the second partially filling the gap but failing to close it.","operationId":"get_tasukigap","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Tasuki Gap result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/tdlines":{"get":{"summary":"Tom DeMark Lines","description":"**TDLINES** — TD Lines are Tom DeMark's trend lines drawn from the most recent pivot points, providing objective trend line placement without subjective interpretation.","operationId":"get_tdlines","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Tom DeMark Lines result","content":{"application/json":{"schema":{"type":"object","properties":{"r3":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"r2":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"r1":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"pl":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"s1":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"s2":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"s3":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/tdsequential":{"get":{"summary":"TD Sequential","description":"**TDSEQUENTIAL** — TD Sequential is Tom DeMark's price exhaustion indicator that counts up to 9 consecutive closes in one direction to signal a potential trend reversal.","operationId":"get_tdsequential","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"TD Sequential result","content":{"application/json":{"schema":{"type":"object","properties":{"buySetupIndex":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"sellSetupIndex":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"buyCoundownIndex":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"sellCoundownIndex":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"countdownIndexIsEqualToPreviousElement":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"sellSetup":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"buySetup":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"sellSetupPerfection":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"buySetupPerfection":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"bearishFlip":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"bullishFlip":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"TDSTBuy":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"TDSTSell":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"countdownResetForTDST":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/tema":{"get":{"summary":"Triple Exponential Moving Average (TEMA)","description":"**TEMA** — Triple Exponential Moving Average reduces lag by combining a single, double, and triple EMA, making it more responsive than a standard EMA.","operationId":"get_tema","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Triple Exponential Moving Average (TEMA) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/thrusting":{"get":{"summary":"Thrusting Pattern","description":"**THRUSTING** — Thrusting Pattern is a bearish continuation pattern where a bearish candle is followed by a bullish candle that closes within the lower half of the prior candle.","operationId":"get_thrusting","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Thrusting Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/todeg":{"get":{"summary":"Radians to Degrees","description":"**TODEG** — Radians to Degrees converts each value in the input series from radians to degrees.","operationId":"get_todeg","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Radians to Degrees result","content":{"application/json":{"schema":{"type":"object","properties":{"degrees":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/torad":{"get":{"summary":"Degrees to Radians","description":"**TORAD** — Degrees to Radians converts each value in the input series from degrees to radians.","operationId":"get_torad","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Degrees to Radians result","content":{"application/json":{"schema":{"type":"object","properties":{"radians":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/trange":{"get":{"summary":"True Range","description":"**TRANGE** — True Range is the greatest of: current high minus current low, current high minus previous close, or current low minus previous close.","operationId":"get_trange","tags":["Volatility"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"True Range result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/trendlines":{"get":{"summary":"Trendlines","description":"Support and Resistance Sloping Trendlines","operationId":"get_trendlines","tags":["Market Structure"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"lookback","in":"query","required":false,"description":"lookback","schema":{"type":"integer","default":5,"example":5}},{"name":"lookforward","in":"query","required":false,"description":"lookforward","schema":{"type":"integer","default":5,"example":5}},{"name":"deviationATR","in":"query","required":false,"description":"deviationATR","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"deviationType","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"source","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"touches","in":"query","required":false,"description":"touches","schema":{"type":"integer","default":3,"example":3}},{"name":"max_atr_distance","in":"query","required":false,"description":"max_atr_distance","schema":{"type":"number","format":"double","default":0.5,"example":0.5}},{"name":"max_lines","in":"query","required":false,"description":"max_lines","schema":{"type":"integer","default":5,"example":5}}],"responses":{"200":{"description":"Trendlines result","content":{"application/json":{"schema":{"type":"object","properties":{"line_type":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"start_timestamp":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"end_timestamp":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"start_price":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"end_price":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"touches":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"slope":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"pattern_index":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/triangleascending":{"get":{"summary":"Ascending Triangle","description":"**TRIANGLEASCENDING** — Ascending Triangle is a bullish continuation pattern with a flat upper resistance line and a rising lower support line, typically resolving with an upside breakout.","operationId":"get_triangleascending","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"lookback","in":"query","required":false,"description":"Bars left for pivot detection.","schema":{"type":"integer","default":5,"example":5}},{"name":"lookforward","in":"query","required":false,"description":"Bars right for pivot detection.","schema":{"type":"integer","default":5,"example":5}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation.","schema":{"type":"integer","default":14,"example":14}},{"name":"touches","in":"query","required":false,"description":"Minimum number of high/low pairs required to form the pattern.","schema":{"type":"integer","default":2,"example":2}},{"name":"topToleranceATR","in":"query","required":false,"description":"Maximum allowed price difference between the top resistance touches, normalized by ATR.","schema":{"type":"number","format":"double","default":0.75,"example":0.75}},{"name":"minAscentATR","in":"query","required":false,"description":"Minimum required upward slope between the ascending bottom touches, normalized by ATR.","schema":{"type":"number","format":"double","default":0,"example":0}},{"name":"invalidationCloses","in":"query","required":false,"description":"Number of consecutive candle closes below the ascending support line to invalidate the pattern.","schema":{"type":"integer","default":2,"example":2}}],"responses":{"200":{"description":"Ascending Triangle result","content":{"application/json":{"schema":{"type":"object","properties":{"pattern_pivot_timestamps":{"description":"Array of all internal pivot timestamps making up the triangle structure.","type":"array","items":{"type":"integer"}},"pattern_pivot_prices":{"description":"Array of all internal pivot body-snapped prices making up the triangle structure.","type":"array","items":{"type":"number","format":"double"}},"support_left_timestamp":{"description":"Unix timestamp of the ascending support line start anchor (L1).","type":"array","items":{"type":"integer"}},"support_left_price":{"description":"Price level of the ascending support line start anchor (L1).","type":"array","items":{"type":"number","format":"double"}},"support_right_timestamp":{"description":"Timestamp denoting where the support line extends to on the right.","type":"array","items":{"type":"integer"}},"support_right_price":{"description":"The price level of the support line at the right endpoint.","type":"array","items":{"type":"number","format":"double"}},"resistance_level":{"description":"The price level of the horizontal flat top resistance.","type":"array","items":{"type":"number","format":"double"}},"resistance_right_timestamp":{"description":"Timestamp denoting where the resistance line extends to on the right.","type":"array","items":{"type":"integer"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke above the resistance.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Ascending Triangle pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"number","format":"double"}},"breakout_resistance_price":{"description":"The specific price of the resistance line at the exact moment of the breakout (same as resistance_level).","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical upside price target calculated by adding the pattern's initial height to the breakout resistance price.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bullish' for an Ascending Triangle.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/triangledescending":{"get":{"summary":"Descending Triangle","description":"**TRIANGLEDESCENDING** — Descending Triangle is a bearish continuation pattern with a flat lower support line and a declining upper resistance line, typically resolving with a downside breakdown.","operationId":"get_triangledescending","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"lookback","in":"query","required":false,"description":"Bars left for pivot detection.","schema":{"type":"integer","default":5,"example":5}},{"name":"lookforward","in":"query","required":false,"description":"Bars right for pivot detection.","schema":{"type":"integer","default":5,"example":5}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation.","schema":{"type":"integer","default":14,"example":14}},{"name":"touches","in":"query","required":false,"description":"Minimum number of high/low pairs required to form the pattern.","schema":{"type":"integer","default":2,"example":2}},{"name":"bottomToleranceATR","in":"query","required":false,"description":"Maximum allowed price difference between the bottom support touches, normalized by ATR.","schema":{"type":"number","format":"double","default":0.75,"example":0.75}},{"name":"minDescentATR","in":"query","required":false,"description":"Minimum required downward slope between the descending top touches, normalized by ATR.","schema":{"type":"number","format":"double","default":0,"example":0}},{"name":"invalidationCloses","in":"query","required":false,"description":"Number of consecutive candle closes above the descending resistance line to invalidate the pattern.","schema":{"type":"integer","default":2,"example":2}}],"responses":{"200":{"description":"Descending Triangle result","content":{"application/json":{"schema":{"type":"object","properties":{"pattern_pivot_timestamps":{"description":"Array of all internal pivot timestamps making up the triangle structure.","type":"array","items":{"type":"integer"}},"pattern_pivot_prices":{"description":"Array of all internal pivot body-snapped prices making up the triangle structure.","type":"array","items":{"type":"number","format":"double"}},"support_level":{"description":"The price level of the horizontal flat bottom support.","type":"array","items":{"type":"number","format":"double"}},"support_right_timestamp":{"description":"Timestamp denoting where the support line extends to on the right.","type":"array","items":{"type":"integer"}},"resistance_left_timestamp":{"description":"Unix timestamp of the descending resistance line start anchor (H1).","type":"array","items":{"type":"integer"}},"resistance_left_price":{"description":"Price level of the descending resistance line start anchor (H1).","type":"array","items":{"type":"number","format":"double"}},"resistance_right_timestamp":{"description":"Timestamp denoting where the resistance line extends to on the right.","type":"array","items":{"type":"integer"}},"resistance_right_price":{"description":"The price level of the resistance line at the right endpoint.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke below the support.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Descending Triangle pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"number","format":"double"}},"breakout_support_price":{"description":"The specific price of the support line at the exact moment of the breakout (same as support_level).","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical downside price target calculated by subtracting the pattern's initial height from the breakout support price.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bearish' for a Descending Triangle.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/trianglesymmetricalbearish":{"get":{"summary":"Triangle Symmetrical Bearish","description":"**TRIANGLESYMMETRICALBEARISH** — Triangle Symmetrical Bearish Pattern","operationId":"get_trianglesymmetricalbearish","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"lookback","in":"query","required":false,"description":"Bars left for pivot detection.","schema":{"type":"integer","default":5,"example":5}},{"name":"lookforward","in":"query","required":false,"description":"Bars right for pivot detection.","schema":{"type":"integer","default":5,"example":5}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation.","schema":{"type":"integer","default":14,"example":14}},{"name":"touches","in":"query","required":false,"description":"Minimum number of high/low pairs required to form the pattern.","schema":{"type":"integer","default":3,"example":3}},{"name":"minDescentATR","in":"query","required":false,"description":"Minimum required downward slope between the descending top touches, normalized by ATR.","schema":{"type":"number","format":"double","default":0,"example":0}},{"name":"minAscentATR","in":"query","required":false,"description":"Minimum required upward slope between the ascending bottom touches, normalized by ATR.","schema":{"type":"number","format":"double","default":0,"example":0}}],"responses":{"200":{"description":"Triangle Symmetrical Bearish result","content":{"application/json":{"schema":{"type":"object","properties":{"pattern_pivot_timestamps":{"description":"Array of all internal pivot timestamps making up the triangle structure.","type":"array","items":{"type":"integer"}},"pattern_pivot_prices":{"description":"Array of all internal pivot body-snapped prices making up the triangle structure.","type":"array","items":{"type":"number","format":"double"}},"support_left_timestamp":{"description":"Unix timestamp of the ascending support line start anchor (L1).","type":"array","items":{"type":"integer"}},"support_left_price":{"description":"Price level of the ascending support line start anchor (L1).","type":"array","items":{"type":"number","format":"double"}},"support_right_timestamp":{"description":"Timestamp denoting where the support line extends to on the right.","type":"array","items":{"type":"integer"}},"support_right_price":{"description":"The price level of the support line at the right endpoint.","type":"array","items":{"type":"number","format":"double"}},"resistance_left_timestamp":{"description":"Unix timestamp of the descending resistance line start anchor (H1).","type":"array","items":{"type":"integer"}},"resistance_left_price":{"description":"Price level of the descending resistance line start anchor (H1).","type":"array","items":{"type":"number","format":"double"}},"resistance_right_timestamp":{"description":"Timestamp denoting where the resistance line extends to on the right.","type":"array","items":{"type":"integer"}},"resistance_right_price":{"description":"The price level of the resistance line at the right endpoint.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke below the support.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Symmetrical Triangle Bearish pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical downside price target calculated by subtracting the pattern's initial height from the breakout price.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bearish' for a Symmetrical Triangle Bearish.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/trianglesymmetricalbullish":{"get":{"summary":"Triangle Symmetrical Bullish","description":"**TRIANGLESYMMETRICALBULLISH** — Triangle Symmetrical Bullish Pattern","operationId":"get_trianglesymmetricalbullish","tags":["Pattern Recognition - Advanced"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"lookback","in":"query","required":false,"description":"Bars left for pivot detection.","schema":{"type":"integer","default":5,"example":5}},{"name":"lookforward","in":"query","required":false,"description":"Bars right for pivot detection.","schema":{"type":"integer","default":5,"example":5}},{"name":"deviationATR","in":"query","required":false,"description":"Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.","schema":{"type":"number","format":"double","default":1,"example":1}},{"name":"deviationType","in":"query","required":false,"description":"Type of deviation filter to use: 'atr' (Average True Range) or 'percent'.","schema":{"type":"string","default":"atr","example":"atr"}},{"name":"source","in":"query","required":false,"description":"Whether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.","schema":{"type":"string","default":"wick","example":"wick"}},{"name":"heikinashi","in":"query","required":false,"description":"Set to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.","schema":{"type":"boolean","default":true,"example":true}},{"name":"atrPeriod","in":"query","required":false,"description":"The lookback period used for the Average True Range (ATR) calculation.","schema":{"type":"integer","default":14,"example":14}},{"name":"touches","in":"query","required":false,"description":"Minimum number of high/low pairs required to form the pattern.","schema":{"type":"integer","default":3,"example":3}},{"name":"minDescentATR","in":"query","required":false,"description":"Minimum required downward slope between the descending top touches, normalized by ATR.","schema":{"type":"number","format":"double","default":0,"example":0}},{"name":"minAscentATR","in":"query","required":false,"description":"Minimum required upward slope between the ascending bottom touches, normalized by ATR.","schema":{"type":"number","format":"double","default":0,"example":0}}],"responses":{"200":{"description":"Triangle Symmetrical Bullish result","content":{"application/json":{"schema":{"type":"object","properties":{"pattern_pivot_timestamps":{"description":"Array of all internal pivot timestamps making up the triangle structure.","type":"array","items":{"type":"integer"}},"pattern_pivot_prices":{"description":"Array of all internal pivot body-snapped prices making up the triangle structure.","type":"array","items":{"type":"number","format":"double"}},"support_left_timestamp":{"description":"Unix timestamp of the ascending support line start anchor (L1).","type":"array","items":{"type":"integer"}},"support_left_price":{"description":"Price level of the ascending support line start anchor (L1).","type":"array","items":{"type":"number","format":"double"}},"support_right_timestamp":{"description":"Timestamp denoting where the support line extends to on the right.","type":"array","items":{"type":"integer"}},"support_right_price":{"description":"The price level of the support line at the right endpoint.","type":"array","items":{"type":"number","format":"double"}},"resistance_left_timestamp":{"description":"Unix timestamp of the descending resistance line start anchor (H1).","type":"array","items":{"type":"integer"}},"resistance_left_price":{"description":"Price level of the descending resistance line start anchor (H1).","type":"array","items":{"type":"number","format":"double"}},"resistance_right_timestamp":{"description":"Timestamp denoting where the resistance line extends to on the right.","type":"array","items":{"type":"integer"}},"resistance_right_price":{"description":"The price level of the resistance line at the right endpoint.","type":"array","items":{"type":"number","format":"double"}},"breakout_occurred":{"description":"Boolean flag (true/false) indicating if price successfully broke above the resistance.","type":"array","items":{"type":"boolean"}},"is_confirmed":{"description":"Explicit boolean flag (true/false) indicating if the Symmetrical Triangle Bullish pattern is fully confirmed (synonymous with breakout_occurred).","type":"array","items":{"type":"boolean"}},"breakout_timestamp":{"description":"Unix timestamp of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"integer"}},"breakout_price":{"description":"The closing price of the candle that triggered the confirmation breakout.","type":"array","items":{"type":"number","format":"double"}},"projection_price":{"description":"The theoretical upside price target calculated by adding the pattern's initial height to the breakout price.","type":"array","items":{"type":"number","format":"double"}},"direction":{"description":"The inherent bias of the pattern. Always 'bullish' for a Symmetrical Triangle Bullish.","type":"array","items":{"type":"string"}},"status":{"description":"The current state of the pattern: 'forming', 'confirmed', or 'invalidated'.","type":"array","items":{"type":"string"}},"status_reason":{"description":"Context detailing why the pattern holds its current status (e.g. 'awaiting_breakout').","type":"array","items":{"type":"string"}},"pattern_index":{"description":"A sequential integer index uniquely identifying this specific pattern instance.","type":"array","items":{"type":"integer"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/trima":{"get":{"summary":"Triangular Moving Average","description":"**TRIMA** — Triangular Moving Average is a double-smoothed SMA that gives more weight to the middle of the data series, producing a very smooth trend line.","operationId":"get_trima","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Triangular Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/tristar":{"get":{"summary":"Tristar Pattern","description":"**TRISTAR** — Tristar is a three-candle reversal pattern consisting of three consecutive Doji candles, signaling a major turning point.","operationId":"get_tristar","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Tristar Pattern result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/trix":{"get":{"summary":"Triple Smooth EMA Rate of Change","description":"**TRIX** — TRIX is a momentum oscillator that shows the percentage rate of change of a triple-smoothed EMA, filtering out short-term price fluctuations.","operationId":"get_trix","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Triple Smooth EMA Rate of Change result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/trunc":{"get":{"summary":"Truncate","description":"**TRUNC** — Truncate removes the decimal portion of each value in the input series, returning the integer part.","operationId":"get_trunc","tags":["Math"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Truncate result","content":{"application/json":{"schema":{"type":"object","properties":{"trunc":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/tsf":{"get":{"summary":"Time Series Forecast","description":"**TSF** — Time Series Forecast projects the next value of a linear regression line, providing a forward-looking estimate of price based on recent trend.","operationId":"get_tsf","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Time Series Forecast result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/typprice":{"get":{"summary":"Typical Price","description":"**TYPPRICE** — Typical Price returns the average of the high, low, and close: (high + low + close) / 3.","operationId":"get_typprice","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Typical Price result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/ultosc":{"get":{"summary":"Ultimate Oscillator","description":"**ULTOSC** — Ultimate Oscillator combines short, medium, and long-term price action into a single oscillator, reducing false divergence signals common in single-period oscillators.","operationId":"get_ultosc","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"timePeriod1","in":"query","required":false,"description":"First Period","schema":{"type":"integer","default":7,"example":7}},{"name":"timePeriod2","in":"query","required":false,"description":"Second Period","schema":{"type":"integer","default":14,"example":14}},{"name":"timePeriod3","in":"query","required":false,"description":"Third Period","schema":{"type":"integer","default":28,"example":28}}],"responses":{"200":{"description":"Ultimate Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/unique3river":{"get":{"summary":"Unique Three River","description":"**UNIQUE3RIVER** — Unique Three River is a bullish reversal pattern of three candles: a long bearish candle, a small bearish hammer, and a small bullish candle.","operationId":"get_unique3river","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Unique Three River result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/upsidegap2crows":{"get":{"summary":"Upside Gap Two Crows","description":"**UPSIDEGAP2CROWS** — Upside Gap Two Crows is a bearish reversal pattern where a bullish candle gaps up, followed by two bearish candles that fill the gap.","operationId":"get_upsidegap2crows","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Upside Gap Two Crows result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/var":{"get":{"summary":"Variance","description":"**VAR** — Variance measures the squared deviation of price from its mean, providing a statistical measure of price dispersion.","operationId":"get_var","tags":["Statistics"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":5,"example":5}},{"name":"nbDev","in":"query","required":false,"description":"Deviations","schema":{"type":"number","format":"double","default":1,"example":1}}],"responses":{"200":{"description":"Variance result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/vhf":{"get":{"summary":"Vertical Horizontal Filter","description":"**VHF** — Vertical Horizontal Filter measures whether the market is trending or ranging by comparing the range of prices to the total price movement over a period.","operationId":"get_vhf","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Vertical Horizontal Filter result","content":{"application/json":{"schema":{"type":"object","properties":{"vhf":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/vidya":{"get":{"summary":"Variable Index Dynamic Average","description":"**VIDYA** — Variable Index Dynamic Average adapts its smoothing factor based on the Chande Momentum Oscillator, moving faster in trending markets and slower in ranging ones.","operationId":"get_vidya","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"short_period","in":"query","required":false,"description":"short period","schema":{"type":"number","format":"double"}},{"name":"long_period","in":"query","required":false,"description":"long period","schema":{"type":"number","format":"double"}},{"name":"alpha","in":"query","required":false,"description":"alpha","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Variable Index Dynamic Average result","content":{"application/json":{"schema":{"type":"object","properties":{"vidya":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/volatility":{"get":{"summary":"Volatility","description":"Volatility measures the standard deviation of logarithmic returns over a period, providing a statistical measure of price variability.","operationId":"get_volatility","tags":["Volatility"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Volatility result","content":{"application/json":{"schema":{"type":"object","properties":{"volatility":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/volume":{"get":{"summary":"Volume","description":"Returns the trading volume for the specified symbol, exchange, and timeframe.","operationId":"get_volume","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Volume result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/volumeprofile":{"get":{"summary":"Volume Profile","description":"**VOLUMEPROFILE** — Volume Profile displays the distribution of traded volume across price levels over a period, revealing high-volume nodes that act as key support and resistance.","operationId":"get_volumeprofile","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":7,"example":7}}],"responses":{"200":{"description":"Volume Profile result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/volumesplit":{"get":{"summary":"Volume Split","description":"**VOLUMESPLIT** — Returns volume data split into buy and sell volume, providing insight into the directional pressure behind trading activity.","operationId":"get_volumesplit","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Volume Split result","content":{"application/json":{"schema":{"type":"object","properties":{"valueTotal":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueBuy":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueSell":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"percentBuy":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"percentSell":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/vortex":{"get":{"summary":"Vortex Indicator","description":"**VORTEX** — Vortex Indicator consists of two lines (+VI and -VI) that capture positive and negative trend movement. A crossover signals a potential trend change.","operationId":"get_vortex","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Vortex Indicator result","content":{"application/json":{"schema":{"type":"object","properties":{"plus":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"minus":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/vosc":{"get":{"summary":"Volume Oscillator","description":"**VOSC** — Volume Oscillator shows the difference between two volume moving averages, helping identify whether volume is confirming or diverging from price trends.","operationId":"get_vosc","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"short_period","in":"query","required":false,"description":"short_period","schema":{"type":"integer","default":5,"example":5}},{"name":"long_period","in":"query","required":false,"description":"long_period","schema":{"type":"integer","default":10,"example":10}}],"responses":{"200":{"description":"Volume Oscillator result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/vwap":{"get":{"summary":"Volume Weighted Average Price","description":"**VWAP** — Volume Weighted Average Price calculates the average price weighted by volume, widely used as a benchmark to assess whether a security is trading at a fair price.","operationId":"get_vwap","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"anchorPeriod","in":"query","required":false,"description":"anchorPeriod","schema":{"type":"string","default":"null","example":"null"}}],"responses":{"200":{"description":"Volume Weighted Average Price result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/vwma":{"get":{"summary":"Volume Weighted Moving Average","description":"**VWMA** — Volume Weighted Moving Average weights each price by its corresponding volume, giving more influence to prices traded with higher volume.","operationId":"get_vwma","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Volume Weighted Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"vwma":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/wad":{"get":{"summary":"Williams Accumulation/Distribution","description":"**WAD** — Williams Accumulation/Distribution measures buying and selling pressure by comparing the close to the prior close and the current trading range.","operationId":"get_wad","tags":["Volume"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Williams Accumulation/Distribution result","content":{"application/json":{"schema":{"type":"object","properties":{"wad":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/wclprice":{"get":{"summary":"Weighted Close Price","description":"**WCLPRICE** — Weighted Close Price gives extra weight to the closing price: (high + low + close × 2) / 4.","operationId":"get_wclprice","tags":["Market Data"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Weighted Close Price result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/wilders":{"get":{"summary":"Wilder's Smoothing","description":"**WILDERS** — Wilder's Smoothing is a specific exponential smoothing method developed by J. Welles Wilder, used as the basis for RSI, ATR, and the Directional Movement system.","operationId":"get_wilders","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Wilder's Smoothing result","content":{"application/json":{"schema":{"type":"object","properties":{"wilders":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/williamsalligator":{"get":{"summary":"Williams Alligator","description":"**WILLIAMSALLIGATOR** — Williams Alligator uses three smoothed moving averages (Jaw, Teeth, Lips) to identify trending and non-trending periods, signaling when to enter and exit trades.","operationId":"get_williamsalligator","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"jawsLength","in":"query","required":false,"description":"jawsLength","schema":{"type":"integer","default":13,"example":13}},{"name":"teethLength","in":"query","required":false,"description":"teethLength","schema":{"type":"integer","default":8,"example":8}},{"name":"lipsLength","in":"query","required":false,"description":"lipsLength","schema":{"type":"integer","default":5,"example":5}},{"name":"jawsOffset","in":"query","required":false,"description":"jawsOffset","schema":{"type":"integer","default":8,"example":8}},{"name":"teethOffset","in":"query","required":false,"description":"teethOffset","schema":{"type":"integer","default":5,"example":5}},{"name":"lipsOffset","in":"query","required":false,"description":"lipsOffset","schema":{"type":"integer","default":3,"example":3}}],"responses":{"200":{"description":"Williams Alligator result","content":{"application/json":{"schema":{"type":"object","properties":{"valueJaws":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueTeeth":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"valueLips":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/willr":{"get":{"summary":"Williams %R","description":"**WILLR** — Williams %R measures overbought and oversold levels by comparing the closing price to the high-low range over a period. Values near -100 are oversold; near 0 are overbought.","operationId":"get_willr","tags":["Momentum"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":14,"example":14}}],"responses":{"200":{"description":"Williams %R result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/wma":{"get":{"summary":"Weighted Moving Average (WMA)","description":"**WMA** — Weighted Moving Average assigns linearly increasing weights to more recent prices, making it more responsive than a SMA but smoother than an EMA.","operationId":"get_wma","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"Time Period","schema":{"type":"integer","default":30,"example":30}}],"responses":{"200":{"description":"Weighted Moving Average (WMA) result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/xsidegap3methods":{"get":{"summary":"Upside/Downside Gap Three Methods","description":"**XSIDEGAP3METHODS** — Upside/Downside Gap Three Methods is a continuation pattern where a gap is followed by three small counter-trend candles that stay within the gap.","operationId":"get_xsidegap3methods","tags":["Pattern Recognition - Simple"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"}],"responses":{"200":{"description":"Upside/Downside Gap Three Methods result","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/zigzag":{"get":{"summary":"ZigZag","description":"ZigZag filters out minor price fluctuations and draws lines connecting significant highs and lows, helping identify major support/resistance levels and chart patterns.","operationId":"get_zigzag","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"deviation","in":"query","required":false,"description":"deviation","schema":{"type":"integer","default":5,"example":5}}],"responses":{"200":{"description":"ZigZag result","content":{"application/json":{"schema":{"type":"object","properties":{"values":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/zlema":{"get":{"summary":"Zero-Lag Exponential Moving Average","description":"**ZLEMA** — Zero-Lag Exponential Moving Average eliminates the inherent lag of a standard EMA by adjusting for the difference between the current and prior EMA values.","operationId":"get_zlema","tags":["Trend"],"parameters":[{"$ref":"#/components/parameters/exchange"},{"$ref":"#/components/parameters/symbol"},{"$ref":"#/components/parameters/timeframe"},{"$ref":"#/components/parameters/results"},{"$ref":"#/components/parameters/backtrack"},{"name":"period","in":"query","required":false,"description":"period","schema":{"type":"number","format":"double"}}],"responses":{"200":{"description":"Zero-Lag Exponential Moving Average result","content":{"application/json":{"schema":{"type":"object","properties":{"zlema":{"description":"Indicator output values — always an array, even when results=1.","type":"array","items":{"type":"number","format":"double"}},"timestamp":{"description":"Unix timestamps aligned to each result value — always an array.","type":"array","items":{"type":"integer"}}}}}}},"202":{"description":"Calculation queued — retry after a short delay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingResponse"}}}},"400":{"description":"Missing or invalid query parameters — ensure ex, sym, and tf are all provided and valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Missing required: ex, sym, tf"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided as a Bearer token in the Authorization header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid or missing API key."}}}}}},"404":{"description":"Unknown indicator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded — your plan allows a limited number of requests per time window (e.g. 30 requests per 15 seconds). Slow down and retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Rate limit exceeded. Your plan allows 30 requests per 15 seconds."}}}}}}}}},"/indicator/{indicator}":{"post":{"tags":["Manual Candles"],"summary":"Single indicator — manual candles","description":"Calculate a single indicator from a user-supplied candle array.\n\nUse this endpoint when you have candles from your own data source and want TAAPI to compute indicator values from them — **no exchange, symbol, or timeframe required**.\n\n- Supports both long-form (`open/high/low/close/volume/timestamp`) and short-form (`o/h/l/c/v/t`) candle objects.\n- Maximum **500 candles** per request.\n- Results are **never cached** — each request is computed fresh.\n- All indicator parameters (e.g. `period`, `source`) are passed in the request body alongside the candles, exactly as they would be in a query string on the standard `GET /indicator/:ind` endpoint.\n- For reduced request payload size, the short-form notation (`o`, `h`, `l`, `c`, `v`, `t`) is recommended over the full field names (`open`, `high`, `low`, `close`, `volume`, `timestamp`). Both are functionally equivalent.","operationId":"postIndicatorManualCandles","security":[{"BearerAuth":[]}],"parameters":[{"name":"indicator","in":"path","required":true,"description":"Indicator name (e.g. `rsi`, `ema`, `macd`).","schema":{"type":"string","example":"rsi"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["candles"],"properties":{"candles":{"type":"array","description":"Array of OHLCV candles. Maximum 500 candles per request. Both long-form and short-form field names are supported.","maxItems":500,"minItems":1,"items":{"type":"object","description":"A single OHLCV candle. Both long-form (`open/high/low/close/volume/timestamp`) and short-form (`o/h/l/c/v/t`) field names are accepted.","properties":{"timestamp":{"type":"number","description":"Unix timestamp in seconds (optional)."},"t":{"type":"number","description":"Unix timestamp — short-form alias for `timestamp`."},"open":{"type":"number"},"o":{"type":"number","description":"Short-form alias for `open`."},"high":{"type":"number"},"h":{"type":"number","description":"Short-form alias for `high`."},"low":{"type":"number"},"l":{"type":"number","description":"Short-form alias for `low`."},"close":{"type":"number"},"c":{"type":"number","description":"Short-form alias for `close`."},"volume":{"type":"number","default":0},"v":{"type":"number","description":"Short-form alias for `volume`."}},"oneOf":[{"required":["open","high","low","close"]},{"required":["o","h","l","c"]}],"example":{"t":1708300800,"o":51200.5,"h":52100,"l":50900.25,"c":51850.75,"v":1234.56}}},"results":{"type":"integer","default":1,"description":"Number of result values to return (most recent first).","example":1},"backtrack":{"type":"integer","default":0,"description":"Number of closed candles to skip from the end before calculating.","example":0}},"additionalProperties":{"description":"Any additional indicator-specific parameters (e.g. `period`, `source`, `fastPeriod`). These are identical to the query-string params accepted by `GET /indicator/:ind`."}},"examples":{"rsi":{"summary":"RSI with period 14","value":{"candles":[{"t":1708300800,"o":51200.5,"h":52100,"l":50900.25,"c":51850.75,"v":1234.56},{"t":1708304400,"o":51850.75,"h":52500,"l":51700,"c":52200,"v":987.32},{"t":1708308000,"o":52200,"h":52800,"l":51900,"c":52600,"v":1100.12}],"period":14,"results":1}},"emaShortForm":{"summary":"EMA using short-form candle fields","value":{"candles":[{"t":1708300800,"o":51200.5,"h":52100,"l":50900.25,"c":51850.75,"v":1234.56}],"period":20,"results":1}}}}}},"responses":{"200":{"description":"Indicator value(s) computed from the supplied candles.","content":{"application/json":{"schema":{"type":"object","description":"Indicator result. Shape matches the standard `GET /indicator/:ind` response.","properties":{"value":{"type":"array","items":{"type":"number"}},"timestamp":{"type":"array","items":{"type":"number"}}},"additionalProperties":true},"examples":{"rsi":{"summary":"RSI result","value":{"value":[58.4],"timestamp":[1708308000]}},"macd":{"summary":"MACD result (multi-value)","value":{"valueMACD":[120.5],"valueMACDSignal":[115.2],"valueMACDHist":[5.3],"timestamp":[1708308000]}}}}}},"400":{"description":"Validation error — missing candles, invalid candle format, или unknown indicator.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"examples":{"missingCandles":{"summary":"No candles supplied","value":{"error":"\"candles\" must be a non-empty array"}},"tooMany":{"summary":"Over 500 candles","value":{"error":"\"candles\" exceeds maximum of 500 candles (got 501)"}},"badField":{"summary":"Non-numeric OHLC","value":{"error":"candles[0].open must be a finite number"}},"unknownIndicator":{"summary":"Unknown indicator","value":{"error":"Unknown indicator: fakeindicator"}}}}}},"401":{"description":"Unauthorized — a valid API key must be provided.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/bulk-candles":{"post":{"tags":["Manual Candles"],"summary":"Bulk — manual candles","description":"Calculate multiple indicators across one or more constructs, each with its own user-supplied candle array.\n\nUse this endpoint when you have candles from your own data source. Unlike `POST /bulk`, there is **no exchange, symbol, or timeframe** — each construct carries its own `candles` array instead.\n\n- Maximum **500 candles** per construct.\n- Maximum constructs per request is plan-dependent (hard cap: 20).\n- Both long-form and short-form candle field names are supported.\n- Results are **never cached** — each request is freshly computed.\n- For reduced request payload size, the short-form notation (`o`, `h`, `l`, `c`, `v`, `t`) is recommended over the full field names (`open`, `high`, `low`, `close`, `volume`, `timestamp`). Both are functionally equivalent.","operationId":"postBulkManualCandles","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["constructs"],"properties":{"verbose":{"type":"boolean","default":false,"description":"When `true`, each indicator result is wrapped in a metadata envelope (`indicator`, `params`, `result`, `errors`)."},"constructs":{"type":"array","minItems":1,"maxItems":20,"description":"Array of constructs. Each construct has its own candle array and a set of indicators to compute.","items":{"type":"object","required":["id","candles","indicators"],"properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_]+$","description":"Unique identifier for this construct. Used as the key in the response object. Only alphanumeric characters and underscores are allowed.","example":"my_btc"},"candles":{"type":"array","description":"Array of OHLCV candles. Maximum 500 candles per request. Both long-form and short-form field names are supported.","maxItems":500,"minItems":1,"items":{"type":"object","description":"A single OHLCV candle. Both long-form (`open/high/low/close/volume/timestamp`) and short-form (`o/h/l/c/v/t`) field names are accepted.","properties":{"timestamp":{"type":"number","description":"Unix timestamp in seconds (optional)."},"t":{"type":"number","description":"Unix timestamp — short-form alias for `timestamp`."},"open":{"type":"number"},"o":{"type":"number","description":"Short-form alias for `open`."},"high":{"type":"number"},"h":{"type":"number","description":"Short-form alias for `high`."},"low":{"type":"number"},"l":{"type":"number","description":"Short-form alias for `low`."},"close":{"type":"number"},"c":{"type":"number","description":"Short-form alias for `close`."},"volume":{"type":"number","default":0},"v":{"type":"number","description":"Short-form alias for `volume`."}},"oneOf":[{"required":["open","high","low","close"]},{"required":["o","h","l","c"]}],"example":{"t":1708300800,"o":51200.5,"h":52100,"l":50900.25,"c":51850.75,"v":1234.56}}},"indicators":{"type":"array","minItems":1,"description":"List of indicators to compute against this construct's candles.","items":{"type":"object","required":["id","indicator"],"properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_]+$","description":"Unique identifier for this indicator within the construct.","example":"rsi_14"},"indicator":{"type":"string","description":"Indicator name (e.g. `rsi`, `ema`, `macd`).","example":"rsi"},"results":{"type":"integer","default":1,"description":"Number of result values to return."},"backtrack":{"type":"integer","default":0,"description":"Candles to skip from the end before calculating."}},"additionalProperties":{"description":"Any additional indicator-specific parameters (e.g. `period`, `source`)."}}}}}}}},"examples":{"singleConstruct":{"summary":"One construct, two indicators","value":{"constructs":[{"id":"my_btc","candles":[{"t":1708300800,"o":51200.5,"h":52100,"l":50900.25,"c":51850.75,"v":1234.56},{"t":1708304400,"o":51850.75,"h":52500,"l":51700,"c":52200,"v":987.32}],"indicators":[{"id":"rsi_14","indicator":"rsi","period":14,"results":1},{"id":"ema_20","indicator":"ema","period":20,"results":1}]}]}},"multiConstruct":{"summary":"Two constructs with different candle sets","value":{"constructs":[{"id":"btc_data","candles":[{"t":1708300800,"o":51200.5,"h":52100,"l":50900.25,"c":51850.75,"v":1234.56}],"indicators":[{"id":"rsi","indicator":"rsi","period":14}]},{"id":"eth_data","candles":[{"t":1708300800,"o":2800,"h":2900,"l":2750,"c":2850,"v":5000}],"indicators":[{"id":"ema","indicator":"ema","period":20}]}]}},"verbose":{"summary":"Verbose output","value":{"verbose":true,"constructs":[{"id":"my_btc","candles":[{"t":1708300800,"o":51200.5,"h":52100,"l":50900.25,"c":51850.75,"v":1234.56}],"indicators":[{"id":"rsi_14","indicator":"rsi","period":14}]}]}}}}}},"responses":{"200":{"description":"Indicator results keyed by construct id.","content":{"application/json":{"schema":{"type":"object","description":"Response object keyed by construct `id`. Each value is an object keyed by indicator `id`.","additionalProperties":{"type":"object","additionalProperties":true}},"examples":{"default":{"summary":"Standard output (verbose: false)","value":{"my_btc":{"rsi_14":{"value":[58.4],"timestamp":[1708308000]},"ema_20":{"value":[51600.3],"timestamp":[1708308000]}}}},"verbose":{"summary":"Verbose output (verbose: true)","value":{"my_btc":{"rsi_14":{"indicator":"rsi","params":{"period":14},"result":{"value":[58.4],"timestamp":[1708308000]},"errors":[]}}}}}}}},"400":{"description":"Validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"examples":{"missingCandles":{"summary":"Missing candles","value":{"error":"Construct \"my_btc\" candles error: \"candles\" must be a non-empty array"}},"tooMany":{"summary":"Too many candles","value":{"error":"Construct \"my_btc\" candles error: \"candles\" exceeds maximum of 500 candles (got 501)"}},"unknownIndicator":{"summary":"Unknown indicator","value":{"error":"Construct \"my_btc\" references unknown indicator: fakeindicator"}},"duplicateId":{"summary":"Duplicate construct id","value":{"error":"Duplicate construct id \"my_btc\". Construct ids must be unique within the request."}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Plan construct limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"example":{"error":"Too many constructs. Your plan allows 1 construct(s) per bulk-candles request."}}}}}}}}}