{"openapi":"3.1.0","info":{"title":"bolsai","description":"API de dados financeiros do Brasil — ações, FIIs, fundamentos, dividendos, macro.\n\n**Autenticação:** Inclua sua API key no header `X-API-Key`.\n\n**Criar conta:** Faça login com Google em https://usebolsai.com\n\n**Planos:** Grátis (200 req/dia) · Pro R$29/mês (10K req/dia, todos endpoints)","version":"1.0.0"},"paths":{"/health":{"get":{"tags":["health"],"summary":"Health Check","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/google":{"get":{"tags":["auth"],"summary":"Google Login","description":"Redirect user to Google OAuth consent screen.","operationId":"google_login_api_v1_auth_google_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/auth/google/callback":{"get":{"tags":["auth"],"summary":"Google Callback","description":"Handle Google OAuth callback.","operationId":"google_callback_api_v1_auth_google_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Get Current User","description":"Get current logged-in user info and usage stats.","operationId":"get_current_user_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/auth/check-admin":{"get":{"tags":["auth"],"summary":"Check Admin","description":"Check if current session is admin. Used by nginx auth_request.","operationId":"check_admin_api_v1_auth_check_admin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/auth/logout":{"get":{"tags":["auth"],"summary":"Logout","description":"Clear session and redirect to home.","operationId":"logout_api_v1_auth_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/oauth/authorize":{"get":{"tags":["oauth"],"summary":"Authorize","description":"Start OAuth flow: redirect user to Google login.\n\nChatGPT sends:\n  GET /oauth/authorize?client_id=bolsai&redirect_uri=https://chat.openai.com/...&state=xyz&response_type=code\n\nWe store the redirect_uri + state in session, then send user to Google.","operationId":"authorize_api_v1_oauth_authorize_get","parameters":[{"name":"client_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Client Id"}},{"name":"redirect_uri","in":"query","required":false,"schema":{"type":"string","default":"","title":"Redirect Uri"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"response_type","in":"query","required":false,"schema":{"type":"string","default":"code","title":"Response Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/oauth/callback":{"get":{"tags":["oauth"],"summary":"Callback","description":"Handle Google callback, then redirect back to the third-party app with an auth code.","operationId":"callback_api_v1_oauth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/oauth/token":{"post":{"tags":["oauth"],"summary":"Token","description":"Exchange authorization code for API key (as access_token).\n\nChatGPT sends:\n  POST /oauth/token\n  Content-Type: application/x-www-form-urlencoded\n  grant_type=authorization_code&code=...&redirect_uri=...&client_id=...&client_secret=...","operationId":"token_api_v1_oauth_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/billing/checkout":{"get":{"tags":["billing"],"summary":"Create Checkout","description":"Create a Stripe Checkout session for Pro upgrade.","operationId":"create_checkout_api_v1_billing_checkout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]},"post":{"tags":["billing"],"summary":"Create Checkout","description":"Create a Stripe Checkout session for Pro upgrade.","operationId":"create_checkout_api_v1_billing_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/billing/portal":{"get":{"tags":["billing"],"summary":"Customer Portal","description":"Redirect to Stripe Customer Portal to manage subscription.","operationId":"customer_portal_api_v1_billing_portal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/billing/webhook":{"post":{"tags":["billing"],"summary":"Stripe Webhook","description":"Handle Stripe webhook events.","operationId":"stripe_webhook_api_v1_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/feedback/":{"post":{"tags":["feedback"],"summary":"Submit Feedback","description":"Submit feedback, optionally with image attachments. Requires logged-in session.","operationId":"submit_feedback_api_v1_feedback__post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_submit_feedback_api_v1_feedback__post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/feedback/mine":{"get":{"tags":["feedback"],"summary":"My Feedback","description":"The logged-in user's own feedback threads (root + replies + image ids), paginated.","operationId":"my_feedback_api_v1_feedback_mine_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/feedback/{feedback_id}/reply":{"post":{"tags":["feedback"],"summary":"Reply To Own Feedback","description":"User replies within their own feedback thread.","operationId":"reply_to_own_feedback_api_v1_feedback__feedback_id__reply_post","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"integer","title":"Feedback Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/feedback/admin/{feedback_id}/reply":{"post":{"tags":["feedback"],"summary":"Admin Reply","description":"Admin replies to a feedback thread. Posted from the admin page form.","operationId":"admin_reply_api_v1_feedback_admin__feedback_id__reply_post","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"integer","title":"Feedback Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_reply_api_v1_feedback_admin__feedback_id__reply_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/feedback/image/{image_id}":{"get":{"tags":["feedback"],"summary":"Feedback Image","description":"Serve an attached image. Visible to the admin or the feedback's owner.","operationId":"feedback_image_api_v1_feedback_image__image_id__get","parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"integer","title":"Image Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/feedback/admin":{"get":{"tags":["feedback"],"summary":"Admin Feedback","description":"Admin page to view all feedback threads. Protected by admin email check.","operationId":"admin_feedback_api_v1_feedback_admin_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/keys":{"get":{"tags":["api-keys"],"summary":"List Keys","description":"List the current user's active API keys.","operationId":"list_keys_api_v1_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/KeyListItem"},"type":"array","title":"Response List Keys Api V1 Keys Get"}}}}},"security":[{"ApiKeyHeader":[]}]},"post":{"tags":["api-keys"],"summary":"Create Key","description":"Create a new API key for the current user.","operationId":"create_key_api_v1_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeySecretResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/keys/{key_id}/rotate":{"post":{"tags":["api-keys"],"summary":"Rotate Key","description":"Generate a new secret for an existing key. The old secret is invalidated immediately.","operationId":"rotate_key_api_v1_keys__key_id__rotate_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeySecretResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/{key_id}":{"delete":{"tags":["api-keys"],"summary":"Delete Key","description":"Soft-delete a key. Blocked if it's the user's last active key.","operationId":"delete_key_api_v1_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/playground-token":{"get":{"tags":["api-keys"],"summary":"Get Playground Token","description":"Generate a short-lived token for the website playground.","operationId":"get_playground_token_api_v1_keys_playground_token_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/keys/usage":{"get":{"tags":["api-keys"],"summary":"Get Usage","description":"Check current API key usage and limits.","operationId":"get_usage_api_v1_keys_usage_get","parameters":[{"name":"api_key","in":"query","required":true,"schema":{"type":"string","title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/":{"get":{"tags":["companies"],"summary":"List Companies","operationId":"list_companies_api_v1_companies__get","parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by sector","title":"Sector"},"description":"Filter by sector"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (e.g. ATIVO)","title":"Status"},"description":"Filter by status (e.g. ATIVO)"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Search corporate or trade name","title":"Search"},"description":"Search corporate or trade name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_CompanySummary_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/companies/sectors":{"get":{"tags":["companies"],"summary":"List Sectors","description":"List all sectors with company counts. Only includes active companies with tickers.","operationId":"list_sectors_api_v1_companies_sectors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/companies/{ticker}":{"get":{"tags":["companies"],"summary":"Get Company","operationId":"get_company_api_v1_companies__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/stocks/":{"get":{"tags":["stocks"],"summary":"List Tickers","operationId":"list_tickers_api_v1_stocks__get","parameters":[{"name":"bdi_code","in":"query","required":false,"schema":{"type":"string","description":"BDI code (02=stocks, 12=FIIs, 14=BDRs)","default":"02","title":"Bdi Code"},"description":"BDI code (02=stocks, 12=FIIs, 14=BDRs)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickersListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/stocks/corporate-events":{"get":{"tags":["stocks"],"summary":"All Corporate Events","description":"List all detected splits and reverse splits across all tickers.","operationId":"all_corporate_events_api_v1_stocks_corporate_events_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2030,"minimum":2000},{"type":"null"}],"description":"Filter by year","title":"Year"},"description":"Filter by year"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/stocks/{ticker}/history":{"get":{"tags":["stocks"],"summary":"Stock History","operationId":"stock_history_api_v1_stocks__ticker__history_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"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":5000,"minimum":1,"default":252,"title":"Limit"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/stocks/{ticker}/quote":{"get":{"tags":["stocks"],"summary":"Stock Quote","operationId":"stock_quote_api_v1_stocks__ticker__quote_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockQuote"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/stocks/{ticker}/stats":{"get":{"tags":["stocks"],"summary":"Stock Stats","description":"Price statistics: 52-week high/low, YTD return, daily change, avg volume.","operationId":"stock_stats_api_v1_stocks__ticker__stats_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/stocks/{ticker}/corporate-events":{"get":{"tags":["stocks"],"summary":"Stock Corporate Events","description":"Detect splits and reverse splits from price history.","operationId":"stock_corporate_events_api_v1_stocks__ticker__corporate_events_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/stocks/{ticker}/ticker-history":{"get":{"tags":["stocks"],"summary":"Ticker History","description":"Show all historical tickers for a company (rename chain).","operationId":"ticker_history_api_v1_stocks__ticker__ticker_history_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/financials/{ticker}":{"get":{"tags":["financials"],"summary":"Get Financials","operationId":"get_financials_api_v1_financials__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"report_type","in":"query","required":false,"schema":{"type":"string","description":"DFP (annual) or ITR (quarterly)","default":"DFP","title":"Report Type"},"description":"DFP (annual) or ITR (quarterly)"},{"name":"statement_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"BPA, BPP, DRE, DFC_MI, DVA","title":"Statement Type"},"description":"BPA, BPP, DRE, DFC_MI, DVA"},{"name":"reference_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Reference Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":1000,"title":"Limit"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/fundamentals/{ticker}":{"get":{"tags":["fundamentals"],"summary":"Get Fundamentals","description":"Get fundamental indicators by ticker.\n\nUses the most recent DFP or ITR data available.\nCalculates P/L, EV/EBITDA, ROE, net margin, debt/equity.","operationId":"get_fundamentals_api_v1_fundamentals__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"reference_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Financial statement date","title":"Reference Date"},"description":"Financial statement date"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/fundamentals/{ticker}/history":{"get":{"tags":["fundamentals"],"summary":"Get Fundamentals History","description":"Get historical fundamentals (one per quarter, most recent first).","operationId":"get_fundamentals_history_api_v1_fundamentals__ticker__history_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":80,"minimum":1,"description":"Number of quarterly periods","default":40,"title":"Limit"},"description":"Number of quarterly periods"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/dividends/{ticker}":{"get":{"tags":["dividends"],"summary":"Get Dividends","description":"Get dividend history and yield for a ticker.","operationId":"get_dividends_api_v1_dividends__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"years","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Years of history","default":5,"title":"Years"},"description":"Years of history"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/fiis/":{"get":{"tags":["fiis"],"summary":"List Fiis","description":"List all FII tickers with latest data.","operationId":"list_fiis_api_v1_fiis__get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/fiis/screener":{"get":{"tags":["fiis"],"summary":"Screen Fiis","description":"Screen FIIs by P/VP, dividend yield, NAV, vacancy, etc.\n\nUse {metric}_gt and {metric}_lt query params to filter\n(e.g. ?pvp_lt=1&dividend_yield_ttm_gt=8&vacancy_pct_lt=5).","operationId":"screen_fiis_api_v1_fiis_screener_get","parameters":[{"name":"segment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by segment (case-insensitive)","title":"Segment"},"description":"Filter by segment (case-insensitive)"},{"name":"management_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by management type (case-insensitive)","title":"Management Type"},"description":"Filter by management type (case-insensitive)"},{"name":"mandate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by mandate (Renda/Ganho de Capital)","title":"Mandate"},"description":"Filter by mandate (Renda/Ganho de Capital)"},{"name":"fund_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by fund_type (Tijolo/Papel/Fundo de Fundos/Híbrido)","title":"Fund Type"},"description":"Filter by fund_type (Tijolo/Papel/Fundo de Fundos/Híbrido)"},{"name":"administrator","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by administrator (case-insensitive exact match)","title":"Administrator"},"description":"Filter by administrator (case-insensitive exact match)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Metric to sort by","default":"dividend_yield_ttm","title":"Sort"},"description":"Metric to sort by"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Results per page","default":50,"title":"Limit"},"description":"Results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/fiis/{ticker}":{"get":{"tags":["fiis"],"summary":"Get Fii Fundamentals","description":"Get FII fundamentals: P/VP, DY, NAV, shareholders.","operationId":"get_fii_fundamentals_api_v1_fiis__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/fiis/{ticker}/history":{"get":{"tags":["fiis"],"summary":"Get Fii History","description":"Get FII monthly history: P/VP, DY, NAV evolution.","operationId":"get_fii_history_api_v1_fiis__ticker__history_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":1,"description":"Number of monthly periods","default":24,"title":"Limit"},"description":"Number of monthly periods"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/fiis/{ticker}/distributions":{"get":{"tags":["fiis"],"summary":"Get Fii Distributions","description":"Get FII distribution history: monthly R$/share, annual totals, trailing 12m yield.","operationId":"get_fii_distributions_api_v1_fiis__ticker__distributions_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"years","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Years of history","default":5,"title":"Years"},"description":"Years of history"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/fiis/{ticker}/tenants":{"get":{"tags":["fiis"],"summary":"Get Fii Tenants","description":"Get tenant sector concentration for a FII (latest quarter).\n\nSource: CVM quarterly informe (imovel_renda_acabado_inquilino.csv).\nTenants are anonymized and aggregated by sector (Comércio, Serviço, etc.).","operationId":"get_fii_tenants_api_v1_fiis__ticker__tenants_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]{3}\\d{0,2}$","description":"Ticker","title":"Ticker"},"description":"Ticker"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/macro/":{"get":{"tags":["macro"],"summary":"List Series","operationId":"list_series_api_v1_macro__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/macro/{series_name}/stats":{"get":{"tags":["macro"],"summary":"Get Series Stats","description":"Price-style statistics for a macro series: daily change, 52w range, YTD return.","operationId":"get_series_stats_api_v1_macro__series_name__stats_get","parameters":[{"name":"series_name","in":"path","required":true,"schema":{"type":"string","title":"Series Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/macro/{series_name}":{"get":{"tags":["macro"],"summary":"Get Series","operationId":"get_series_api_v1_macro__series_name__get","parameters":[{"name":"series_name","in":"path","required":true,"schema":{"type":"string","title":"Series Name"}},{"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":5000,"minimum":1,"default":252,"title":"Limit"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MacroSeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/screener/":{"get":{"tags":["screener"],"summary":"Screen Stocks","description":"Screen stocks by fundamental metrics.\n\nScans all ~264 traded companies. Use {metric}_gt and {metric}_lt query\nparams to filter (e.g. ?pl_lt=15&roe_gt=10&dividend_yield_gt=5).","operationId":"screen_stocks_api_v1_screener__get","parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by sector","title":"Sector"},"description":"Filter by sector"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Metric to sort by","default":"market_cap","title":"Sort"},"description":"Metric to sort by"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Results per page","default":50,"title":"Limit"},"description":"Results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/api/v1/admin/validation/prices":{"get":{"tags":["admin"],"summary":"Validate Prices","description":"Compare all active tickers against Yahoo Finance. Cached 24h.","operationId":"validate_prices_api_v1_admin_validation_prices_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","description":"Start date YYYY-MM-DD","default":"2020-01-01","title":"Since"},"description":"Start date YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyHeader":[]}]}},"/metrics":{"get":{"summary":"Metrics","description":"Endpoint that serves Prometheus metrics.","operationId":"metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyHeader":[]}]}}},"components":{"schemas":{"Body_admin_reply_api_v1_feedback_admin__feedback_id__reply_post":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"Body_admin_reply_api_v1_feedback_admin__feedback_id__reply_post"},"Body_submit_feedback_api_v1_feedback__post":{"properties":{"category":{"type":"string","title":"Category","default":"geral"},"message":{"type":"string","title":"Message"},"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files","default":[]}},"type":"object","required":["message"],"title":"Body_submit_feedback_api_v1_feedback__post"},"CompanyDetail":{"properties":{"cvm_code":{"type":"string","title":"Cvm Code"},"cnpj":{"type":"string","title":"Cnpj"},"corporate_name":{"type":"string","title":"Corporate Name"},"trade_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trade Name"},"ticker_primary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker Primary"},"queried_ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Queried Ticker"},"tickers":{"items":{"type":"string"},"type":"array","title":"Tickers","default":[]},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"registration_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Registration Date"},"registration_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Category"},"market_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Type"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"type":"object","required":["cvm_code","cnpj","corporate_name","trade_name","sector","status","registration_date","registration_category","market_type","country","state","city","email","website"],"title":"CompanyDetail","description":"Full company representation for detail endpoint."},"CompanySummary":{"properties":{"cvm_code":{"type":"string","title":"Cvm Code"},"cnpj":{"type":"string","title":"Cnpj"},"corporate_name":{"type":"string","title":"Corporate Name"},"trade_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trade Name"},"ticker_primary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker Primary"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["cvm_code","cnpj","corporate_name","trade_name","sector","status"],"title":"CompanySummary","description":"Compact company representation for list endpoints."},"CreateKeyRequest":{"properties":{"label":{"type":"string","maxLength":50,"minLength":1,"title":"Label"}},"type":"object","required":["label"],"title":"CreateKeyRequest"},"FinancialLineItem":{"properties":{"reference_date":{"type":"string","format":"date","title":"Reference Date"},"statement_type":{"type":"string","title":"Statement Type"},"account_code":{"type":"string","title":"Account Code"},"account_name":{"type":"string","title":"Account Name"},"value":{"type":"number","title":"Value"}},"type":"object","required":["reference_date","statement_type","account_code","account_name","value"],"title":"FinancialLineItem"},"FinancialsResponse":{"properties":{"ticker":{"type":"string","title":"Ticker"},"cvm_code":{"type":"string","title":"Cvm Code"},"report_type":{"type":"string","title":"Report Type"},"count":{"type":"integer","title":"Count"},"statements":{"items":{"$ref":"#/components/schemas/FinancialLineItem"},"type":"array","title":"Statements"}},"type":"object","required":["ticker","cvm_code","report_type","count","statements"],"title":"FinancialsResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KeyListItem":{"properties":{"id":{"type":"integer","title":"Id"},"label":{"type":"string","title":"Label"},"key_masked":{"type":"string","title":"Key Masked"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","label","key_masked","is_active","created_at","last_used_at"],"title":"KeyListItem"},"KeySecretResponse":{"properties":{"id":{"type":"integer","title":"Id"},"label":{"type":"string","title":"Label"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","label","key"],"title":"KeySecretResponse","description":"Returned only when creating or rotating — full secret shown once."},"MacroDataPoint":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"value":{"type":"number","title":"Value"}},"type":"object","required":["date","value"],"title":"MacroDataPoint"},"MacroSeriesResponse":{"properties":{"series":{"type":"string","title":"Series"},"series_code":{"type":"string","title":"Series Code"},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/MacroDataPoint"},"type":"array","title":"Data"}},"type":"object","required":["series","series_code","count","data"],"title":"MacroSeriesResponse"},"PaginatedResponse_CompanySummary_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CompanySummary"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"total":{"type":"integer","title":"Total"},"offset":{"type":"integer","title":"Offset"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["data","count","total","offset","limit"],"title":"PaginatedResponse[CompanySummary]"},"ReplyRequest":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"ReplyRequest"},"StockHistoryResponse":{"properties":{"ticker":{"type":"string","title":"Ticker"},"count":{"type":"integer","title":"Count"},"prices":{"items":{"$ref":"#/components/schemas/StockPriceItem"},"type":"array","title":"Prices"}},"type":"object","required":["ticker","count","prices"],"title":"StockHistoryResponse"},"StockPriceItem":{"properties":{"trade_date":{"type":"string","format":"date","title":"Trade Date"},"open":{"type":"number","title":"Open"},"high":{"type":"number","title":"High"},"low":{"type":"number","title":"Low"},"close":{"type":"number","title":"Close"},"adjusted_open":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adjusted Open"},"adjusted_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adjusted High"},"adjusted_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adjusted Low"},"adjusted_close":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adjusted Close"},"volume":{"type":"integer","title":"Volume"},"adjusted_volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Adjusted Volume"},"traded_amount":{"type":"number","title":"Traded Amount"},"num_trades":{"type":"integer","title":"Num Trades"}},"type":"object","required":["trade_date","open","high","low","close","volume","traded_amount","num_trades"],"title":"StockPriceItem"},"StockQuote":{"properties":{"ticker":{"type":"string","title":"Ticker"},"trade_date":{"type":"string","format":"date","title":"Trade Date"},"open":{"type":"number","title":"Open"},"high":{"type":"number","title":"High"},"low":{"type":"number","title":"Low"},"close":{"type":"number","title":"Close"},"volume":{"type":"integer","title":"Volume"},"traded_amount":{"type":"number","title":"Traded Amount"},"num_trades":{"type":"integer","title":"Num Trades"}},"type":"object","required":["ticker","trade_date","open","high","low","close","volume","traded_amount","num_trades"],"title":"StockQuote"},"TickersListResponse":{"properties":{"total":{"type":"integer","title":"Total"},"count":{"type":"integer","title":"Count"},"tickers":{"items":{"type":"string"},"type":"array","title":"Tickers"}},"type":"object","required":["total","count","tickers"],"title":"TickersListResponse"},"UsageResponse":{"properties":{"tier":{"type":"string","title":"Tier"},"used_today":{"type":"integer","title":"Used Today"},"daily_limit":{"type":"integer","title":"Daily Limit"},"remaining":{"type":"integer","title":"Remaining"}},"type":"object","required":["tier","used_today","daily_limit","remaining"],"title":"UsageResponse"},"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":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Get your key at POST /api/v1/keys/register"}}},"tags":[{"name":"api-keys","description":"Register and manage API keys (no auth required)"},{"name":"companies","description":"Listed companies on B3"},{"name":"stocks","description":"Stock prices, quotes, stats, corporate events"},{"name":"fundamentals","description":"Fundamental indicators (P/L, ROE, EV/EBITDA)"},{"name":"financials","description":"Raw CVM financial statements (Pro)"},{"name":"dividends","description":"Dividend history and yield (Pro)"},{"name":"fiis","description":"FII fundamentals, history, distributions"},{"name":"screener","description":"Screen stocks by fundamental metrics"},{"name":"macro","description":"Macroeconomic data — SELIC, IPCA, CDI, USD/BRL (Pro)"}]}