MCP server
Connect Claude, ChatGPT, Cursor, VS Code or another MCP client to xfinlink and ask for data in plain English.
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 theAcceptheader includestext/event-stream, the reply is one server-sentmessageevent; otherwise it isapplication/json. - Protocol version:
2025-03-26. The server answers with this version whatever version the client asks for. - Server name
xfinlink, version0.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-Keyheader, in theAuthorizationheader asBearer YOUR_API_KEY, or in theapi_keyquery parameter ashttps://api.xfinlink.com/mcp?api_key=YOUR_API_KEY. Use a header wherever your client supports custom headers.
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"}}}'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:
{"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.
- Open Customize, then Connectors.
- Click the + button, then Add custom connector.
- Name it
xfinlinkand paste the URLhttps://api.xfinlink.com/mcp?api_key=YOUR_API_KEY. If a sign-in method is requested, choose No sign-in. - Click Add.
- 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.
{
"mcpServers": {
"xfinlink": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.xfinlink.com/mcp?api_key=YOUR_API_KEY"]
}
}
}Claude Code
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:
{
"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.
{
"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.
- Open Settings, then Security and login, and turn on Developer mode. On some accounts the switch is under Apps, then Advanced settings.
- Under Plugins, click the + button. Name it
xfinlink, enter the URLhttps://api.xfinlink.com/mcp?api_key=YOUR_API_KEY, set Authentication to No Authentication, and click Create. - 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.
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"}}}'{"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": "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
}| status | error code | when it happens | how to fix |
|---|---|---|---|
JSON-RPC -32000 | key refused | The 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 -32000 | Temporarily blocked or Account temporarily disabled | Access 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 -32601 | Method not found | The client called a method other than initialize, notifications/initialized, tools/list or tools/call, for example prompts/list. | Use tools only. |
JSON-RPC -32700 | Parse error | The request body is not valid JSON. | Send a JSON-RPC 2.0 object. |
tool result, isError | Unknown tool | The 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, isError | the REST error code | The 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 givenOne ticker or a comma-separated list, for example "AAPL,MSFT".
entity_idstringDefault: noneOne id or a comma-separated list, from resolve_ticker or search. Cannot be combined with ticker.
startstringDefault: earliest barFirst 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 barLast date, YYYY-MM-DD, inclusive.
intervalstringDefault: "1d""1d", "3d", "1w", "1mo", "3mo", "6mo" or "1y". Longer intervals aggregate the daily bars.
limitintegerDefault: 1000Rows 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 givenOne ticker or a comma-separated list.
entity_idstringDefault: noneIssuer 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: noneKnowledge date, YYYY-MM-DD: the figures available on that date.
fieldsstringDefault: all fieldsComma-separated field names, for example "revenue,net_income".
startstringDefault: earliest periodEarliest period_end, YYYY-MM-DD. Omitted: the result starts at the first period on record (on Free, one year back).
endstringDefault: noneLatest period_end, YYYY-MM-DD.
fiscal_yearintegerDefault: noneExact fiscal year.
period_endstringDefault: noneExact period_end, YYYY-MM-DD.
limitintegerDefault: 1000Rows 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 givenOne ticker or a comma-separated list.
entity_idstringDefault: noneIssuer ids, comma-separated.
period_typestringDefault: "annual""annual", "quarterly", "ttm" or "daily".
fieldsstringDefault: all metricsComma-separated metric or category names, for example "pe_ratio" or "valuation". See Metrics catalogue.
growth_basisstringDefault: "yoy""yoy", "qoq" or "ttm_yoy".
as_ofstringDefault: noneKnowledge date, YYYY-MM-DD: the metrics knowable on that date.
startstringDefault: earliest periodEarliest 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: noneLatest period_end, YYYY-MM-DD.
limitintegerDefault: 20Rows 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.
tickerstringRequiredOne ticker or a comma-separated list of up to 10.
datestringDefault: todayResolve the ticker as it stood on that date, YYYY-MM-DD.
search
Find entities by name, ticker, sector or type. Runs Search.
qstringDefault: noneMatch on company name or ticker.
gics_sectorstringDefault: noneExact GICS sector, for example "Energy".
entity_typestringDefault: noneFor example "corporation" or "etf".
limitintegerDefault: 50Rows 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: todayMembership on that date, YYYY-MM-DD.
limitintegerDefault: 1000Rows 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 recordEarliest effective_date, YYYY-MM-DD. Omitted: the result starts at the start of the index's record (on Free, one year back).
endstringDefault: noneLatest effective_date, YYYY-MM-DD.
event_typestringDefault: both"added" or "removed".
limitintegerDefault: 1000Rows returned, at most 1,000.
offsetintegerDefault: 0Rows 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 givenOne ticker or a comma-separated list.
entity_idstringDefault: noneIssuer or share-class ids; a share-class id returns its issuer's rows.
startstringDefault: noneEarliest transaction_date, YYYY-MM-DD.
endstringDefault: noneLatest transaction_date, YYYY-MM-DD.
transaction_typestringDefault: allComma-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: noneCase-insensitive substring of the role, for example "CEO".
insider_namestringDefault: noneCase-insensitive substring of the name.
min_valuenumberDefault: noneMinimum transaction_value, in USD.
include_amendmentsbooleanDefault: omittedOmitted: the version in force for each filing. true: that version plus the versions it superseded. false: original filings only.
include_derivativesbooleanDefault: falsetrue adds derivative-table lines, flagged with is_derivative.
include_uncodedbooleanDefault: falsetrue adds archive-era rows that carry no SEC transaction code, with transaction_code null.
limitintegerDefault: 1000Rows 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 givenOne ticker or a comma-separated list.
entity_idstringDefault: noneShare-class ids, comma-separated.
startstringDefault: noneEarliest report_date, YYYY-MM-DD.
endstringDefault: noneLatest report_date, YYYY-MM-DD.
quarterstringDefault: noneExact quarter-end report_date, for example "2026-06-30".
managerstringDefault: noneCase-insensitive substring of manager_name.
manager_idintegerDefault: noneExact manager id from search_managers.
min_valuenumberDefault: noneMinimum value_usd, in USD.
sourcestringDefault: by quarter"historical" or "filing". Set: every quarter in the window comes from that era.
include_amendmentsbooleanDefault: omittedOmitted: 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 fieldsComma-separated field names. value_scale_corrected is returned only when named.
limitintegerDefault: 1000Rows 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_idintegerRequiredManager id from search_managers.
startstringDefault: noneEarliest report_date, YYYY-MM-DD.
endstringDefault: noneLatest report_date, YYYY-MM-DD.
quarterstringDefault: noneExact quarter-end report_date.
min_valuenumberDefault: noneMinimum value_usd, in USD.
fieldsstringDefault: all fieldsComma-separated field names.
limitintegerDefault: 1000Rows 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.
searchstringRequiredCase-insensitive substring of the manager name, 2 to 100 characters.
limitintegerDefault: 1000Rows 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
What were Apple's revenue and net income in each quarter since October 2025?{"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
Show Microsoft's daily closing prices for 14 to 18 September 2026.{"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
What is Apple's trailing twelve-month P/E ratio?{"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
Which companies joined the S&P 500 between February and May 2026?{"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
Which companies have traded under the ticker GM?{"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.
What were Berkshire Hathaway's five largest stock positions at the end of June 2026?{"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": "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.
List the most recent open-market sales by NVIDIA insiders this month.{"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
What is Coca-Cola's ticker?{"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, ...}
}Related pages
- Vibe coding
use xfinlink from an AI coding assistant with
llms.txt. - Python client reference
the same data from Python.
- Tickers and entities
how
entity_idand recycled tickers work.
Was this page helpful?
Thank you for helping improve xfinlink documentation.
- Need help? Get in touch.
- Building with an LLM? Read llms.txt.
- Using Claude or ChatGPT? Connect the MCP server.