Get startedDashboard

MCP server

Connect Claude, ChatGPT, Cursor, VS Code or another MCP client to xfinlink and ask for data in plain English.

View llms.txt

The xfinlink MCP server exposes the API as 11 tools that an AI assistant can call. The assistant turns your question into a tool call, the server runs the matching REST request with your key, and the assistant reads the JSON it gets back. Plan limits, quotas and paid endpoints work as they do on REST.

Server details

  • URL: https://api.xfinlink.com/mcp
  • Transport: Streamable HTTP. Each JSON-RPC 2.0 message is an HTTP POST. When the Accept header includes text/event-stream, the reply is one server-sent message event; otherwise it is application/json.
  • Protocol version: 2025-03-26. The server answers with this version whatever version the client asks for.
  • Server name xfinlink, version 0.9.0. Capabilities: tools only. There are no prompts or resources.
  • Sessions: the server issues no Mcp-Session-Id. Each request stands on its own.
  • Authentication: your API key in the X-API-Key header, in the Authorization header as Bearer YOUR_API_KEY, or in the api_key query parameter as https://api.xfinlink.com/mcp?api_key=YOUR_API_KEY. Use a header wherever your client supports custom headers.
Terminal
curl -s https://api.xfinlink.com/mcp \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-client","version":"1.0"}}}'
response
event: message
data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"tools":{}},"serverInfo":{"name":"xfinlink","version":"0.9.0","description":"Financial data API — prices, fundamentals, metrics, entity resolution for US equities, 46,000+ companies including delisted. Daily prices from 1962."}}}

Every method needs a key. Without one, the server answers with HTTP status 200 and a JSON-RPC error that carries the request's id. The message names the cause: no key sent, a key sent in another header or parameter, a malformed key, a revoked key or an unrecognised key. The same request without the X-API-Key header returns:

response.json
{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"No API key was sent. Pass your key in the X-API-Key header or the ?api_key= query parameter. Get one free at https://xfinlink.com/signup"}}

Get a key from your dashboard. See Authentication.

Set up your client

Every client needs the server URL and your key. Replace YOUR_API_KEY with your key; treat any file that contains it as a secret.

Claude

Add xfinlink as a custom connector. Custom connectors are available on the Free plan (one custom connector), Pro, Max, Team and Enterprise. On Team and Enterprise, an Owner adds the connector under Organization settings, then Connectors.

  1. Open Customize, then Connectors.
  2. Click the + button, then Add custom connector.
  3. Name it xfinlink and paste the URL https://api.xfinlink.com/mcp?api_key=YOUR_API_KEY. If a sign-in method is requested, choose No sign-in.
  4. Click Add.
  5. In a chat, click the + button, then Connectors, and turn on xfinlink.

Claude Desktop config file

Claude Desktop can also start a local bridge from its configuration file. Open Settings from the Claude menu in the system menu bar, then Developer, then Edit Config. Add the entry below to claude_desktop_config.json, save the file, and quit and restart Claude Desktop. The bridge runs with npx, which comes with Node.js.

claude_desktop_config.json
{
  "mcpServers": {
    "xfinlink": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.xfinlink.com/mcp?api_key=YOUR_API_KEY"]
    }
  }
}

Claude Code

Terminal
claude mcp add --transport http --scope user xfinlink "https://api.xfinlink.com/mcp?api_key=YOUR_API_KEY"

--scope user makes the server available in every project. Then run /mcp in a Claude Code session to see the server's status.

Cursor

Create .cursor/mcp.json in your project, or ~/.cursor/mcp.json for every project:

.cursor/mcp.json
{
  "mcpServers": {
    "xfinlink": {
      "url": "https://api.xfinlink.com/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Cursor also accepts "X-API-Key": "${env:XFINLINK_API_KEY}" to read the key from your environment.

VS Code

Create .vscode/mcp.json in your workspace. The inputs entry makes VS Code ask for the key once and store it, so the file holds no secret.

.vscode/mcp.json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "xfinlink-key",
      "description": "xfinlink API key",
      "password": true
    }
  ],
  "servers": {
    "xfinlink": {
      "type": "http",
      "url": "https://api.xfinlink.com/mcp",
      "headers": {
        "X-API-Key": "${input:xfinlink-key}"
      }
    }
  }
}

Start the server from the MCP: List Servers command, then use its tools from the Chat view.

ChatGPT

Custom connectors run in developer mode, on ChatGPT on the web, with a Plus, Pro, Business, Enterprise or Edu plan.

  1. Open Settings, then Security and login, and turn on Developer mode. On some accounts the switch is under Apps, then Advanced settings.
  2. Under Plugins, click the + button. Name it xfinlink, enter the URL https://api.xfinlink.com/mcp?api_key=YOUR_API_KEY, set Authentication to No Authentication, and click Create.
  3. In a chat, click the + button, then Developer mode, and select xfinlink.

Other clients

Any client that speaks Streamable HTTP can connect with the URL and the X-API-Key header or Authorization: Bearer YOUR_API_KEY, or with the URL that carries api_key. For a client that only runs local commands, use the mcp-remote bridge shown for Claude Desktop.

Tool results

A successful tools/call returns one content item of type text. The text is the REST response body as a JSON string, meta included, exactly as GET https://api.xfinlink.com/v1/... returns it.

Terminal
curl -s https://api.xfinlink.com/mcp \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_metrics","arguments":{"ticker":"AAPL","period_type":"ttm","fields":"pe_ratio"}}}'
response.json
{"jsonrpc":"2.0","id":2,"result":{"content":[{"type":"text","text":"{\"data\":[{\"entity_id\":1,\"ticker\":\"AAPL\",\"entity_name\":\"APPLE INC\",\"period_end\":\"2026-06-27\",\"period_type\":\"ttm\",\"fiscal_year\":2026,\"fiscal_period\":\"Q3\",\"source\":\"filing\",\"basis\":\"ttm\",\"priced_on\":\"2026-09-25\",\"shares_as_of\":\"2026-07-17\",\"shares_source\":\"filing\",\"pe_ratio\":39.11353211009175}],\"meta\":{\"tickers_requested\":[\"AAPL\"],\"tickers_resolved\":{\"AAPL\":1},\"tickers_unresolved\":[],\"tickers_resolved_via\":{\"AAPL\":\"security_alias\"},\"count\":1,\"limit\":20,\"has_more\":false,\"next_cursor\":null,\"units\":\"millions_usd\",\"entity_id_basis\":\"issuer\",\"market_cap_basis\":\"issuer_all_share_classes\",\"per_share_basis\":\"split_adjusted_to_price_date\",\"knowledge_time\":\"2026-09-26T12:48:18Z\", ... }}"}]}}

The server does not truncate results. A get_prices result of 1,000 rows, the default limit, is about 500,000 characters of JSON. Large results use more of the assistant's context, so ask for narrow date ranges, a limit, or named fields where the tool accepts them.

Each tool call returns one page. The tools take no cursor argument, so when meta.has_more is true, ask for a narrower date range or a later start to reach the remaining rows.

Errors in tool results

When the REST request fails, the result carries "isError": true and the REST error body, code included, as its text. With a Free key, a paid tool whose arguments pass the checks returns the 402 body:

tool result
{"tool": "get_insiders", "arguments": {"ticker": "AAPL", "start": "2026-09-01"}}
{
  "content": [
    {
      "type": "text",
      "text": "{\"error\":\"upgrade_required\",\"code\":\"upgrade_required\",\"status\":402,\"detail\":\"Insider transactions are available on Pro. https://xfinlink.com/pricing\"}"
    }
  ],
  "isError": true
}
statuserror codewhen it happenshow to fix
JSON-RPC -32000key refusedThe key is missing, sent in another header or parameter, malformed, revoked or not recognised. The message names the cause.Send a valid key in the X-API-Key header, as Authorization: Bearer or in the api_key query parameter.
JSON-RPC -32000Temporarily blocked or Account temporarily disabledAccess is temporarily refused: Temporarily blocked to requests from the sending IP address that carry no valid API key, Account temporarily disabled to the account.Contact hello@xfinlink.com.
JSON-RPC -32601Method not foundThe client called a method other than initialize, notifications/initialized, tools/list or tools/call, for example prompts/list.Use tools only.
JSON-RPC -32700Parse errorThe request body is not valid JSON.Send a JSON-RPC 2.0 object.
tool result, isErrorUnknown toolThe tool name is not one of the 11 below. The text is {"error":"Unknown tool","tool":"get_quotes"}.Call tools/list for the names.
tool result, isErrorthe REST error codeThe REST request returned 400, 402, 404, 409 or 429, for example {"error":"not_found","code":"not_found","status":404,"detail":"No matching entities for: ZZZZZZ"}.See Errors.

Plans and quotas

A tool call runs under your key's plan. get_insiders, get_holdings, get_manager_holdings and search_managers need Pro or higher; with a Free key they return the 402 body shown above. On Free, the one-ticker cap and the 12-month history window apply as on REST: get_prices, get_fundamentals, get_metrics and get_index_events move an earlier start to the date one year before today. Each call counts against the same request and row quotas as a REST request, one unit per ticker; initialize and tools/list count nothing. MCP responses carry no rate-limit headers; read your usage from a REST response or the dashboard. See Rate limits.

get_index calls with an as_of date count against the same allowance of distinct as_of dates as REST roster requests: 51 per UTC day on Free, unlimited on paid plans.

Tool reference

The server lists 11 tools. The tables show the arguments the server applies; each is passed to the REST parameter of the same name and takes the same values. Follow the link on each tool for accepted values and units.

get_prices

Daily OHLCV bars with adjusted close, total return, dividends and splits. Runs Prices. Prices are USD per share; shares_outstanding is a share count.

tickerstringRequired unless entity_id is given

One ticker or a comma-separated list, for example "AAPL,MSFT".

entity_idstringDefault: none

One id or a comma-separated list, from resolve_ticker or search. Cannot be combined with ticker.

startstringDefault: earliest bar

First date, YYYY-MM-DD, inclusive. Omitted: the result starts at the security's first bar (on Free, one year back), so pass start for recent data.

endstringDefault: latest bar

Last date, YYYY-MM-DD, inclusive.

intervalstringDefault: "1d"

"1d", "3d", "1w", "1mo", "3mo", "6mo" or "1y". Longer intervals aggregate the daily bars.

limitintegerDefault: 1000

Rows returned, at most 5,000.

get_fundamentals

Income statement, balance sheet and cash-flow lines per fiscal period. Runs Fundamentals. Money is in millions of the currency named in each row's currency, USD on a USD row, and per-share values are in that currency per share. field_currency names a value in another currency than its row's.

tickerstringRequired unless entity_id is given

One ticker or a comma-separated list.

entity_idstringDefault: none

Issuer ids, comma-separated. A share-class id returns no rows.

period_typestringDefault: "all"

"annual", "quarterly" or "all".

versionstringDefault: "restated"

"restated", "original" or "all".

viewstringDefault: "latest"

"latest" for one row per period, or "as_reported" for every filed version.

as_ofstringDefault: none

Knowledge date, YYYY-MM-DD: the figures available on that date.

fieldsstringDefault: all fields

Comma-separated field names, for example "revenue,net_income".

startstringDefault: earliest period

Earliest period_end, YYYY-MM-DD. Omitted: the result starts at the first period on record (on Free, one year back).

endstringDefault: none

Latest period_end, YYYY-MM-DD.

fiscal_yearintegerDefault: none

Exact fiscal year.

period_endstringDefault: none

Exact period_end, YYYY-MM-DD.

limitintegerDefault: 1000

Rows returned, at most 5,000.

get_metrics

Computed valuation, profitability, leverage, growth and volatility metrics. Runs Metrics. Ratios are decimals; market_cap and enterprise_value are millions of USD.

tickerstringRequired unless entity_id is given

One ticker or a comma-separated list.

entity_idstringDefault: none

Issuer ids, comma-separated.

period_typestringDefault: "annual"

"annual", "quarterly", "ttm" or "daily".

fieldsstringDefault: all metrics

Comma-separated metric or category names, for example "pe_ratio" or "valuation". See Metrics catalogue.

growth_basisstringDefault: "yoy"

"yoy", "qoq" or "ttm_yoy".

as_ofstringDefault: none

Knowledge date, YYYY-MM-DD: the metrics knowable on that date.

startstringDefault: earliest period

Earliest period_end, YYYY-MM-DD. Omitted with annual or quarterly: the result starts at the first period on record (on Free, one year back).

endstringDefault: none

Latest period_end, YYYY-MM-DD.

limitintegerDefault: 20

Rows returned, at most 100.

resolve_ticker

Every entity that has used a ticker, with FIGI, CIK, grain, share class and exchange, the current holder first. Runs Resolve with your key and returns the same body as GET /v1/resolve/{ticker} with that key, including ticker_valid_from, ticker_valid_to, classifications and index_membership. The call counts against your key's quotas.

tickerstringRequired

One ticker or a comma-separated list of up to 10.

datestringDefault: today

Resolve the ticker as it stood on that date, YYYY-MM-DD.

Find entities by name, ticker, sector or type. Runs Search.

qstringDefault: none

Match on company name or ticker.

gics_sectorstringDefault: none

Exact GICS sector, for example "Energy".

entity_typestringDefault: none

For example "corporation" or "etf".

limitintegerDefault: 50

Rows returned, at most 500.

get_index

Constituents of the S&P 500, Nasdaq-100 or Dow Jones Industrial Average, today or on a past date. Runs Index membership.

index_namestringDefault: "sp500"

"sp500", "ndx100" or "djia".

as_ofstringDefault: today

Membership on that date, YYYY-MM-DD.

limitintegerDefault: 1000

Rows returned, at most 1,000.

get_index_events

Index additions and removals as a dated event log, oldest first. Runs Index events.

index_namestringDefault: "sp500"

"sp500", "ndx100" or "djia".

startstringDefault: start of record

Earliest effective_date, YYYY-MM-DD. Omitted: the result starts at the start of the index's record (on Free, one year back).

endstringDefault: none

Latest effective_date, YYYY-MM-DD.

event_typestringDefault: both

"added" or "removed".

limitintegerDefault: 1000

Rows returned, at most 1,000.

offsetintegerDefault: 0

Rows to skip.

get_insiders

Insider transactions from SEC Forms 3, 4 and 5. Runs Insider transactions. Pro plan and above. transaction_price is USD per share; transaction_value is USD.

tickerstringRequired unless entity_id is given

One ticker or a comma-separated list.

entity_idstringDefault: none

Issuer or share-class ids; a share-class id returns its issuer's rows.

startstringDefault: none

Earliest transaction_date, YYYY-MM-DD.

endstringDefault: none

Latest transaction_date, YYYY-MM-DD.

transaction_typestringDefault: all

Comma-separated types, for example "open_market_sell".

acquisition_or_dispositionstringDefault: both

"A" or "D".

ownership_typestringDefault: both

"direct" or "indirect".

form_typestringDefault: all

"3", "4", "5", "3/A", "4/A" or "5/A".

insider_rolestringDefault: none

Case-insensitive substring of the role, for example "CEO".

insider_namestringDefault: none

Case-insensitive substring of the name.

min_valuenumberDefault: none

Minimum transaction_value, in USD.

include_amendmentsbooleanDefault: omitted

Omitted: the version in force for each filing. true: that version plus the versions it superseded. false: original filings only.

include_derivativesbooleanDefault: false

true adds derivative-table lines, flagged with is_derivative.

include_uncodedbooleanDefault: false

true adds archive-era rows that carry no SEC transaction code, with transaction_code null.

limitintegerDefault: 1000

Rows returned, at most 5,000.

get_holdings

Institutional Form 13F positions in a security, quarter by quarter. Runs Institutional holdings. Pro plan and above. shares is a reported share count; value_usd is whole USD.

tickerstringRequired unless entity_id is given

One ticker or a comma-separated list.

entity_idstringDefault: none

Share-class ids, comma-separated.

startstringDefault: none

Earliest report_date, YYYY-MM-DD.

endstringDefault: none

Latest report_date, YYYY-MM-DD.

quarterstringDefault: none

Exact quarter-end report_date, for example "2026-06-30".

managerstringDefault: none

Case-insensitive substring of manager_name.

manager_idintegerDefault: none

Exact manager id from search_managers.

min_sharesnumberDefault: none

Minimum share count.

min_valuenumberDefault: none

Minimum value_usd, in USD.

sourcestringDefault: by quarter

"historical" or "filing". Set: every quarter in the window comes from that era.

include_amendmentsbooleanDefault: omitted

Omitted: the position in force; see Holdings for how amendments combine. true: every filed version as its own row. false: original filings only, which leaves out a position whose only statement is an amendment.

fieldsstringDefault: all fields

Comma-separated field names. value_scale_corrected is returned only when named.

limitintegerDefault: 1000

Rows returned, at most 5,000.

get_manager_holdings

One manager's reported Form 13F portfolio, largest position first within each quarter. Runs Manager holdings. Pro plan and above. The result includes the manager object.

manager_idintegerRequired

Manager id from search_managers.

startstringDefault: none

Earliest report_date, YYYY-MM-DD.

endstringDefault: none

Latest report_date, YYYY-MM-DD.

quarterstringDefault: none

Exact quarter-end report_date.

min_sharesnumberDefault: none

Minimum share count.

min_valuenumberDefault: none

Minimum value_usd, in USD.

fieldsstringDefault: all fields

Comma-separated field names.

limitintegerDefault: 1000

Rows returned, at most 5,000.

search_managers

Find a Form 13F manager by name. Runs Manager search. Pro plan and above. Results cover managers that filed Form 13F from 2013 onward.

limitintegerDefault: 1000

Rows returned, at most 5,000.

Example prompts

Each example shows a prompt, the tool call it produced, and the tool result, trimmed with .... The assistant chooses the arguments; yours may differ.

Quarterly revenue and net income

prompt
What were Apple's revenue and net income in each quarter since October 2025?
tool result
{"tool": "get_fundamentals", "arguments": {"ticker": "AAPL", "period_type": "quarterly", "fields": "revenue,net_income", "start": "2025-10-01"}}
{
  "data": [
    {"entity_id": 1, "ticker": "AAPL", "entity_name": "APPLE INC", "gics_sector": "Information Technology", "period_end": "2025-12-27", "period_type": "quarterly", "fiscal_year": 2026, "fiscal_period": "Q1", "filing_date": "2026-01-30", "version": "original", "source": "filing", "currency": "USD", "revenue": 143756, "net_income": 42097},
    {"entity_id": 1, "ticker": "AAPL", "entity_name": "APPLE INC", "gics_sector": "Information Technology", "period_end": "2026-03-28", "period_type": "quarterly", "fiscal_year": 2026, "fiscal_period": "Q2", "filing_date": "2026-05-01", "version": "original", "source": "filing", "currency": "USD", "revenue": 111184, "net_income": 29578},
    {"entity_id": 1, "ticker": "AAPL", "entity_name": "APPLE INC", "gics_sector": "Information Technology", "period_end": "2026-06-27", "period_type": "quarterly", "fiscal_year": 2026, "fiscal_period": "Q3", "filing_date": "2026-07-31", "version": "original", "source": "filing", "currency": "USD", "revenue": 109417, "net_income": 29789}
  ],
  "meta": {"data_through": "2026-06-27", "latest_filing": "2026-07-31", "count": 3, "limit": 1000, "has_more": false, "units": "millions_usd", "entity_id_basis": "issuer", "view": "latest", ...}
}

revenue and net_income are millions of USD: 143,756 is 143.8 billion USD.

Daily closing prices

prompt
Show Microsoft's daily closing prices for 14 to 18 September 2026.
tool result
{"tool": "get_prices", "arguments": {"ticker": "MSFT", "start": "2026-09-14", "end": "2026-09-18"}}
{
  "data": [
    {"entity_id": 10000086, "ticker": "MSFT", "entity_name": "MICROSOFT CORP", "date": "2026-09-14", "open": 497.06, "high": 509.95, "low": 495.34, "close": 505.41, "adj_close": 505.41, "volume": 23091900, "return_daily": 0.01973246171539267, ...},
    {"entity_id": 10000086, "ticker": "MSFT", "date": "2026-09-15", "close": 497.12, ...},
    {"entity_id": 10000086, "ticker": "MSFT", "date": "2026-09-16", "close": 490.3, ...},
    {"entity_id": 10000086, "ticker": "MSFT", "date": "2026-09-17", "close": 497.75, ...},
    {"entity_id": 10000086, "ticker": "MSFT", "date": "2026-09-18", "close": 493.78, ...}
  ],
  "meta": {"entity_id_grain": "security", "adj_close_basis": "split", "count": 5, "limit": 1000, "has_more": false, ...}
}

Trailing P/E ratio

prompt
What is Apple's trailing twelve-month P/E ratio?
tool result
{"tool": "get_metrics", "arguments": {"ticker": "AAPL", "period_type": "ttm", "fields": "pe_ratio"}}
{
  "data": [
    {"entity_id": 1, "ticker": "AAPL", "entity_name": "APPLE INC", "period_end": "2026-06-27", "period_type": "ttm", "fiscal_year": 2026, "fiscal_period": "Q3", "source": "filing", "basis": "ttm", "priced_on": "2026-09-25", "shares_as_of": "2026-07-17", "shares_source": "filing", "pe_ratio": 39.11353211009175, "ttm_includes_derived_q4": false}
  ],
  "meta": {"count": 1, "limit": 20, "has_more": false, "units": "millions_usd", "entity_id_basis": "issuer", "market_cap_basis": "issuer_all_share_classes", ...}
}

pe_ratio is a ratio: the close on priced_on divided by trailing diluted EPS.

Index additions

prompt
Which companies joined the S&P 500 between February and May 2026?
tool result
{"tool": "get_index_events", "arguments": {"index_name": "sp500", "start": "2026-02-01", "end": "2026-05-31", "event_type": "added"}}
{
  "data": [
    {"entity_id": 10026156, "ticker": "CIEN", "entity_name": "Ciena", "index": "SP500", "event_type": "added", "effective_date": "2026-02-09", "member_grain": "security"},
    {"entity_id": 10001357, "ticker": "COHR", "entity_name": "Coherent Corp.", "index": "SP500", "event_type": "added", "effective_date": "2026-03-23", "member_grain": "security"},
    {"entity_id": 10032608, "ticker": "SATS", "entity_name": "EchoStar", ..., "effective_date": "2026-03-23"},
    {"entity_id": 10004418, "ticker": "LITE", "entity_name": "Lumentum", ..., "effective_date": "2026-03-23"},
    {"entity_id": 10006313, "ticker": "VRT", "entity_name": "Vertiv", ..., "effective_date": "2026-03-23"},
    {"entity_id": 10009318, "ticker": "CASY", "entity_name": "Casey's", ..., "effective_date": "2026-04-09"},
    {"entity_id": 10003320, "ticker": "VEEV", "entity_name": "Veeva Systems", ..., "effective_date": "2026-05-07"}
  ],
  "meta": {"index": "SP500", "coverage_end": "2026-09-29", "count": 7, "total": 7, "has_more": false, ...}
}

meta.total is the number of events that match the request; when it is larger than count, page with offset.

A recycled ticker

prompt
Which companies have traded under the ticker GM?
tool result
{"tool": "resolve_ticker", "arguments": {"ticker": "GM"}}
{
  "data": {
    "GM": {
      "entities": [
        {"entity_id": 10001879, "name": "GENERAL MOTORS CO", "entity_type": "corporation", "country": "US", "figi": "BBG000NDYB67", "cik": "0001467858", "entity_grain": "security", "issuer_entity_id": 5, "share_class": null, "instrument_type": "common", "exchange": "NYSE", "ticker_valid_from": "2010-11-18", "ticker_valid_to": null, "classifications": {...}, "index_membership": [...]},
        {"entity_id": 10001629, "name": "GENERAL MOTORS CORP", "entity_type": "corporation", "country": "US", "figi": null, "cik": "0000040730", "entity_grain": "security", "issuer_entity_id": 4, "share_class": null, "instrument_type": "common", "exchange": "NYSE", "ticker_valid_from": "1962-07-02", "ticker_valid_to": "2009-06-01", "classifications": {...}, "index_membership": [...]}
      ]
    }
  },
  "meta": {"tickers_requested": ["GM"], "resolved_as_of": "2026-09-27", "tickers_resolved_via": {"GM": "security_alias"}, ...}
}

The two companies have different CIKs, and the current holder of the ticker is listed first. get_prices with entity_id 10001629 returns the pre-2009 company's series, which ends on 2009-06-01; that history needs a paid plan.

A manager's largest positions

search_managers and get_manager_holdings need Pro or higher.

prompt
What were Berkshire Hathaway's five largest stock positions at the end of June 2026?
tool result
{"tool": "search_managers", "arguments": {"search": "berkshire hathaway"}}
{
  "data": [
    {"manager_id": 1067983, "manager_name": "Berkshire Hathaway Inc", "manager_type": null, "country": null, "cik": "0001067983", "first_quarter": "2013-06-30", "last_quarter": "2026-06-30", "id_regime": "filing"}
  ],
  "count": 1,
  "next_cursor": null,
  ...
}
tool result
{"tool": "get_manager_holdings", "arguments": {"manager_id": 1067983, "quarter": "2026-06-30", "limit": 5}}
{
  "manager": {"manager_id": 1067983, "manager_name": "Berkshire Hathaway Inc", "cik": "0001067983", "first_quarter": "2013-06-30", "last_quarter": "2026-06-30", "id_regime": "filing", ...},
  "data": [
    {"entity_id": 10003635, "ticker": "AAPL", "entity_name": "APPLE INC", "report_date": "2026-06-30", "shares": 227917808, "filing_date": "2026-08-14", "value_usd": 65950296923, "source": "filing", "is_amendment": false, ...},
    {"entity_id": 10017034, "ticker": "AXP", "entity_name": "AMERICAN EXPRESS CO", "report_date": "2026-06-30", "shares": 151610700, "value_usd": 51282319275, ...},
    {"entity_id": 10001013, "ticker": "KO", "entity_name": "COCA COLA CO", "report_date": "2026-06-30", "shares": 400000000, "value_usd": 32508000000, ...},
    {"entity_id": 10030636, "ticker": "GOOGL", "entity_name": "ALPHABET INC", "report_date": "2026-06-30", "shares": 78791167, "value_usd": 28157599351, ...},
    ...
  ],
  ...
}

value_usd is whole USD: 65,950,296,923 is about 66.0 billion USD.

Insider sales

get_insiders needs Pro or higher.

prompt
List the most recent open-market sales by NVIDIA insiders this month.
tool result
{"tool": "get_insiders", "arguments": {"ticker": "NVDA", "transaction_type": "open_market_sell", "start": "2026-09-01", "limit": 3}}
{
  "tickers": ["NVDA"],
  "data": [
    {"entity_id": 29109, "ticker": "NVDA", "entity_name": "NVIDIA CORP", "transaction_date": "2026-09-21", "filing_date": "2026-09-23", "form_type": "4", "insider_name": "Teter Timothy S.", "insider_role": "General Counsel", "transaction_code": "S", "transaction_type": "open_market_sell", "acquisition_or_disposition": "D", "shares": 4499, "shares_held_after": 2687660, "transaction_price": 223.7479, "transaction_value": 1006641.8021, "ownership_type": "indirect", "is_amendment": false, "rule_10b5_1_affirmed": true, ...},
    {"entity_id": 29109, "ticker": "NVDA", "transaction_date": "2026-09-21", "insider_name": "Teter Timothy S.", "shares": 13478, "transaction_price": 223.0489, "transaction_value": 3006253.0742, ...},
    {"entity_id": 29109, "ticker": "NVDA", "transaction_date": "2026-09-21", "insider_name": "Teter Timothy S.", "shares": 12483, "transaction_price": 222.1932, "transaction_value": 2773637.7155999998, ...}
  ],
  ...
}

Finding a ticker

prompt
What is Coca-Cola's ticker?
tool result
{"tool": "search", "arguments": {"q": "coca cola", "limit": 3}}
{
  "data": [
    {"entity_id": 10001013, "ticker": "KO", "entity_name": "COCA COLA CO", "entity_type": "corporation", "gics_sector": "Consumer Staples", "gics_sub_industry": "Soft Drinks & Non-alcoholic Beverages", "sic": "2086", "naics": "312111", "country": "US", "ticker_valid_to": null},
    {"entity_id": 10001554, "ticker": "COKE", "entity_name": "COCA COLA CONSOLIDATED INC", ...},
    ...
  ],
  "meta": {"count": 3, "limit": 3, "offset": 0, "total": 13, ...}
}

Was this page helpful?