# OHLC integration guide for LLMs

Build against the implemented contract in this download. API base URL: https://api.ohlc.io. Documentation: https://ohlc.io/docs. The API uses /v1 paths; the OpenAPI document version is a separate contract revision. Examples are synthetic and are not evidence of live coverage. Do not invent endpoints, parameters, SDKs, or availability. The proposed expanded specification and historical architecture notes are not the integration contract.

## Start here

1. Create an account and obtain a key at https://ohlc.io/dashboard/keys. Store it as OHLC_API_KEY in your server's environment or secret manager.
2. Choose an operation from the endpoint inventory, which is grouped by asset class and task and lists the plans that include each operation. Read its parameters, required capability, response schema, and constraints in the included OpenAPI contract. Where the inventory marks an endpoint canonical, prefer it over its compatibility, subset or cross-asset alternatives: /v1/eod and /v1/intraday for stock bars (/v1/bars is the cross-asset form), /v1/instruments over /v1/securities, /v1/tickers over /v1/symbols/search, and /v1/corporate-actions over its dividends-only subset /v1/dividends.
3. Discover instruments with /v1/instruments. Use returned IDs and exchange-qualified symbols such as XNAS:AAPL; sample IDs are placeholders.
4. Check /v1/datasets and /v1/datasets/{dataset}/coverage for research readiness and entitled coverage; /v1/health reports source freshness. These are not guarantees of complete coverage.
5. Make a small request, handle empty results and errors, then implement pagination. Live availability depends on deployment, source batches, plan, key scope, market permission, and licensing.

## Authentication and access

Send Authorization: Bearer YOUR_OHLC_API_KEY on every market-data request. Send Content-Type: application/json on JSON POST requests. Only clients that cannot set headers, such as spreadsheet web functions, should use the api_key=YOUR_OHLC_API_KEY query parameter; it is accepted on GET and HEAD requests without an Origin header, and the header wins when both are sent. Never put keys in shared prompts, public source code, logs, or client bundles, and never share a URL that contains one. GET data endpoints accept format=csv, which returns the data rows as CSV with a header row (nested fields as dotted columns, lists as JSON text, one page per response, next cursor in the X-Next-Cursor header, batch members without rows as a JSON array in the X-Meta-Errors header), for example =IMPORTDATA("https://api.ohlc.io/v1/eod?symbols=XNAS:AAPL&format=csv&api_key=YOUR_OHLC_API_KEY") in Google Sheets. Downloads contain placeholders only; supply credentials through secure client settings.

Keep keys server-side. Direct browser access requires a browser-enabled key and an explicitly allowed origin. OPTIONS preflight is unauthenticated and does not grant data access. IP allowlists and key scope restrictions still apply. Manage keys in the portal; key rotation can allow an overlap deadline. Portal session-cookie/CSRF APIs, billing, and administration are first-party application APIs, not the public bearer-key integration surface.

Plan access and source licensing are separate requirements. Free accounts are restricted to AAPL, NVDA, JNJ, PEP, MSFT, SPY, and QQQ. Research operations require their documented capabilities; do not assume every plan includes them. History, batching, concurrency and market access follow the effective entitlement. See https://ohlc.io/pricing for plan details. Preserve applicable notices and do not describe delayed or derived pricing as consolidated real-time market data.

## Requests, identity and time

Unknown parameters are rejected. Use only the exact parameter names, enum values, formats, bounds, selector combinations and x-query-constraints for the chosen operation. Query arrays declared style=form, explode=false are comma-separated strings, not symbols[]=... syntax. JSON request-body arrays remain arrays. Batch symbol requests are limited to at most 100, or a lower effective plan cap.

instrument_id is the stable public identity; MIC:TICKER assignments can change. security_id carries the same value and is being superseded by instrument_id; read instrument_id where a payload has it. Research resources also use instrument_id and company_id: use the IDs returned by the appropriate discovery endpoints, not inferred mappings. symbol_at resolves the symbol assignment at the end of its UTC date and defaults to as_of. as_of is the knowledge cutoff, the end of its UTC date, and defaults to now; today reads up to the moment of the request. Future dates are rejected. /v1/datasets describes the current catalog and rejects explicit as_of.

Every date query parameter takes a date as YYYY-MM-DD, never a time or timezone; a timestamp returns 422 invalid-date. (The POST /v1/screener body's as_of is an RFC 3339 instant.) Outputs use UTC. from and to are both inclusive, so from equal to to selects one day. Daily and intraday bars (/v1/eod, /v1/intraday and /v1/bars) read exchange-local trading dates; other timestamped data reads UTC dates. known_from/known_to and effective_from/effective_to are inclusive UTC dates. For original datasets, bars filter by trading date; filings filter filed_on; financial facts filter fiscal_end; corporate actions and dividends filter ex_date. Latest quotes and securities do not accept date ranges. known_from/known_to independently filter eligible revision knowledge times; they are not a deletion log or change feed. Research filters and ordering vary by endpoint; effective_date is distinct from the knowledge cutoff.

## Response handling

Consult each operation's schema: collections return data arrays; single-record lookups and export status return data objects. Empty data arrays can be successful results, not errors. Metadata varies: do not assume every response has as_of or next_cursor. X-Request-ID is a response header for correlation, not a meta field. There is no meta.sample field.

Prices, monetary values, ratios, sizes and volumes use decimal strings where specified. Use decimal-safe arithmetic; do not coerce them to binary floating point when exact values matter. Missing values remain null, not zero. Public flags are booleans. Fundamental dimensions are JSON objects; corporate-action legs reference public security IDs. Treat unknown additional fields as forward-compatible. raw, split and total_return adjustments apply only where the operation accepts them.

Historical queries must preserve knowledge cutoffs to avoid look-ahead bias. Ownership records are reported positions, not necessarily complete portfolio snapshots. Fund weights may not sum to one. Provider analytics and indicator definitions carry their own methods, versions and warmup requirements. Read the endpoint-specific descriptions before interpreting values.

## Pagination and caching

For operations that expose limit, the usual default is 100 and maximum 500 (movers 1 to 50, default 20; tickers up to 1,000); use the operation schema as authority. Follow meta.next_cursor until null. Treat cursors as opaque. Keep all parameters unchanged; for POST /v1/screener retain the identical body except cursor. Cursors expire after one hour and bind to the query and entitlement. Research cursors carry the first page's expiry forward, so a research pagination walk must finish within an hour of its first request; core and metadata cursors are reissued for an hour on each page. Security/research cursors pin their documented snapshot/cutoff; metadata cursors do not pin a snapshot. On expiration or invalidation, restart deliberately and deduplicate already processed records as appropriate.

Use If-None-Match only on operations documenting ETag support. A 304 has no JSON body, follows fresh authorization and costs no credits: the request needs the balance the 200 would cost, and that charge is refunded in full. Fourteen GET endpoints return an ETag: quotes, eod, intraday, financials/facts, corporate-actions, dividends, splits, filings, securities, symbols/search, exchanges, calendar, snapshot and movers. Every other response, including research, exports, flat files, usage and health, uses Cache-Control: no-store. Do not cache sensitive data across accounts or beyond applicable licensing permissions.

## Errors, retries and limits

HTTP errors use application/problem+json: type, title, status, detail, instance, code and invalid_params. invalid_params is empty when field-level details are unavailable. Inspect status before parsing a success envelope, and retain X-Request-ID for support.

- 400: malformed input, including invalid UTF-8; correct the request.
- 401: missing, invalid or revoked credential; repair authentication.
- 403: plan, scope, market, origin or IP restriction; repair access.
- 404: unavailable resource or unresolved identity; check IDs/symbol_at and endpoint.
- 405: unsupported method (with an Allow header); use the operation's documented method. Unknown /v1 paths return 404 resource-not-found and unsupported methods 405, both before authentication.
- 406: the Accept header admits no format the endpoint produces.
- 409: changed authorization or export state; inspect the problem before retrying.
- 413/414/431: request body over 64 KB, URL over 8 KB, or headers over 16 KB.
- 415: a POST body that is not application/json.
- 422: invalid parameters, expired cursor or unsupported combination; correct input.
- 429: rate-limit, concurrency-limit or daily-credit-limit; honor Retry-After in seconds.
- 501: dataset-unavailable, no data source is connected to the dataset; no retry changes the answer.
- 500/503: server failure, query-timeout, data-busy, maintenance, or 503 dataset-unavailable when a connected dataset has nothing published for the key's markets yet; bounded retries may help transient failures, but cannot provision missing data or permissions.

REST and MCP share account rate, concurrency and UTC daily credit accounting; MCP setup, discovery and documentation requests take rate and concurrency slots but spend no credits. All limits apply to the whole account across every API key.

Each request spends daily credits by endpoint, listed as x-credit-cost in each operation: 5 for reference data, prices and calendars (per symbol on price and corporate-action endpoints), 25 for intraday bars, indicators, news and screens, 50 for fundamentals, filings, options and ownership, and 500 for exports, flat-file downloads and whole-market reads without symbols. Each page is a request. Failed requests and 304 responses are refunded. X-Credits-Limit, X-Credits-Remaining and X-Credits-Cost report the allowance, what is left and what the request spent; X-Concurrency-Limit and X-Concurrency-Remaining report simultaneous-request slots. GET /v1/usage returns the balance and costs no credits. The daily allowance is a hard cap: once it is used, REST requests return 429 daily-credit-limit with Retry-After until 00:00 UTC, and MCP tool calls return isError with daily-credit-limit.

X-RateLimit-Limit is the per-minute request rate. The bucket holds up to twice that for bursts, so X-RateLimit-Remaining can exceed the limit, and X-RateLimit-Reset is the Unix time the bucket is full again. Unlimited entitlements can omit these headers.

Use bounded exponential backoff with jitter for retryable GET requests and a request timeout. Do not blindly retry POST /v1/exports: no idempotency-key guarantee is documented and retries can create duplicate jobs. Handle 304 separately. Avoid unbounded polling, retry loops and concurrent page fan-out.

## Bulk export workflow

POST /v1/exports with exactly one of endpoint (an original supported dataset) or resource (a research collection path template), plus parameters. Follow the request-body schema and examples. Research path IDs belong in parameters. Export parameters of either kind reject limit and cursor: an export reads every page of the result. Creation requires bulk.download (Commercial and Scale) and the selected dataset capability, and returns 202 with an opaque UUID and pending status. An export holds at most 1,000,000 rows and 256 MiB; a larger one ends with status failed, so split the range.

Poll GET /v1/exports/{id} with bounded backoff. Only the creating account and key can access the export. When ready, GET /v1/exports/{id}?download=true returns NDJSON; read it line by line, not as a JSON envelope. Every line is a dataset row. Files expire one day after generation. download=true before the export is ready returns 409 export-not-ready, and after it expires every request, status or download, returns 409 export-expired; create a new export when needed. Authorization is rechecked during delivery and revocation can truncate the stream. Verify the X-Content-SHA256 checksum before accepting the completed file.

## Flat files

Pro, Commercial and Scale keys can download one gzipped CSV per dataset per US trading date instead of paging the REST API: eod (daily bars) and corporate-actions (actions by ex_date). There are no intraday files: US listings are collected as five-minute bars, which /v1/intraday serves for about 30 days. Files hold exactly the rows GET /v1/eod and /v1/corporate-actions return for that New York trading date, except mutual funds, which flat files leave out because only Commercial and Scale may read them (use /v1/eod or an export), with the same MIC:TICKER symbols, UTC RFC 3339 instants and exact decimal strings. The first line is a header; empty fields are null and booleans are true or false. The nightly build publishes a trading date after it closes (about 01:30 New York time) and rebuilds the last five trading days, so a corrected file is republished with a new sha256.

List files with GET /v1/flat-files (dataset, from, to, limit, cursor; newest date first; from and to are inclusive). GET /v1/flat-files/{dataset}/{date} returns metadata; add download=true for the file, usually a 302 redirect to a presigned URL valid for five minutes that needs no API key. Verify X-Content-SHA256 against the downloaded .csv.gz. Each listing costs 5 credits and each download 500. Access requires flat-files.read plus eod.read or corporate-actions.read, the US market, and a date within the plan history depth. Scale accounts can also have new and changed files pushed nightly to their own S3 bucket, configured in the portal.

## MCP: give an assistant tools

Server URL: https://api.ohlc.io/mcp. Use an MCP client with Streamable HTTP. Initialize and list tools through the client; opening this URL in a browser is not a connection test. MCP requires Developer, Pro, Commercial or Scale access.

OAuth sign-in works for clients whose redirect URI is on claude.ai, claude.com or chatgpt.com (the Claude and ChatGPT connectors): add the server URL, sign in and approve workspace access. Other clients use an API key in the Authorization header, as below. The service exposes OAuth protected-resource and authorization-server discovery, authorization-code flow with S256 PKCE, and scope mcp:use. Let the client follow discovery instead of hardcoding OAuth endpoints. Connected applications can be revoked in the portal.

For clients supporting bearer headers, configure the server URL and Authorization: Bearer YOUR_OHLC_API_KEY in secure client settings. A generic configuration shape is shown below; client configuration formats can vary.

```json
{"mcpServers":{"ohlc":{"url":"https://api.ohlc.io/mcp","headers":{"Authorization":"Bearer YOUR_OHLC_API_KEY"}}}}
```

Tools:

- get_api_documentation: optional topic (overview, endpoints, authentication, pagination, errors, limits, streaming); optional endpoint is an exact REST path and overrides topic. Example: {"endpoint":"/v1/quotes"}. Returns the current operation contract and components.
- One read-only tool per REST data endpoint, named for what it returns: get_quotes, get_eod_prices, get_intraday_bars, get_financials_facts, get_corporate_actions, get_dividends, get_filings, get_securities, search_symbols, get_exchanges, get_market_calendar, get_news, get_news_sentiment, get_companies, get_earnings, get_financials_statements, screen_instruments and the rest of the endpoint inventory (path segments joined with underscores). Arguments are the endpoint's documented query and path parameters. Tools for /v1/instruments, /v1/companies, /v1/news and /v1/options/contracts also accept id for one record. get_news returns 20 articles unless limit is set. Example: get_quotes with {"symbols":["XNAS:AAPL"]}.

Query results are REST envelopes encoded as text. Tool failures, including daily-credit-limit, use isError; authentication, plan, rate and concurrency refusals use HTTP problem responses. tools/list shows only the tools your plan and key scope can call. Exports, flat files, usage and health remain REST-only; the four single-record paths are the id argument of their collection tool. Follow the returned cursor with unchanged arguments. Never place a real credential in a prompt or downloaded reference.

## WebSocket integration

The complete gateway protocol is included in the OpenAPI x-websocket extension below. Connect to wss://api.ohlc.io/v1/stream; authenticate within 10 seconds, wait for authenticated, then subscribe to MIC:TICKER symbols. Send ping within every 120-second lease. Requires websocket.subscribe and quotes access (Pro, Commercial or Scale). Quotes are snapshots, never real-time: exchange listings are delayed at least 15 minutes and indices about 15 minutes; crypto and currency pairs are not delayed but are snapshots up to about 10 minutes old. A frame is sent when a new snapshot changes a subscribed quote. This stream is not real-time.

```jsonl
{"type":"authenticate","key":"YOUR_OHLC_API_KEY"}
{"type":"subscribe","symbols":["XNAS:AAPL"]}
{"type":"ping"}
{"type":"unsubscribe","symbols":["XNAS:AAPL"]}
```

Server message types are authenticated, ack, quotes and error. Messages include timezone UTC; quotes contains the REST quote data and meta. There are no sequence IDs, channel fields, replay or exactly-once guarantees. Only changed quotes are emitted. Subscription caps apply to the union of symbols across every session of every key on the account: 250 symbols on Pro, 1,000 on Commercial and unlimited on Scale. Each account may hold up to 5 simultaneous stream connections; one more is refused with 429 stream-connection-limit. Authenticating, subscription changes and pings count against the account's request rate. At most 100 symbol changes per message, 16 KiB per message and 100 messages per 10 seconds. Reconnect with backoff, authenticate and resubscribe after disconnection; reconcile against REST as needed. A slow consumer receives an error frame and close code 1013; other failures can close without a frame. The contract lists close codes and policy behavior.

## Suggested implementation checklist

- Select documented endpoints and verify coverage with the user's actual entitlement.
- Keep credentials in secure configuration and all synthetic examples labeled.
- Validate selectors and date formats; preserve exact decimals and nulls.
- Handle pagination, empty results, problems, timeouts, cancellation and bounded retries.
- Display correct currency, timestamps, adjustment mode and applicable delay/disclosures.
- Test with synthetic fixtures first, then a small authorized request; do not claim live integration was verified without making one.


# Endpoint inventory

## Stocks: Prices & bars

- GET /v1/eod: Daily bars. Capability: eod.read. Plans: Free, Developer, Pro, Commercial, Scale. Canonical; also available as /v1/bars (cross-asset form).
- GET /v1/intraday: Intraday bars. Capability: intraday.read. Plans: Pro, Commercial, Scale. Canonical; also available as /v1/bars (cross-asset form).
- GET /v1/quotes: Quotes. Capability: quotes.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/trades: Trades. Capability: trades.read. Plans: Pro, Commercial, Scale.
- GET /v1/bars: Cross-asset bars. Capability: bars.read. Plans: Pro, Commercial, Scale. Cross-asset form: prefer /v1/eod or /v1/intraday. For stocks, GET /v1/eod is the canonical daily-bar endpoint and returns the same daily bars; /v1/bars?interval=1d serves them in the cross-asset bar shape. GET /v1/intraday is the canonical five-minute and hourly endpoint, and /v1/bars serves the same bars from the same store: 5m and 1h, and for crypto and currency pairs 1m.

## Stocks: Snapshots & movers

- GET /v1/snapshot: Snapshot. Capability: quotes.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/movers: Top movers. Capability: eod.read. Plans: Free, Developer, Pro, Commercial, Scale.

## Stocks: Reference

- GET /v1/instruments: Instruments. Capability: instruments.read. Plans: Free, Developer, Pro, Commercial, Scale. Canonical; also available as /v1/securities (compatibility).
- GET /v1/instruments/{id}: Instruments by ID. Capability: instruments.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/instruments/{instrument_id}/symbols: Symbol history. Capability: instruments.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/instruments/{instrument_id}/identifiers: Instrument identifiers. Capability: instruments.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/instruments/{instrument_id}/events: Ticker events. Capability: instruments.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/tickers: All tickers. Capability: reference.read. Plans: Free, Developer, Pro, Commercial, Scale. Canonical; also available as /v1/symbols/search (compatibility).
- GET /v1/ticker-types: Ticker types. Capability: reference.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/companies: Companies. Capability: companies.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/companies/{id}: Companies by ID. Capability: companies.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/securities: Securities. Capability: reference.read. Plans: Free, Developer, Pro, Commercial, Scale. Compatibility: prefer /v1/instruments. Same securities, same identifiers: an instrument's id equals the security_id returned here. New integrations should use the instruments endpoints, which add asset types, listing lifecycle, identifiers and symbol history.
- GET /v1/symbols/search: Symbol search. Capability: reference.read. Plans: Free, Developer, Pro, Commercial, Scale. Compatibility: prefer /v1/tickers. Prefix search over current symbol assignments. New integrations should search and list tickers through the canonical endpoint.
- GET /v1/exchanges: Exchanges. Capability: exchanges.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/calendar: Market calendar. Capability: calendar.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/market-status: Market status. Capability: calendar.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/conditions: Trade and quote conditions. Capability: reference.read. Plans: Free, Developer, Pro, Commercial, Scale.

## Stocks: Corporate actions

- GET /v1/corporate-actions: Corporate actions. Capability: corporate-actions.read. Plans: Free, Developer, Pro, Commercial, Scale. Canonical; also available as /v1/dividends (convenience subset).
- GET /v1/dividends: Dividends. Capability: corporate-actions.read. Plans: Free, Developer, Pro, Commercial, Scale. Convenience subset: prefer /v1/corporate-actions. Dividends are the cash dividend rows of corporate actions, with the same legs and capability, plus a stable id, classification, split-adjusted amount, adjustment factor and, for ASX listings, the exchange's announcement. Use /v1/splits for splits; stock dividends are recorded as splits.
- GET /v1/splits: Splits. Capability: corporate-actions.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/ipos: IPOs. Capability: ipos.read. Plans: Pro, Commercial, Scale.

## Stocks: Fundamentals

- GET /v1/financials/statements: Financial statements. Capability: financials.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/financials/metrics: Financial metrics. Capability: financials.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/financials/metric-definitions: Metric definitions. Capability: financials.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/financials/facts: Financial facts. Capability: fundamentals.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/financials/concepts: Financial concepts. Capability: financials.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/financials/segments: Revenue segments. Capability: financials.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/share-statistics: Share statistics. Capability: share-statistics.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/short-interest: Short interest. Capability: short-interest.read. Plans: Pro, Commercial, Scale.
- GET /v1/short-volume: Short volume. Capability: short-interest.read. Plans: Pro, Commercial, Scale.

## Stocks: Filings

- GET /v1/filings: Filings. Capability: filings.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/filings/{filing_id}/sections: Filing sections. Capability: filings.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/filings/{filing_id}/exhibits: Filing exhibits. Capability: filings.read. Plans: Free, Developer, Pro, Commercial, Scale.

## Stocks: Ownership & insiders

- GET /v1/ownership: Ownership. Capability: ownership.read. Plans: Pro, Commercial, Scale.
- GET /v1/insider-transactions: Insider transactions. Capability: insider-transactions.read. Plans: Pro, Commercial, Scale.

## Stocks: Analyst research

- GET /v1/earnings: Earnings. Capability: earnings.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/estimates: Analyst estimates. Capability: estimates.read. Plans: Pro, Commercial, Scale.
- GET /v1/analyst-ratings: Analyst ratings. Capability: analyst-ratings.read. Plans: Pro, Commercial, Scale.

## Stocks: News & sentiment

- GET /v1/news: News. Capability: news.read. Plans: Pro, Commercial, Scale.
- GET /v1/news/{id}: News by ID. Capability: news.read. Plans: Pro, Commercial, Scale.
- GET /v1/news/sentiment: News sentiment. Capability: news.read. Plans: Pro, Commercial, Scale.

## Stocks: Technical indicators

- GET /v1/indicators: Technical indicators. Capability: indicators.read. Plans: Pro, Commercial, Scale.
- GET /v1/indicators/definitions: Indicator definitions. Capability: indicators.read. Plans: Pro, Commercial, Scale.

## Stocks: Screener

- POST /v1/screener: Screen instruments. Capability: screener.read. Plans: Pro, Commercial, Scale.

## Options

- GET /v1/options/contracts: Option contracts. Capability: options.read. Plans: Pro, Commercial, Scale.
- GET /v1/options/contracts/{id}: Option contracts by ID. Capability: options.read. Plans: Pro, Commercial, Scale.
- GET /v1/options/quotes: Option quotes. Capability: options.read. Plans: Pro, Commercial, Scale.
- GET /v1/options/bars: Option bars. Capability: options.read. Plans: Pro, Commercial, Scale.

## Funds & ETFs

- GET /v1/funds: Funds. Capability: funds.read. Plans: Pro, Commercial, Scale.
- GET /v1/funds/{instrument_id}/holdings: Fund holdings. Capability: funds.read. Plans: Pro, Commercial, Scale.
- GET /v1/funds/{instrument_id}/allocations: Fund allocations. Capability: funds.read. Plans: Pro, Commercial, Scale.

## Indices

- GET /v1/indices: Indices. Capability: indices.read. Plans: Pro, Commercial, Scale.
- GET /v1/indices/{instrument_id}/constituents: Index constituents. Capability: indices.read. Plans: Pro, Commercial, Scale.

## Crypto

- GET /v1/crypto/assets: Crypto assets. Capability: crypto.read. Plans: Pro, Commercial, Scale.

## Bonds

- GET /v1/bonds: Bonds. Capability: bonds.read. Plans: Commercial, Scale.
- GET /v1/bonds/yields: Bond yields. Capability: bonds.read. Plans: Commercial, Scale.

## Economy

- GET /v1/economic/series: Economic series. Capability: economic.read. Plans: Pro, Commercial, Scale.
- GET /v1/economic/observations: Economic observations. Capability: economic.read. Plans: Pro, Commercial, Scale.
- GET /v1/economic/sovereign-ratings: Sovereign credit ratings. Capability: economic.read. Plans: Pro, Commercial, Scale.
- GET /v1/economic/events: Economic calendar. Capability: economic.read. Plans: Pro, Commercial, Scale.

## Specialist

- GET /v1/ratings/esg: ESG ratings. Not yet available: returns 501 dataset-unavailable until a data source is connected. Capability: ratings.read. Plans: Pro, Commercial, Scale.
- GET /v1/analytics/risk: Risk analytics. Capability: analytics.read. Plans: Pro, Commercial, Scale.
- GET /v1/congressional-trades: Congressional trades. Capability: congressional-trades.read. Plans: Pro, Commercial, Scale.
- GET /v1/sanctions: Sanctions. Capability: sanctions.read. Plans: Pro, Commercial, Scale.

## Delivery

- POST /v1/exports: Create export. Capability: bulk.download. Plans: Commercial, Scale.
- GET /v1/exports/{id}: Export status and download. Capability: bulk.download. Plans: Commercial, Scale.
- GET /v1/flat-files: List flat files. Capability: flat-files.read. Plans: Pro, Commercial, Scale.
- GET /v1/flat-files/{dataset}/{date}: Flat file metadata and download. Capability: flat-files.read. Plans: Pro, Commercial, Scale.
- GET /v1/datasets: Datasets. Capability: reference.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/datasets/{dataset}/coverage: Dataset coverage. Capability: reference.read. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/health: Data health. Capability: Authenticated API key. Plans: Free, Developer, Pro, Commercial, Scale.
- GET /v1/usage: Credit usage. Capability: Authenticated API key. Plans: Free, Developer, Pro, Commercial, Scale.

For all schemas and examples download https://ohlc.io/llms-full.txt or https://ohlc.io/specs/ohlc-openapi.json.
