# Financial Datasets API — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orthogonal.com/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

Stock market API with real-time and historical financial data for 27,000+ tickers over 30+ years. Financial statements, equity prices, insider trades, SEC filings, and more.

**Verified:** yes

## Access

**Run API:** `POST https://api.orthogonal.com/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Interest Rates (Historical)

Historical interest rates for all major central banks in the world.

`GET /macro/interest-rates`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bank` | string | Yes | The bank whose interest rates to return. Use the /macro/interest-rates/banks endpoint to get a list of available banks. |
| `start_date` | string | No | The start date of the interest rates to return in YYYY-MM-DD format. |
| `end_date` | string | No | The end date of the interest rates to return in YYYY-MM-DD format. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/macro/interest-rates","method":"GET","query":{"bank":"<string>","start_date":"<string>","end_date":"<string>"}}'
```

### Interest Rates (Real-Time)

Get the current interest rates from all major central banks in the world.

`GET /macro/interest-rates/snapshot`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bank` | string | Yes | The central bank code (e.g., FED, ECB, BOJ). Use the /macro/interest-rates/banks endpoint to get a list of available banks. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/macro/interest-rates/snapshot","method":"GET","query":{"bank":"<string>"}}'
```

### Get news articles

Get recent news articles for a specific company or the broad market. Pass a ticker for company-specific news, or omit the ticker for general market news.

`GET /news`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol of the company. Omit for broad market news. |
| `limit` | integer | No | The maximum number of news articles to return (default: 5, max: 10). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/news","method":"GET","query":{"ticker":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Search financial statements

Search for stocks by filtering across financial metrics from income statements, balance sheets, and cash flow statements.

`POST /financials/search/screener`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | integer | No | The maximum number of results to return. |
| `filters` | array | Yes | An array of filter objects to apply to the search. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/search/screener","body":{"limit":"<integer>","filters":"<array>"}}'
```

### Search specific financial metrics

Search for specific financial metrics across income statements, balance sheets, and cash flow statements for a list of tickers.

`POST /financials/search/line-items`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `line_items` | array | Yes | An array of line items to apply to the search. |
| `tickers` | array | Yes | An array of tickers to apply to the search. |
| `period` | string | No | The time period for the financial data. |
| `limit` | integer | No | The maximum number of results to return. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/search/line-items","body":{"line_items":"<array>","tickers":"<array>","period":"<string>","limit":"<integer>"}}'
```

### List tickers currently held by any 13F filer (discovery)

Returns the list of ticker symbols that appear as held securities across 13F filings. No API key required.

`GET /institutional-holdings/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/institutional-holdings/tickers","method":"GET"}'
```

### Get company facts

Get company facts for a ticker.

`GET /company/facts`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. |
| `cik` | string | No | The CIK of the company. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/company/facts","method":"GET","query":{"ticker":"<string>","cik":"<string>"}}'
```

### Get the result of an accepted filing items request

Poll the result of a filing items request that returned 202 Accepted. While the filing is being prepared this returns a processing status. When ready, it returns the same payload as GET /filings/items; you are billed once, on the first response that contains data. If the filing could not be prepared, it returns a failed status and you can re-request GET /filings/items with your original parameters.

`GET /filings/items/requests/{request_id}`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `request_id` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |

```bash
# Replace {request_id} in "path" with real values before sending
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/filings/items/requests/{request_id}","method":"GET"}'
```

### Get income statement segments

Get income statement segment breakdowns (revenue, operating income, depreciation) by product and business segment.

`GET /financials/income-statements/segments`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the data. |
| `limit` | integer | No | The maximum number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/income-statements/segments","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get all segmented financials

Get segment breakdowns from all three financial statement types (income statement, balance sheet, cash flow) in a single API call.

`GET /financials/segments`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the data. |
| `limit` | integer | No | The maximum number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/segments","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get earnings snapshot

Get the most recent earnings snapshot for a ticker. Optional change fields are returned only when available.

`GET /earnings`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The ticker symbol (e.g. `AAPL`). |
| `limit` | integer | No | Number of most-recent **report periods** worth of filings to return, sorted by `(report_period DESC, filing_date ASC)`. The number of entries returned may exceed `limit` when a recent period has both an 8-K and a 10-Q / 10-K. Values above 40 are clamped to 40. Non-positive or non-integer values return 400. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/earnings","method":"GET","query":{"ticker":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Get financial metrics

Get financial metrics for a ticker, including valuation, profitability, efficiency, liquidity, leverage, growth, and per share metrics.

`GET /financial-metrics`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol of the company. Required if cik is not provided. |
| `cik` | string | No | The Central Index Key (CIK) of the company. Can be used instead of ticker. |
| `period` | string | Yes | The time period for the financial data. |
| `limit` | integer | No | The maximum number of results to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financial-metrics","method":"GET","query":{"ticker":"<string>","cik":"<string>","period":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Price Snapshot (Real-Time)

Get the real-time price snapshot for a stock, including the current price, day change, and day change percent.

`GET /prices/snapshot`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The stock ticker symbol (e.g. AAPL, MSFT). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/prices/snapshot","method":"GET","query":{"ticker":"<string>"}}'
```

### Available CIKs for company facts

Returns a list of available CIKs for the company facts endpoint. This endpoint is free and does not require authentication.

`GET /company/facts/ciks`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/company/facts/ciks","method":"GET"}'
```

### Available tickers for financial metrics snapshots

Returns a list of available tickers for the financial metrics snapshot endpoint. This endpoint is free and does not require authentication.

`GET /financial-metrics/snapshot/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financial-metrics/snapshot/tickers","method":"GET"}'
```

### Available SEC filing types

Returns a sorted list of valid SEC filing types (e.g., 10-K, 10-Q, 8-K). This endpoint is free and does not require authentication.

`GET /filings/types`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/filings/types","method":"GET"}'
```

### Available tickers for price history

Returns a list of available tickers for the prices endpoint. This endpoint is free and does not require authentication.

`GET /prices/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/prices/tickers","method":"GET"}'
```

### Available central banks

Returns a list of available central bank codes for the interest rates endpoints. This endpoint is free and does not require authentication.

`GET /macro/interest-rates/banks`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/macro/interest-rates/banks","method":"GET"}'
```

### Available screener filter fields

Returns a list of available filter fields, valid values, and operators for the stock screener endpoint. This endpoint is free and does not require authentication.

`GET /financials/search/screener/filters`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/search/screener/filters","method":"GET"}'
```

### Available tickers for earnings

Returns a list of available tickers for the earnings endpoint. This endpoint is free and does not require authentication.

`GET /earnings/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/earnings/tickers","method":"GET"}'
```

### Available tickers for SEC filings

Returns a list of available tickers for the filings endpoint. This endpoint is free and does not require authentication.

`GET /filings/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/filings/tickers","method":"GET"}'
```

### Available CIKs for SEC filings

Returns a list of available CIKs for the filings endpoint. This endpoint is free and does not require authentication.

`GET /filings/ciks`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/filings/ciks","method":"GET"}'
```

### Get available KPI tickers

Returns a list of tickers that have KPI metrics available.

`GET /kpi/metrics/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/kpi/metrics/tickers","method":"GET"}'
```

### Get available KPI sectors

Returns a list of sectors that have KPI metrics available.

`GET /kpi/metrics/sectors`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/kpi/metrics/sectors","method":"GET"}'
```

### Get non-GAAP metrics

Get non-GAAP financial metrics with GAAP equivalents and key adjustments.

`GET /kpi/non-gaap`

**Estimated cost:** $0.2

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The ticker symbol. |
| `metric_name` | string | No | Filter to a specific metric. |
| `period` | string | No | Filter by period type: quarterly or annual. |
| `report_period_gte` | string | No | Only return metrics on or after this date (YYYY-MM-DD). |
| `report_period_lte` | string | No | Only return metrics on or before this date (YYYY-MM-DD). |
| `limit` | integer | No | Number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/kpi/non-gaap","method":"GET","query":{"ticker":"<string>","metric_name":"<string>","period":"<string>","report_period_gte":"<string>","report_period_lte":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### List available fund tickers (discovery)

Returns the list of fund ticker symbols available in the API. No API key required.

`GET /index-funds/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/index-funds/tickers","method":"GET"}'
```

### Available filing item types

Returns a list of extractable item sections for 10-K, 10-Q, and 8-K filings. This endpoint is free and does not require authentication.

`GET /filings/items/types`

**Cost:** Free

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `filing_type` | string | No | Optional filter by filing type (e.g., 10-K, 10-Q). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/filings/items/types","method":"GET","query":{"filing_type":"<string>"}}'
```

### Get cash flow statements

Get cash flow statements for a ticker.

`GET /financials/cash-flow-statements`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the cash flow statements. |
| `limit` | integer | No | The maximum number of cash flow statements to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/cash-flow-statements","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Available tickers for company facts

Returns a list of available tickers for the company facts endpoint. This endpoint is free and does not require authentication.

`GET /company/facts/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/company/facts/tickers","method":"GET"}'
```

### Available tickers for price snapshots

Returns a list of available tickers for the price snapshot endpoint. This endpoint is free and does not require authentication.

`GET /prices/snapshot/tickers`

**Cost:** Free

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/prices/snapshot/tickers","method":"GET"}'
```

### Financial Metrics Snapshot (Real-Time)

Get the real-time financial metrics snapshot for a stock, including valuation ratios, profitability, efficiency, liquidity, leverage, growth, and per share metrics.

`GET /financial-metrics/snapshot`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol of the company. |
| `cik` | string | No | The Central Index Key (CIK) of the company. Can be used instead of ticker. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financial-metrics/snapshot","method":"GET","query":{"ticker":"<string>","cik":"<string>"}}'
```

### Market Snapshot (Real-Time)

Get the real-time price snapshot for the entire market. Requires an active subscription.

`GET /prices/snapshot/market`

**Estimated cost:** $0.025

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/prices/snapshot/market","method":"GET"}'
```

### Get balance sheet (as-reported)

Get the as-filed balance sheet hierarchy. Each line item is returned exactly as it appears on the face of the 10-K or 10-Q, with parent-child relationships preserved in the `children` field.

`GET /financials/balance-sheets/as-reported`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the data. |
| `limit` | integer | No | The maximum number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/balance-sheets/as-reported","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get SEC filings

Get SEC filings for a company.

`GET /filings`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `ticker` | string | No | The ticker symbol. |
| `filing_type` | array | No | Filter by one or more filing types. Repeat the query parameter to pass multiple values (e.g. filing_type=10-Q&filing_type=10-K). |
| `limit` | integer | No | The maximum number of filings to return (default: 10). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/filings","method":"GET","query":{"cik":"<string>","ticker":"<string>","filing_type":"<array>","limit":"<integer>","cursor":"<string>"}}'
```

### Get activist stakes

Get activist stakes (SEC Schedule 13D: holders of more than 5% of a class of shares with intent to influence control), one row per reporting person. Query by ticker (who holds activist stakes in this company) or by filer_cik (what stakes does this activist hold); provide exactly one of the two. By default each stake's current state is returned; set history=true for the full amendment chain. This endpoint is the activist-only view of /beneficial-ownership.

`GET /activist-ownership`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol of the subject company. Provide ticker or filer_cik, not both. |
| `filer_cik` | string | No | The SEC CIK of the filer (the beneficial owner). Provide ticker or filer_cik, not both. Use the /activist-ownership/filers endpoint to look up CIKs by owner name. |
| `history` | boolean | No | When true, returns the full amendment history of each stake instead of only its current state. |
| `filing_date` | string | No | Filter by exact filing date in YYYY-MM-DD format. |
| `filing_date_gte` | string | No | Filter by filing date greater than or equal to this date (YYYY-MM-DD). |
| `filing_date_lte` | string | No | Filter by filing date less than or equal to this date (YYYY-MM-DD). |
| `filing_date_gt` | string | No | Filter by filing date greater than this date (YYYY-MM-DD). |
| `filing_date_lt` | string | No | Filter by filing date less than this date (YYYY-MM-DD). |
| `limit` | integer | No | The total number of rows to return (default: 10; no maximum). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/activist-ownership","method":"GET","query":{"ticker":"<string>","filer_cik":"<string>","history":"<boolean>","filing_date":"<string>","filing_date_gte":"<string>","filing_date_lte":"<string>","filing_date_gt":"<string>","filing_date_lt":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Get KPI metrics

Get sector-specific operational KPIs for a ticker. Includes metrics like load factor, CET1 ratio, same-store sales, FFO per share, and more. Sourced from SEC 8-K earnings releases.

`GET /kpi/metrics`

**Estimated cost:** $0.2

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The ticker symbol. |
| `metric_name` | string | No | Filter to a specific metric (e.g., load_factor, cet1_ratio). |
| `period` | string | No | Filter by period type: quarterly or annual. |
| `report_period_gte` | string | No | Only return metrics on or after this date (YYYY-MM-DD). |
| `report_period_lte` | string | No | Only return metrics on or before this date (YYYY-MM-DD). |
| `limit` | integer | No | Number of periods to return. Returns all metrics for the N most recent periods. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/kpi/metrics","method":"GET","query":{"ticker":"<string>","metric_name":"<string>","period":"<string>","report_period_gte":"<string>","report_period_lte":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Find an investor's CIK by name (discovery)

Returns up to 100 distinct institutional filers (CIK + name). Use the optional `name` parameter for case-insensitive prefix search. No API key required.

`GET /institutional-holdings/investors`

**Cost:** Free

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Optional case-insensitive prefix to filter filer names (e.g., `BERK`). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/institutional-holdings/investors","method":"GET","query":{"name":"<string>"}}'
```

### Get all as-reported financials

Get the as-filed hierarchies for income statement, balance sheet, and cash flow statement in a single API call. Each period contains three nested objects; any one may be null if data is missing.

`GET /financials/as-reported`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the data. |
| `limit` | integer | No | The maximum number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/as-reported","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get historical stock price data

Get end-of-day (EOD) historical price data for stocks.

`GET /prices`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The stock ticker symbol (e.g. AAPL, MSFT). |
| `interval` | string | Yes | The time interval for the price data. |
| `start_date` | string | Yes | The start date for the price data (format: YYYY-MM-DD). |
| `end_date` | string | Yes | The end date for the price data (format: YYYY-MM-DD). |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/prices","method":"GET","query":{"ticker":"<string>","interval":"<string>","start_date":"<string>","end_date":"<string>","cursor":"<string>"}}'
```

### Get forward guidance

Get structured forward guidance from earnings releases. Returns ranges, point estimates, and directional signals.

`GET /kpi/guidance`

**Estimated cost:** $0.2

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The ticker symbol. |
| `metric_name` | string | No | Filter to a specific metric. |
| `period` | string | No | Filter by period type: quarterly or annual. |
| `report_period_gte` | string | No | Only return guidance on or after this date (YYYY-MM-DD). |
| `report_period_lte` | string | No | Only return guidance on or before this date (YYYY-MM-DD). |
| `limit` | integer | No | Number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/kpi/guidance","method":"GET","query":{"ticker":"<string>","metric_name":"<string>","period":"<string>","report_period_gte":"<string>","report_period_lte":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Get balance sheet segments

Get balance sheet segment breakdowns (assets, goodwill, long-lived assets) by business segment.

`GET /financials/balance-sheets/segments`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the data. |
| `limit` | integer | No | The maximum number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/balance-sheets/segments","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get all financial statements

Get all financial statements for a ticker.

`GET /financials`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the financial statements. |
| `limit` | integer | No | The maximum number of financial statements to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get SEC filing items

Get the raw text Items from an SEC filing.

`GET /filings/items`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The ticker symbol. |
| `filing_type` | string | Yes | The type of filing. |
| `year` | integer | Yes | The year of the filing. |
| `quarter` | integer | No | The quarter of the filing if 10-Q. |
| `item` | string | No | The item to get. |
| `accession_number` | string | No | The accession number of the filing if 8-K. |
| `include_exhibits` | boolean | No | Whether to include raw text from linked exhibits. Only for 8-K filings. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/filings/items","method":"GET","query":{"ticker":"<string>","filing_type":"<string>","year":"<integer>","quarter":"<integer>","item":"<string>","accession_number":"<string>","include_exhibits":"<boolean>"}}'
```

### Get 13F institutional holdings

Query 13F institutional holdings by filer CIK or by held ticker. Provide exactly one of `filer_cik` or `ticker`. When no `report_period` filter is supplied, `?filer_cik=...` returns the filer's most recent 13F and `?ticker=...` returns one position per institutional filer whose most recent 13F currently includes the ticker (filers who have since dropped the position are excluded).

`GET /institutional-holdings`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `filer_cik` | string | No | The 10-digit zero-padded SEC CIK of the institutional filer. Mutually exclusive with `ticker`. |
| `ticker` | string | No | The held security's ticker symbol. Mutually exclusive with `filer_cik`. Without a `report_period` filter, returns one position per institutional filer whose most recent 13F currently includes this ticker. |
| `limit` | integer | No | The total number of rows to return (default: 10; no maximum). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/institutional-holdings","method":"GET","query":{"filer_cik":"<string>","ticker":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Get cash flow statement segments

Get cash flow statement segment breakdowns (capital expenditure) by business segment.

`GET /financials/cash-flow-statements/segments`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the data. |
| `limit` | integer | No | The maximum number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/cash-flow-statements/segments","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get cash flow statement (as-reported)

Get the as-filed cash flow statement hierarchy. Each line item is returned exactly as it appears on the face of the 10-K or 10-Q, with parent-child relationships preserved in the `children` field.

`GET /financials/cash-flow-statements/as-reported`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the data. |
| `limit` | integer | No | The maximum number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/cash-flow-statements/as-reported","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get balance sheets

Get balance sheets for a ticker.

`GET /financials/balance-sheets`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the balance sheets. |
| `limit` | integer | No | The maximum number of balance sheets to return This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/balance-sheets","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get income statements

Get income statements for a ticker.

`GET /financials/income-statements`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the income statements. |
| `limit` | integer | No | The maximum number of income statements to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/income-statements","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get IPO filings

Get SEC registration statements (Form S-1 and S-1/A), newest filings first. Every filing is classified (ipo, shell_company, spac, resale, or other) with structured cover-page metadata: proposed ticker, exchange, and expected offering price or price range. For IPO-grade filings whose financial statements have been extracted, the item embeds full income statements, balance sheets, and cash flow statements under financials, in the same shape as the /financials endpoints. No parameters are required: by default the latest filings across all companies are returned.

`GET /ipos`

**Estimated cost:** $0.2

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Filter by the proposed ticker symbol from the filing's cover page. |
| `cik` | string | No | Filter by the SEC Central Index Key of the filer, with or without leading zeros. |
| `classification` | string | No | Filter by filing classification: ipo (a real operating company registering to list on an exchange), shell_company, spac, resale, or other. |
| `limit` | integer | No | The total number of rows to return (default: 10; no maximum). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/ipos","method":"GET","query":{"ticker":"<string>","cik":"<string>","classification":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Get beneficial ownership

Get beneficial-ownership stakes (SEC Schedules 13D and 13G: holders of more than 5% of a class of shares), one row per reporting person. Query by ticker (who owns this company) or by filer_cik (what stakes does this filer hold); provide exactly one of the two. By default each stake's current state is returned; set history=true for the full amendment chain. Use type=activist for 13D stakes (intent to influence control) or type=passive for 13G stakes.

`GET /beneficial-ownership`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol of the subject company. Provide ticker or filer_cik, not both. |
| `filer_cik` | string | No | The SEC CIK of the filer (the beneficial owner). Provide ticker or filer_cik, not both. Use the /beneficial-ownership/filers endpoint to look up CIKs by owner name. |
| `type` | string | No | Filter by stake type: activist (Schedule 13D) or passive (Schedule 13G). |
| `history` | boolean | No | When true, returns the full amendment history of each stake instead of only its current state. |
| `filing_date` | string | No | Filter by exact filing date in YYYY-MM-DD format. |
| `filing_date_gte` | string | No | Filter by filing date greater than or equal to this date (YYYY-MM-DD). |
| `filing_date_lte` | string | No | Filter by filing date less than or equal to this date (YYYY-MM-DD). |
| `filing_date_gt` | string | No | Filter by filing date greater than this date (YYYY-MM-DD). |
| `filing_date_lt` | string | No | Filter by filing date less than this date (YYYY-MM-DD). |
| `limit` | integer | No | The total number of rows to return (default: 10; no maximum). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/beneficial-ownership","method":"GET","query":{"ticker":"<string>","filer_cik":"<string>","type":"<string>","history":"<boolean>","filing_date":"<string>","filing_date_gte":"<string>","filing_date_lte":"<string>","filing_date_gt":"<string>","filing_date_lt":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Get income statement (as-reported)

Get the as-filed income statement hierarchy. Each line item is returned exactly as it appears on the face of the 10-K or 10-Q, with parent-child relationships preserved in the `children` field.

`GET /financials/income-statements/as-reported`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The ticker symbol. Required if cik is not provided. |
| `period` | string | Yes | The time period of the data. |
| `limit` | integer | No | The maximum number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cik` | string | No | The Central Index Key (CIK) of the company. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/financials/income-statements/as-reported","method":"GET","query":{"ticker":"<string>","period":"<string>","limit":"<integer>","cik":"<string>","cursor":"<string>"}}'
```

### Get insider ownership

Get insider ownership statements from SEC Forms 3 and 5, one row per reported holding. Positions are returned as reported per filing (point-in-time ownership statements), newest filings first. A Form 3 is an insider's initial statement of what they own; a Form 5 is the annual statement.

`GET /insider-ownership`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The ticker symbol of the company. |
| `name` | string | No | Filter by insider name (case-insensitive contains). Use the /insider-ownership/names endpoint to get available names for a ticker. |
| `form_type` | string | No | Filter by SEC form type: 3 for initial ownership statements, 5 for annual statements (or their amendments 3/A, 5/A). |
| `filing_date` | string | No | Filter by exact filing date in YYYY-MM-DD format. |
| `filing_date_gte` | string | No | Filter by filing date greater than or equal to this date (YYYY-MM-DD). |
| `filing_date_lte` | string | No | Filter by filing date less than or equal to this date (YYYY-MM-DD). |
| `filing_date_gt` | string | No | Filter by filing date greater than this date (YYYY-MM-DD). |
| `filing_date_lt` | string | No | Filter by filing date less than this date (YYYY-MM-DD). |
| `limit` | integer | No | The total number of rows to return (default: 10; no maximum). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/insider-ownership","method":"GET","query":{"ticker":"<string>","name":"<string>","form_type":"<string>","filing_date":"<string>","filing_date_gte":"<string>","filing_date_lte":"<string>","filing_date_gt":"<string>","filing_date_lt":"<string>","limit":"<integer>","cursor":"<string>"}}'
```

### Get insider trades

Get insider trades like buys and sells for a ticker by a company insider.

`GET /insider-trades`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The ticker symbol of the company. |
| `limit` | integer | No | The maximum number of transactions to return (default: 10). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `name` | string | No | Filter by insider name (e.g., 'Jen Hsun Huang'). Use the /insider-trades/names endpoint to get available names for a ticker. |
| `transaction_type` | string | No | Filter by transaction type (e.g., 'Open market sale', 'Gift'). Use the /insider-trades/transaction-types endpoint to get available types. |
| `form_type` | string | No | Filter by SEC form type: 4 for trades, 5 for annual statements (or their amendments 4/A, 5/A). |
| `filing_date` | string | No | Filter by exact filing date in YYYY-MM-DD format. |
| `filing_date_gte` | string | No | Filter by filing date greater than or equal to this date (YYYY-MM-DD). |
| `filing_date_lte` | string | No | Filter by filing date less than or equal to this date (YYYY-MM-DD). |
| `filing_date_gt` | string | No | Filter by filing date greater than this date (YYYY-MM-DD). |
| `filing_date_lt` | string | No | Filter by filing date less than this date (YYYY-MM-DD). |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/insider-trades","method":"GET","query":{"ticker":"<string>","limit":"<integer>","name":"<string>","transaction_type":"<string>","form_type":"<string>","filing_date":"<string>","filing_date_gte":"<string>","filing_date_lte":"<string>","filing_date_gt":"<string>","filing_date_lt":"<string>","cursor":"<string>"}}'
```

### Get ETF / index-fund holdings

Query fund holdings in two directions. Provide exactly one of `ticker` or `holding`. `?ticker=SPY` returns a fund's constituents and each position's weight (the fund's latest filing by default, or the composition in effect on/before `as_of`). `?holding=AAPL` returns the funds whose latest filing holds that security, sorted by weight.

`GET /index-funds`

**Estimated cost:** $0.025

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The fund's ticker symbol (e.g., `SPY`). Returns that fund's holdings. Mutually exclusive with `holding`. |
| `holding` | string | No | A held security's ticker symbol (e.g., `AAPL`). Returns the funds whose latest filing holds it. Mutually exclusive with `ticker`. |
| `as_of` | string | No | Only valid with `ticker`. Returns the fund composition in effect on or before this date (YYYY-MM-DD). Without it, the fund's latest filing is returned. |
| `asset_class` | string | No | Only valid with `ticker`. Filter constituents by instrument type: `equity` or `bond`. Omit for all holdings. |
| `limit` | integer | No | The total number of rows to return (default: 50; no maximum). This is the total across all pages, not a page size: each page holds up to 10 records, linked by `next_page_url`. |
| `offset` | integer | No | The number of rows to skip, for pagination (default: 0). |
| `cursor` | string | No | Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"financial-datasets-api","path":"/index-funds","method":"GET","query":{"ticker":"<string>","holding":"<string>","as_of":"<string>","asset_class":"<string>","limit":"<integer>","offset":"<integer>","cursor":"<string>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/financial-datasets-api
