{"openapi":"3.1.0","info":{"title":"InvestDX Data API","description":"Read-only API keys. Money is serialized as strings. Daily: closed WIB dates. Hourly: settled bars through today; forming bars excluded, five-minute settlement delay. 2h/4h are complete, session-anchored 1h aggregates; short sessions are labeled. Daily is never derived from hourly. Technical snapshots use 200 observed bars. Volume is expressed in shares. Request up to 366 calendar days per call.","version":"1.0.0"},"paths":{"/v1/symbols":{"get":{"tags":["Symbols"],"summary":"Symbols","operationId":"symbols_v1_symbols_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Symbols V1 Symbols Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/candles/{symbol}":{"get":{"tags":["Candles"],"summary":"Candles","operationId":"candles_v1_candles__symbol__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Z]{4}$","title":"Symbol"}},{"name":"interval","in":"query","required":false,"schema":{"enum":["1d","1h","2h","4h"],"type":"string","default":"1d","title":"Interval"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Cursor"}},{"name":"indicators","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":256},{"type":"null"}],"description":"all or comma-separated: change_pct, vol_sma_5, vol_sma_20, sma_5, sma_8, sma_21, sma_60, sma_100, sma_200, sma_400, sma_800, rsi_14, atr_14, macd, macd_signal, macd_histogram, stoch_k, stoch_d","title":"Indicators"},"description":"all or comma-separated: change_pct, vol_sma_5, vol_sma_20, sma_5, sma_8, sma_21, sma_60, sma_100, sma_200, sma_400, sma_800, rsi_14, atr_14, macd, macd_signal, macd_histogram, stoch_k, stoch_d"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandlePage"}}}},"401":{"description":"Missing or invalid API key"},"429":{"description":"Shared account RPS or key quota exceeded"},"503":{"description":"Publication on hold or data unavailable"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/technicals/{symbol}":{"get":{"tags":["Technicals"],"summary":"Technicals","operationId":"technicals_v1_technicals__symbol__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Z]{4}$","title":"Symbol"}},{"name":"interval","in":"query","required":false,"schema":{"enum":["1d","1h","2h","4h"],"type":"string","default":"1d","title":"Interval"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Technicals V1 Technicals  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/screener":{"get":{"tags":["Screener"],"summary":"Screener","operationId":"screener_v1_screener_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"interval","in":"query","required":false,"schema":{"enum":["1d","1h","2h","4h"],"type":"string","default":"1d","title":"Interval"}},{"name":"signal","in":"query","required":false,"schema":{"enum":["all","rsi_oversold","rsi_overbought","macd_bullish_cross","macd_bearish_cross","stoch_bullish_cross","stoch_bearish_cross"],"type":"string","default":"all","title":"Signal"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"default":25,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Screener V1 Screener Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Screener"],"summary":"Dynamic Screener","description":"Filter the full selected universe, sort globally, paginate matches.\n\nOnly ready inputs match. Later pages repeat the definition plus cursor/scan_id;\n409 means expired results, 429 means another scan is running. Cold scans have\na three-minute deadline. Prices and thresholds are Decimal strings, not floats.","operationId":"dynamic_screener_v1_screener_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenResponse"}}}},"409":{"description":"Results expired, evicted or universe changed; rerun from cursor 0"},"413":{"description":"Request body exceeds 32 KiB"},"429":{"description":"Another scan is running, account RPS exceeded, or key quota exceeded"},"503":{"description":"Publication held, data unavailable, or three-minute scan deadline exceeded"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/coverage":{"get":{"tags":["Coverage"],"summary":"Coverage","operationId":"coverage_v1_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Coverage V1 Coverage Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/research/{symbol}":{"post":{"tags":["Research"],"summary":"Research","description":"Configurable Decimal values and observed chart bars; same seed as POST screening.","operationId":"research_v1_research__symbol__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Z]{4}$","title":"Symbol"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenDefinition-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Candle":{"properties":{"symbol":{"type":"string","title":"Symbol"},"time":{"type":"string","format":"date-time","title":"Time"},"open":{"type":"string","title":"Open"},"high":{"type":"string","title":"High"},"low":{"type":"string","title":"Low"},"close":{"type":"string","title":"Close"},"volume":{"type":"integer","title":"Volume"},"value":{"type":"string","title":"Value"},"source_bars":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Bars"},"short_session":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Short Session"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time"},"indicators":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"},{"type":"null"}],"title":"Indicators"}},"type":"object","required":["symbol","time","open","high","low","close","volume","value"],"title":"Candle"},"CandlePage":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Candle"},"type":"array","title":"Data"},"symbol":{"type":"string","title":"Symbol"},"interval":{"type":"string","enum":["1d","1h","2h","4h"],"title":"Interval"},"timezone":{"type":"string","title":"Timezone"},"volume_unit":{"type":"string","title":"Volume Unit"},"price_currency":{"type":"string","title":"Price Currency"},"finality":{"type":"string","title":"Finality"},"closed_before":{"type":"string","format":"date-time","title":"Closed Before"},"as_of":{"type":"string","format":"date-time","title":"As Of"},"derived_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Derived From"},"bucket_policy":{"type":"string","title":"Bucket Policy"},"missing_buckets":{"type":"integer","title":"Missing Buckets"},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Cursor"},"note":{"type":"string","title":"Note"},"indicator_calculation":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Indicator Calculation"}},"type":"object","required":["data","symbol","interval","timezone","volume_unit","price_currency","finality","closed_before","as_of","derived_from","bucket_policy","missing_buckets","next_cursor","note"],"title":"CandlePage"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IndicatorParameters":{"properties":{"source":{"type":"string","enum":["open","high","low","close","hl2","hlc3","ohlc4"],"title":"Source","default":"close"},"rsi":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Rsi","default":14},"atr":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Atr","default":14},"macd_fast":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Macd Fast","default":12},"macd_slow":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Macd Slow","default":26},"macd_signal":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Macd Signal","default":9},"stoch_period":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Stoch Period","default":14},"stoch_k":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Stoch K","default":3},"stoch_d":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Stoch D","default":3}},"additionalProperties":false,"type":"object","title":"IndicatorParameters"},"ResearchResponse":{"properties":{"data":{"$ref":"#/components/schemas/ResearchRow"},"chart":{"items":{"$ref":"#/components/schemas/Candle"},"type":"array","title":"Chart"},"definition":{"$ref":"#/components/schemas/ScreenDefinition-Output"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"},"closed_before":{"type":"string","format":"date-time","title":"Closed Before"},"timezone":{"type":"string","title":"Timezone"},"volume_unit":{"type":"string","title":"Volume Unit"},"finality":{"type":"string","title":"Finality"},"lookback_bars":{"type":"integer","title":"Lookback Bars"},"note":{"type":"string","title":"Note"}},"type":"object","required":["data","chart","definition","computed_at","closed_before","timezone","volume_unit","finality","lookback_bars","note"],"title":"ResearchResponse"},"ResearchRow":{"properties":{"symbol":{"type":"string","title":"Symbol"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"type":"string","enum":["no_data","invalid_data","stale","coverage_gaps","insufficient_history","ready"],"title":"Status"},"bar_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Bar Time"},"input_bars":{"type":"integer","title":"Input Bars"},"minimum_bars":{"type":"integer","title":"Minimum Bars"},"lookback_bars":{"type":"integer","title":"Lookback Bars"},"missing_expected_bars":{"type":"integer","title":"Missing Expected Bars"},"values":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object","title":"Values"}},"type":"object","required":["symbol","status","bar_time","input_bars","minimum_bars","lookback_bars","missing_expected_bars","values"],"title":"ResearchRow"},"ScreenCondition-Input":{"properties":{"field":{"type":"string","maxLength":32,"minLength":1,"title":"Field"},"op":{"type":"string","enum":["gt","gte","lt","lte","eq","between","crosses_above","crosses_below"],"title":"Op"},"other":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Other"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Value","description":"Finite decimal string or integer; maximum 20 integer digits and 8 decimal places. JSON floats rejected."},"upper":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Upper","description":"Inclusive upper bound for between; same numeric limits as value."},"multiplier":{"anyOf":[{"type":"string"},{"type":"integer"}],"title":"Multiplier","description":"Finite decimal string or integer, 0-1000, at most 8 decimal places; JSON floats rejected.","default":"1"}},"additionalProperties":false,"type":"object","required":["field","op"],"title":"ScreenCondition"},"ScreenCondition-Output":{"properties":{"field":{"type":"string","maxLength":32,"minLength":1,"title":"Field"},"op":{"type":"string","enum":["gt","gte","lt","lte","eq","between","crosses_above","crosses_below"],"title":"Op"},"other":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Other"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Value","description":"Finite decimal string or integer; maximum 20 integer digits and 8 decimal places. JSON floats rejected."},"upper":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Upper","description":"Inclusive upper bound for between; same numeric limits as value."},"multiplier":{"anyOf":[{"type":"string"},{"type":"integer"}],"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*(?:\\d{0,4}|(?=[\\d.]{1,13}0*$)\\d{0,4}\\.\\d{0,8}0*$)","title":"Multiplier","description":"Finite decimal string or integer, 0-1000, at most 8 decimal places; JSON floats rejected.","default":"1"}},"additionalProperties":false,"type":"object","required":["field","op"],"title":"ScreenCondition"},"ScreenDefinition-Input":{"properties":{"interval":{"type":"string","enum":["1d","1h","2h","4h"],"title":"Interval","default":"1d"},"parameters":{"$ref":"#/components/schemas/IndicatorParameters"},"columns":{"items":{"type":"string"},"type":"array","maxItems":16,"minItems":1,"title":"Columns"},"conditions":{"items":{"$ref":"#/components/schemas/ScreenCondition-Input"},"type":"array","maxItems":12,"title":"Conditions"},"mode":{"type":"string","enum":["and","or"],"title":"Mode","default":"and"},"sort_by":{"type":"string","maxLength":32,"title":"Sort By","default":"symbol"},"sort_direction":{"type":"string","enum":["asc","desc"],"title":"Sort Direction","default":"asc"},"symbols":{"items":{"type":"string"},"type":"array","maxItems":1000,"title":"Symbols"}},"additionalProperties":false,"type":"object","title":"ScreenDefinition"},"ScreenDefinition-Output":{"properties":{"interval":{"type":"string","enum":["1d","1h","2h","4h"],"title":"Interval","default":"1d"},"parameters":{"$ref":"#/components/schemas/IndicatorParameters"},"columns":{"items":{"type":"string"},"type":"array","maxItems":16,"minItems":1,"title":"Columns"},"conditions":{"items":{"$ref":"#/components/schemas/ScreenCondition-Output"},"type":"array","maxItems":12,"title":"Conditions"},"mode":{"type":"string","enum":["and","or"],"title":"Mode","default":"and"},"sort_by":{"type":"string","maxLength":32,"title":"Sort By","default":"symbol"},"sort_direction":{"type":"string","enum":["asc","desc"],"title":"Sort Direction","default":"asc"},"symbols":{"items":{"type":"string"},"type":"array","maxItems":1000,"title":"Symbols"}},"additionalProperties":false,"type":"object","title":"ScreenDefinition"},"ScreenRequest":{"properties":{"interval":{"type":"string","enum":["1d","1h","2h","4h"],"title":"Interval","default":"1d"},"parameters":{"$ref":"#/components/schemas/IndicatorParameters"},"columns":{"items":{"type":"string"},"type":"array","maxItems":16,"minItems":1,"title":"Columns"},"conditions":{"items":{"$ref":"#/components/schemas/ScreenCondition-Input"},"type":"array","maxItems":12,"title":"Conditions"},"mode":{"type":"string","enum":["and","or"],"title":"Mode","default":"and"},"sort_by":{"type":"string","maxLength":32,"title":"Sort By","default":"symbol"},"sort_direction":{"type":"string","enum":["asc","desc"],"title":"Sort Direction","default":"asc"},"symbols":{"items":{"type":"string"},"type":"array","maxItems":1000,"title":"Symbols"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":25},"cursor":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Cursor","default":0},"scan_id":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{32}$"},{"type":"null"}],"title":"Scan Id"}},"additionalProperties":false,"type":"object","title":"ScreenRequest"},"ScreenResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ResearchRow"},"type":"array","title":"Data"},"definition":{"$ref":"#/components/schemas/ScreenDefinition-Output"},"matched":{"type":"integer","title":"Matched"},"scanned":{"type":"integer","title":"Scanned"},"excluded_unready":{"type":"integer","title":"Excluded Unready"},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Cursor"},"scan_id":{"type":"string","title":"Scan Id"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"},"closed_before":{"type":"string","format":"date-time","title":"Closed Before"},"timezone":{"type":"string","title":"Timezone"},"volume_unit":{"type":"string","title":"Volume Unit"},"finality":{"type":"string","title":"Finality"},"lookback_bars":{"type":"integer","title":"Lookback Bars"},"note":{"type":"string","title":"Note"}},"type":"object","required":["data","definition","matched","scanned","excluded_unready","next_cursor","scan_id","computed_at","closed_before","timezone","volume_unit","finality","lookback_bars","note"],"title":"ScreenResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer","bearerFormat":"InvestDX API key"}}}}