filters.rms.hard_filters / soft_filters: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only.
organization_id and user_id: Optional (required only for platform API keys)
Event Flow
conversation ← conversation_idmessage ← echo of user querystatus: start ← stream begins+-- AGENTIC LOOP (repeats) ---------+| tool_use_block (x1-3) || tool_result_block (x1-3) || keepalive (~15s) || think (xN) |+------------------------------------+answer ← full answer with [1][2] citationsstatus: finish ← stream ends
Retrieving References
After the stream finishes, use conversation_id to get citation sources:
GET /v2/analytics/conversations/{conversation_id}/references
Returns normalized references with enriched metadata. See Analytics V2 References for details.
One question at a time per conversation. A request that arrives while an earlier question with the same conversation_id is still being answered can wait up to about 15 seconds and then end with a status event carrying error whose code is SESSION_BUSY (HTTP status is already 200). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.
POST
/
v2
/
analytics
/
sse
curl --request POST \ --url https://api.linqalpha.com/v2/analytics/sse \ --header 'Content-Type: application/json' \ --header 'X-API-KEY: <api-key>' \ --data '{ "query": "What are the latest insights on AAPL performance?", "search_types": { "external": [ { "type": "transcript" }, { "type": "filing" } ] }}'
{ "event_name": "conversation", "data": { "conversation_id": "7622b901-93ee-44bb-afb3-d60df76e31bf", "message": "Successfully created a conversation." }}
To chat over documents you uploaded through the Vault endpoints, pass their rms_document_id (returned by Vault — Confirm Upload) in search_types.rms[].document_ids, and set source to "vault":
{ "organization_id": "<org uuid>", "query": "Summarize the Q3 figures in the uploaded report.", "search_types": { "rms": [ { "workspace": "personal", "source": "vault", "document_ids": ["<rms_document_id>"] } ] }}
source: "vault" is required for Vault documents. If you omit it, the document is searched generically — it is not retrieved for direct file citation, the answer’s [N] markers won’t resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list (the answer may still look complete, so this fails silently).
document_ids are rms_document_id values from confirm (poll Document Status until Synced first) — not the presign document_id.
workspace must match the workspace the document was uploaded into (the workspace sent to presigned_url / confirm).
Omit it and the model configured for your organization is used — the default for
almost all requests. Reach for it when a particular query needs more (or less)
capability than your default.The model that actually ran is reported on the workspace_model SSE event, so
you can always confirm which one served the request:
The reported id carries a [1m] suffix marking the 1M-context runtime the model
ran under. It is appended to every Claude model, so the reported value will not
string-match a bare id you sent.Both forms are accepted on the way in (claude-opus-4-7 and
claude-opus-4-7[1m] are equivalent), so you can send back whatever you read.
To compare, strip the suffix on either side.
If your organization pins a model, that pin wins: asking for a different
model is refused after the stream opens — 200, then a status event carrying
error, not a silent success on the pinned model. Omit workspace_model to run
on the pin. Read the workspace_model SSE event to see what ran.
A malformed model id — one that does not match the Claude model id format — is
rejected with 400 before the stream opens.Passing that check is not the same as being able to run. An id that is
well-formed but is not a real model, or is a real model your organization is not
configured to use, is refused only after the stream has opened: you receive
200, then a status event carrying error — not a 400. Tell us which
models you need and we will enable them.
Optional. LLM model to run this request with, e.g. claude-opus-4-7, claude-opus-5 or claude-opus-5-5. When omitted, the model configured for your organization is used. If your organization pins a model, that pin wins and requesting a different model is refused after the stream opens rather than silently succeeding on the pin; omit this field to run on the pin. The model that actually ran is reported on the workspace_model SSE event — note that the reported id carries a [1m] 1M-context suffix (e.g. claude-opus-4-7[1m]), so it does not string-match a bare id you sent. Both forms are accepted on input, so the reported id can be sent back as-is. A malformed id is rejected with 400 before the stream opens; an id that is well-formed but not available to your organization is refused after the stream opens, as a status event carrying error on a 200.
SSE stream of analytics events. Each event is sent as data: {json}\n\n. Events follow the sequence: conversation → message → status:start → [agentic loop] → answer → status:finish. status:keep_alive and keepalive events are sent periodically during long tool execution gaps.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Linq Alpha API Docs","colors":{"primary":"#1767FE","light":"#1767FE","dark":"#1767FE"},"logo":{"light":"https://mintcdn.com/linqalpha/9BNJqkVKHb4kSYyJ/logo/light.svg?fit=max\u0026auto=format\u0026n=9BNJqkVKHb4kSYyJ\u0026q=85\u0026s=d7dd093386c0527ef6e6c9ef5f8130ad","dark":"https://mintcdn.com/linqalpha/9BNJqkVKHb4kSYyJ/logo/dark.svg?fit=max\u0026auto=format\u0026n=9BNJqkVKHb4kSYyJ\u0026q=85\u0026s=03c8b4a884d6b9c2deb87606bd15f0c7"},"favicon":"https://mintcdn.com/linqalpha/9BNJqkVKHb4kSYyJ/favicon.svg?fit=max\u0026auto=format\u0026n=9BNJqkVKHb4kSYyJ\u0026q=85\u0026s=384de566c2f8fe8b6d627bd19c014f2c","navbar":{"links":[{"href":"mailto:support@linqalpha.com","label":"Support"}]},"footer":{"socials":{"github":"https://github.com/linq-rag","linkedin":"https://www.linkedin.com/company/linqalpha/posts?feedView=all"},"links":[{"header":"Legal","items":[{"label":"AI Disclaimer","href":"https://linqalpha.com/disclaimer"},{"label":"Terms of Use","href":"https://linqalpha.com/terms-of-use"},{"label":"Privacy Policy","href":"https://linqalpha.com/privacy-policy"}]}]},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Website","href":"https://linqalpha.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"linqalpha","hasAudioNarration":false,"actualSubdomain":"linqalpha","customDomains":["docs.linqalpha.com"],"gitSource":{"type":"github","owner":"linq-rag","repo":"linq-public-api","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adbbd2a01ae999ce782ca39","collectionId":"00c88381-983e-45c7-9553-efed77ef87e8","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adbbd2a01ae999ce782ca39"},"feedback":{"thumbs":true,"issues":false,"edits":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adbbd2a01ae999ce782ca39","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API Reference","count":53},{"language":"default","tag":"Basic","count":16},{"language":"default","tag":"Briefing","count":9},{"language":"default","tag":"RMS (On request)","count":7},{"language":"default","tag":"Analytics V2","count":6},{"language":"default","tag":"Evaluations","count":4},{"language":"default","tag":"Transcriptions","count":4},{"language":"default","tag":"Meeting Agent","count":3},{"language":"default","tag":"Sync Status","count":3},{"language":"default","tag":"MCP","count":1}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/basic/analytics-sse-v2","slug":"/api-reference/basic/analytics-sse-v2","pageMetadata":{"title":"Analytics V2","openapi":"POST /v2/analytics/sse","description":"Agentic analytics with structured source selection, hard/soft filters, and identity fields.\n\n- **`search_types`**: Choose sources — `rms` (internal docs), `external` (transcripts, filings), `structured`\n- **`filters.rms.hard_filters` / `soft_filters`**: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only.\n- `organization_id` and `user_id`: Optional (required only for platform API keys)\n\n## Event Flow\n\n```\nconversation ← conversation_id\nmessage ← echo of user query\nstatus: start ← stream begins\n+-- AGENTIC LOOP (repeats) ---------+\n| tool_use_block (x1-3) |\n| tool_result_block (x1-3) |\n| keepalive (~15s) |\n| think (xN) |\n+------------------------------------+\nanswer ← full answer with [1][2] citations\nstatus: finish ← stream ends\n```\n\n## Retrieving References\n\nAfter the stream finishes, use `conversation_id` to get citation sources:\n\n```\nGET /v2/analytics/conversations/{conversation_id}/references\n```\n\nReturns normalized references with enriched metadata. See [Analytics V2 References](/api-reference/basic/analytics_references) for details.\n\n**One question at a time per conversation.** A request that arrives while an earlier question with the same `conversation_id` is still being answered can wait up to about 15 seconds and then end with a `status` event carrying `error` whose `code` is `SESSION_BUSY` (HTTP status is already `200`). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.","href":"/api-reference/basic/analytics-sse-v2"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n h2: \"h2\",\n li: \"li\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n }, {CodeBlock} = _components;\n if (!CodeBlock) _missingMdxReference(\"CodeBlock\", true);\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Agentic analytics with structured source selection, hard/soft filters, and identity fields.\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: _jsx(_components.code, {\n children: \"search_types\"\n })\n }), \": Choose sources — \", _jsx(_components.code, {\n children: \"rms\"\n }), \" (internal docs), \", _jsx(_components.code, {\n children: \"external\"\n }), \" (transcripts, filings), \", _jsx(_components.code, {\n children: \"structured\"\n })]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsxs(_components.strong, {\n children: [_jsx(_components.code, {\n children: \"filters.rms.hard_filters\"\n }), \" / \", _jsx(_components.code, {\n children: \"soft_filters\"\n })]\n }), \": Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"organization_id\"\n }), \" and \", _jsx(_components.code, {\n children: \"user_id\"\n }), \": Optional (required only for platform API keys)\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.h2, {\n children: \"Event Flow\"\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"12\",\n language: \"text\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"text\",\n children: _jsxs(_components.code, {\n language: \"text\",\n numberOfLines: \"12\",\n children: [_jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"conversation ← conversation_id\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"message ← echo of user query\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"status: start ← stream begins\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"+-- AGENTIC LOOP (repeats) ---------+\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"| tool_use_block (x1-3) |\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"| tool_result_block (x1-3) |\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"| keepalive (~15s) |\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"| think (xN) |\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"+------------------------------------+\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"answer ← full answer with [1][2] citations\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"status: finish ← stream ends\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {})\n })]\n })\n })\n }), \"\\n\", _jsx(_components.h2, {\n children: \"Retrieving References\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"After the stream finishes, use \", _jsx(_components.code, {\n children: \"conversation_id\"\n }), \" to get citation sources:\"]\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"2\",\n language: \"text\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"text\",\n children: _jsxs(_components.code, {\n language: \"text\",\n numberOfLines: \"2\",\n children: [_jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"GET /v2/analytics/conversations/{conversation_id}/references\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {})\n })]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Returns normalized references with enriched metadata. See \", _jsx(_components.a, {\n href: \"/api-reference/basic/analytics_references\",\n children: \"Analytics V2 References\"\n }), \" for details.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"One question at a time per conversation.\"\n }), \" A request that arrives while an earlier question with the same \", _jsx(_components.code, {\n children: \"conversation_id\"\n }), \" is still being answered can wait up to about 15 seconds and then end with a \", _jsx(_components.code, {\n children: \"status\"\n }), \" event carrying \", _jsx(_components.code, {\n children: \"error\"\n }), \" whose \", _jsx(_components.code, {\n children: \"code\"\n }), \" is \", _jsx(_components.code, {\n children: \"SESSION_BUSY\"\n }), \" (HTTP status is already \", _jsx(_components.code, {\n children: \"200\"\n }), \"). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\n}\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`referencing-vault-documents`,children:`Referencing Vault documents`}),`\n`,_jsxs(_components.p,{children:[`To chat over documents you uploaded through the Vault endpoints, pass their `,_jsx(_components.code,{children:`rms_document_id`}),` (returned by `,_jsx(_components.a,{href:`/api-reference/vault/confirm`,children:`Vault — Confirm Upload`}),`) in `,_jsx(_components.code,{children:`search_types.rms[].document_ids`}),`, and `,_jsxs(_components.strong,{children:[`set `,_jsx(_components.code,{children:`source`}),` to `,_jsx(_components.code,{children:`\"vault\"`})]}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"organization_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003corg uuid>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"query\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Summarize the Q3 figures in the uploaded report.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"search_types\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"rms\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"workspace\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"personal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"source\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"vault\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"document_ids\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003crms_document_id>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`source: \"vault\"`}),` is `,_jsx(_components.strong,{children:`required`}),` for Vault documents. If you omit it, the document is searched generically — it is not retrieved for direct file citation, the answer’s `,_jsx(_components.code,{children:`[N]`}),` markers won’t resolve, and `,_jsx(_components.code,{children:`GET /v2/analytics/conversations/{id}/references`}),` returns an empty list (the answer may still look complete, so this fails silently).`]})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`document_ids`}),` are `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`rms_document_id`})}),` values from `,_jsx(_components.code,{children:`confirm`}),` (poll `,_jsx(_components.a,{href:`/api-reference/vault/status`,children:`Document Status`}),` until `,_jsx(_components.code,{children:`Synced`}),` first) — not the presign `,_jsx(_components.code,{children:`document_id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`workspace`}),` must match the workspace the document was uploaded into (the `,_jsx(_components.code,{children:`workspace`}),` sent to `,_jsx(_components.code,{children:`presigned_url`}),` / `,_jsx(_components.code,{children:`confirm`}),`).`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`selecting-a-model`,children:`Selecting a model`}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`workspace_model`}),` to run a request on a specific model:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"organization_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003corg uuid>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"query\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Summarize BNP Paribas' latest credit profile.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"workspace_model\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"claude-opus-4-7\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Omit it and the model configured for your organization is used — the default for\nalmost all requests. Reach for it when a particular query needs more (or less)\ncapability than your default.`}),`\n`,_jsxs(_components.p,{children:[`The model that actually ran is reported on the `,_jsx(_components.code,{children:`workspace_model`}),` SSE event, so\nyou can always confirm which one served the request:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`data: {\"event_name\": \"workspace_model\", \"data\": {\"workspace_model\": \"claude-opus-4-7[1m]\"}}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(Note,{children:[_jsxs(_components.p,{children:[`The reported id carries a `,_jsx(_components.code,{children:`[1m]`}),` suffix marking the 1M-context runtime the model\nran under. It is appended to every Claude model, so the reported value will not\nstring-match a bare id you sent.`]}),_jsxs(_components.p,{children:[`Both forms are accepted on the way in (`,_jsx(_components.code,{children:`claude-opus-4-7`}),` and\n`,_jsx(_components.code,{children:`claude-opus-4-7[1m]`}),` are equivalent), so you can send back whatever you read.\nTo compare, strip the suffix on either side.`]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`If your organization pins a model, that pin wins: asking for a `,_jsx(_components.strong,{children:`different`}),`\nmodel is refused after the stream opens — `,_jsx(_components.code,{children:`200`}),`, then a `,_jsx(_components.code,{children:`status`}),` event carrying\n`,_jsx(_components.code,{children:`error`}),`, not a silent success on the pinned model. Omit `,_jsx(_components.code,{children:`workspace_model`}),` to run\non the pin. Read the `,_jsx(_components.code,{children:`workspace_model`}),` SSE event to see what ran.`]})}),`\n`,_jsxs(_components.p,{children:[`A malformed model id — one that does not match the Claude model id format — is\nrejected with `,_jsx(_components.code,{children:`400`}),` before the stream opens.`]}),`\n`,_jsxs(_components.p,{children:[`Passing that check is not the same as being able to run. An id that is\nwell-formed but is not a real model, or is a real model your organization is not\nconfigured to use, is refused only after the stream has opened: you receive\n`,_jsx(_components.code,{children:`200`}),`, then a `,_jsx(_components.code,{children:`status`}),` event carrying `,_jsx(_components.code,{children:`error`}),` — not a `,_jsx(_components.code,{children:`400`}),`. Tell us which\nmodels you need and we will enable them.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Analytics V2","openapi":"POST /v2/analytics/sse","description":"Agentic analytics with structured source selection, hard/soft filters, and identity fields.\n\n- **`search_types`**: Choose sources — `rms` (internal docs), `external` (transcripts, filings), `structured`\n- **`filters.rms.hard_filters` / `soft_filters`**: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only.\n- `organization_id` and `user_id`: Optional (required only for platform API keys)\n\n## Event Flow\n\n```\nconversation ← conversation_id\nmessage ← echo of user query\nstatus: start ← stream begins\n+-- AGENTIC LOOP (repeats) ---------+\n| tool_use_block (x1-3) |\n| tool_result_block (x1-3) |\n| keepalive (~15s) |\n| think (xN) |\n+------------------------------------+\nanswer ← full answer with [1][2] citations\nstatus: finish ← stream ends\n```\n\n## Retrieving References\n\nAfter the stream finishes, use `conversation_id` to get citation sources:\n\n```\nGET /v2/analytics/conversations/{conversation_id}/references\n```\n\nReturns normalized references with enriched metadata. See [Analytics V2 References](/api-reference/basic/analytics_references) for details.\n\n**One question at a time per conversation.** A request that arrives while an earlier question with the same `conversation_id` is still being answered can wait up to about 15 seconds and then end with a `status` event carrying `error` whose `code` is `SESSION_BUSY` (HTTP status is already `200`). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.","href":"/api-reference/basic/analytics-sse-v2"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Referencing Vault documents","slug":"referencing-vault-documents","depth":2,"children":[]},{"title":"Selecting a model","slug":"selecting-a-model","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Generate an analytics response via SSE (V2)","description":"Agentic analytics with structured source selection, hard/soft filters, and identity fields.\n\n- **`search_types`**: Choose sources — `rms` (internal docs), `external` (transcripts, filings), `structured`\n- **`filters.rms.hard_filters` / `soft_filters`**: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only.\n- `organization_id` and `user_id`: Optional (required only for platform API keys)\n\n## Event Flow\n\n```\nconversation ← conversation_id\nmessage ← echo of user query\nstatus: start ← stream begins\n+-- AGENTIC LOOP (repeats) ---------+\n| tool_use_block (x1-3) |\n| tool_result_block (x1-3) |\n| keepalive (~15s) |\n| think (xN) |\n+------------------------------------+\nanswer ← full answer with [1][2] citations\nstatus: finish ← stream ends\n```\n\n## Retrieving References\n\nAfter the stream finishes, use `conversation_id` to get citation sources:\n\n```\nGET /v2/analytics/conversations/{conversation_id}/references\n```\n\nReturns normalized references with enriched metadata. See [Analytics V2 References](/api-reference/basic/analytics_references) for details.\n\n**One question at a time per conversation.** A request that arrives while an earlier question with the same `conversation_id` is still being answered can wait up to about 15 seconds and then end with a `status` event carrying `error` whose `code` is `SESSION_BUSY` (HTTP status is already `200`). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.","requestBody":"76617988-6a00-45cd-b16e-e1fd1eb0174d","responses":{"200":"ed9427c8-c8c9-472b-8603-4224b4dc6ba0","400":"797e4aa5-f1e5-4d21-8ef8-cb7cf74a4c7d","401":"303d91be-d582-4426-908b-c9ceed77d2e5","403":"8be5a98a-0a53-40e8-a60a-de1404b56d45"},"tags":["Search"],"method":"post","type":"path","servers":["9cdf8e58-8f32-4db6-a144-4d35b9596918"],"security":["8aa7599b-2dcb-4258-a16e-03ea68ad1736"],"path":"/v2/analytics/sse","baseUrlOptions":["https://api.linqalpha.com"],"title":"Generate an analytics response via SSE (V2)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"The analytics query to process.","example":"What are the latest insights on AAPL earnings?","isRequired":true,"uniqueKey":"query","typeLabel":"string"},"organization_id":{"type":"string","format":"uuid","description":"Organization ID","uniqueKey":"organization_id","typeLabel":"string\u003cuuid>"},"user_id":{"type":"string","format":"uuid","description":"User ID","uniqueKey":"user_id","typeLabel":"string\u003cuuid>"},"user_email":{"type":"string","format":"email","description":"User email","uniqueKey":"user_email","typeLabel":"string\u003cemail>"},"user_name":{"type":"string","description":"User name","uniqueKey":"user_name","typeLabel":"string"},"conversation_id":{"oneOf":[{"type":"string","description":"Existing conversation ID for multi-turn continuation. Omit or null for new conversation.","uniqueKey":"conversation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Existing conversation ID for multi-turn continuation. Omit or null for new conversation.","uniqueKey":"conversation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"conversation_id","typeLabel":"string | null"},"search_types":{"oneOf":[{"type":"object","description":"Structured source selection. Controls which document sources to query. Omitting a category means don't search it.","properties":{"rms":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"workspace":{"type":"string","enum":["personal","organization"],"description":"Workspace scope","isRequired":true,"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].workspace","typeLabel":"enum\u003cstring>"},"source":{"oneOf":[{"type":"string","description":"Source type for this RMS selection. For Vault-uploaded documents (referenced by their rms_document_id in document_ids), you MUST set source to \"vault\". If omitted, the documents are searched generically: they are not retrieved for direct file citation, the answer's [N] markers won't resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list.","uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].source.oneOf.0","typeLabel":"string"},{"type":"null","description":"Source type for this RMS selection. For Vault-uploaded documents (referenced by their rms_document_id in document_ids), you MUST set source to \"vault\". If omitted, the documents are searched generically: they are not retrieved for direct file citation, the answer's [N] markers won't resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list.","uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].source.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].source","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].type","typeLabel":"string | null"},"subtypes":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].subtypes.oneOf.0.items.[INDEX]","typeLabel":"string"},"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].subtypes.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].subtypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].subtypes","typeLabel":"string[] | null"},"container_ids":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].container_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].container_ids.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].container_ids.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].container_ids","typeLabel":"string[] | null"},"document_ids":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].document_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].document_ids.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].document_ids.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX].document_ids","typeLabel":"string[] | null"}},"required":["workspace"],"uniqueKey":"search_types.oneOf.0.rms.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"search_types.oneOf.0.rms.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"workspace":{"type":"string","enum":["personal","organization"],"description":"Workspace scope"},"source":{"oneOf":[{"type":"string","description":"Source type for this RMS selection. For Vault-uploaded documents (referenced by their rms_document_id in document_ids), you MUST set source to \"vault\". If omitted, the documents are searched generically: they are not retrieved for direct file citation, the answer's [N] markers won't resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list."},{"type":"null","description":"Source type for this RMS selection. For Vault-uploaded documents (referenced by their rms_document_id in document_ids), you MUST set source to \"vault\". If omitted, the documents are searched generically: they are not retrieved for direct file citation, the answer's [N] markers won't resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list."}]},"type":{"oneOf":[{"type":"string"},{"type":"null"}]},"subtypes":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"container_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"document_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]}},"required":["workspace"]},"uniqueKey":"search_types.oneOf.0.rms.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.rms","typeLabel":"object[] | null"},"external":{"oneOf":[{"type":"array","description":"Third-party sources","items":{"type":"object","properties":{"type":{"type":"string","isRequired":true,"uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].type","typeLabel":"string"},"subtypes":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].subtypes.oneOf.0.items.[INDEX]","typeLabel":"string"},"uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].subtypes.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].subtypes.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].subtypes","typeLabel":"string[] | null"},"document_ids":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].document_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].document_ids.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].document_ids.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX].document_ids","typeLabel":"string[] | null"}},"required":["type"],"uniqueKey":"search_types.oneOf.0.external.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"search_types.oneOf.0.external.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Third-party sources","items":{"type":"object","properties":{"type":{"type":"string"},"subtypes":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"document_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]}},"required":["type"]},"uniqueKey":"search_types.oneOf.0.external.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.external","typeLabel":"object[] | null"},"structured":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","isRequired":true,"uniqueKey":"search_types.oneOf.0.structured.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"required":["type"],"uniqueKey":"search_types.oneOf.0.structured.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"search_types.oneOf.0.structured.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"type":{"type":"string"}},"required":["type"]},"uniqueKey":"search_types.oneOf.0.structured.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types.oneOf.0.structured","typeLabel":"object[] | null"}},"uniqueKey":"search_types.oneOf.0","typeLabel":"object"},{"type":"null","description":"Structured source selection. Controls which document sources to query. Omitting a category means don't search it.","properties":{"rms":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"workspace":{"type":"string","enum":["personal","organization"],"description":"Workspace scope"},"source":{"oneOf":[{"type":"string","description":"Source type for this RMS selection. For Vault-uploaded documents (referenced by their rms_document_id in document_ids), you MUST set source to \"vault\". If omitted, the documents are searched generically: they are not retrieved for direct file citation, the answer's [N] markers won't resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list."},{"type":"null","description":"Source type for this RMS selection. For Vault-uploaded documents (referenced by their rms_document_id in document_ids), you MUST set source to \"vault\". If omitted, the documents are searched generically: they are not retrieved for direct file citation, the answer's [N] markers won't resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list."}]},"type":{"oneOf":[{"type":"string"},{"type":"null"}]},"subtypes":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"container_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"document_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]}},"required":["workspace"]}},{"type":"null","items":{"type":"object","properties":{"workspace":{"type":"string","enum":["personal","organization"],"description":"Workspace scope"},"source":{"oneOf":[{"type":"string","description":"Source type for this RMS selection. For Vault-uploaded documents (referenced by their rms_document_id in document_ids), you MUST set source to \"vault\". If omitted, the documents are searched generically: they are not retrieved for direct file citation, the answer's [N] markers won't resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list."},{"type":"null","description":"Source type for this RMS selection. For Vault-uploaded documents (referenced by their rms_document_id in document_ids), you MUST set source to \"vault\". If omitted, the documents are searched generically: they are not retrieved for direct file citation, the answer's [N] markers won't resolve, and GET /v2/analytics/conversations/{id}/references returns an empty list."}]},"type":{"oneOf":[{"type":"string"},{"type":"null"}]},"subtypes":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"container_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"document_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]}},"required":["workspace"]}}]},"external":{"oneOf":[{"type":"array","description":"Third-party sources","items":{"type":"object","properties":{"type":{"type":"string"},"subtypes":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"document_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]}},"required":["type"]}},{"type":"null","description":"Third-party sources","items":{"type":"object","properties":{"type":{"type":"string"},"subtypes":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]},"document_ids":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null","items":{"type":"string"}}]}},"required":["type"]}}]},"structured":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"}},"required":["type"]}},{"type":"null","items":{"type":"object","properties":{"type":{"type":"string"}},"required":["type"]}}]}},"uniqueKey":"search_types.oneOf.1","typeLabel":"null"}],"uniqueKey":"search_types","typeLabel":"object | null"},"filters":{"oneOf":[{"type":"object","description":"Metadata filters. Hard filters exclude non-matching documents (AND between fields, OR within arrays). Soft filters boost relevance without excluding.","properties":{"rms":{"oneOf":[{"type":"object","properties":{"hard_filters":{"oneOf":[{"type":"object","description":"Strict metadata constraints for internal sources. AND between fields, OR within arrays.","uniqueKey":"filters.oneOf.0.rms.oneOf.0.hard_filters.oneOf.0","typeLabel":"object"},{"type":"null","description":"Strict metadata constraints for internal sources. AND between fields, OR within arrays.","uniqueKey":"filters.oneOf.0.rms.oneOf.0.hard_filters.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters.oneOf.0.rms.oneOf.0.hard_filters","typeLabel":"object | null"},"soft_filters":{"oneOf":[{"type":"object","description":"Preferred but not required metadata for internal sources. Boosts relevance.","uniqueKey":"filters.oneOf.0.rms.oneOf.0.soft_filters.oneOf.0","typeLabel":"object"},{"type":"null","description":"Preferred but not required metadata for internal sources. Boosts relevance.","uniqueKey":"filters.oneOf.0.rms.oneOf.0.soft_filters.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters.oneOf.0.rms.oneOf.0.soft_filters","typeLabel":"object | null"}},"uniqueKey":"filters.oneOf.0.rms.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"hard_filters":{"oneOf":[{"type":"object","description":"Strict metadata constraints for internal sources. AND between fields, OR within arrays."},{"type":"null","description":"Strict metadata constraints for internal sources. AND between fields, OR within arrays."}]},"soft_filters":{"oneOf":[{"type":"object","description":"Preferred but not required metadata for internal sources. Boosts relevance."},{"type":"null","description":"Preferred but not required metadata for internal sources. Boosts relevance."}]}},"uniqueKey":"filters.oneOf.0.rms.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters.oneOf.0.rms","typeLabel":"object | null"},"external":{"oneOf":[{"type":"object","properties":{"soft_filters":{"oneOf":[{"type":"object","description":"Preferred metadata for external sources. No hard filters on external by design.","uniqueKey":"filters.oneOf.0.external.oneOf.0.soft_filters.oneOf.0","typeLabel":"object"},{"type":"null","description":"Preferred metadata for external sources. No hard filters on external by design.","uniqueKey":"filters.oneOf.0.external.oneOf.0.soft_filters.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters.oneOf.0.external.oneOf.0.soft_filters","typeLabel":"object | null"}},"uniqueKey":"filters.oneOf.0.external.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"soft_filters":{"oneOf":[{"type":"object","description":"Preferred metadata for external sources. No hard filters on external by design."},{"type":"null","description":"Preferred metadata for external sources. No hard filters on external by design."}]}},"uniqueKey":"filters.oneOf.0.external.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters.oneOf.0.external","typeLabel":"object | null"}},"uniqueKey":"filters.oneOf.0","typeLabel":"object"},{"type":"null","description":"Metadata filters. Hard filters exclude non-matching documents (AND between fields, OR within arrays). Soft filters boost relevance without excluding.","properties":{"rms":{"oneOf":[{"type":"object","properties":{"hard_filters":{"oneOf":[{"type":"object","description":"Strict metadata constraints for internal sources. AND between fields, OR within arrays."},{"type":"null","description":"Strict metadata constraints for internal sources. AND between fields, OR within arrays."}]},"soft_filters":{"oneOf":[{"type":"object","description":"Preferred but not required metadata for internal sources. Boosts relevance."},{"type":"null","description":"Preferred but not required metadata for internal sources. Boosts relevance."}]}}},{"type":"null","properties":{"hard_filters":{"oneOf":[{"type":"object","description":"Strict metadata constraints for internal sources. AND between fields, OR within arrays."},{"type":"null","description":"Strict metadata constraints for internal sources. AND between fields, OR within arrays."}]},"soft_filters":{"oneOf":[{"type":"object","description":"Preferred but not required metadata for internal sources. Boosts relevance."},{"type":"null","description":"Preferred but not required metadata for internal sources. Boosts relevance."}]}}}]},"external":{"oneOf":[{"type":"object","properties":{"soft_filters":{"oneOf":[{"type":"object","description":"Preferred metadata for external sources. No hard filters on external by design."},{"type":"null","description":"Preferred metadata for external sources. No hard filters on external by design."}]}}},{"type":"null","properties":{"soft_filters":{"oneOf":[{"type":"object","description":"Preferred metadata for external sources. No hard filters on external by design."},{"type":"null","description":"Preferred metadata for external sources. No hard filters on external by design."}]}}}]}},"uniqueKey":"filters.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters","typeLabel":"object | null"},"connectors":{"oneOf":[{"type":"array","description":"Customer MCP connectors to enable for this analytics request.","items":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Connector name","isRequired":true,"uniqueKey":"connectors.oneOf.0.items.[INDEX].name","typeLabel":"string"},"tool_filter":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"connectors.oneOf.0.items.[INDEX].tool_filter.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Optional tool allow-list for this connector","uniqueKey":"connectors.oneOf.0.items.[INDEX].tool_filter.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Optional tool allow-list for this connector","uniqueKey":"connectors.oneOf.0.items.[INDEX].tool_filter.oneOf.1","typeLabel":"null"}],"uniqueKey":"connectors.oneOf.0.items.[INDEX].tool_filter","typeLabel":"string[] | null"}},"required":["name"],"uniqueKey":"connectors.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"connectors.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Customer MCP connectors to enable for this analytics request.","items":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Connector name"},"tool_filter":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Optional tool allow-list for this connector"},{"type":"null","items":{"type":"string"},"description":"Optional tool allow-list for this connector"}]}},"required":["name"]},"uniqueKey":"connectors.oneOf.1","typeLabel":"null"}],"uniqueKey":"connectors","typeLabel":"object[] | null"},"disabled_connectors":{"oneOf":[{"type":"array","description":"Connector names to disable for this analytics request.","items":{"type":"string","uniqueKey":"disabled_connectors.oneOf.0.items.[INDEX]","typeLabel":"string"},"uniqueKey":"disabled_connectors.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"Connector names to disable for this analytics request.","items":{"type":"string"},"uniqueKey":"disabled_connectors.oneOf.1","typeLabel":"null"}],"uniqueKey":"disabled_connectors","typeLabel":"string[] | null"},"workspace_model":{"oneOf":[{"type":"string","pattern":"^claude-(?:opus|sonnet|haiku)-[\\w.-]{1,40}(?:\\[1m\\])?$","example":"claude-opus-4-7","description":"Optional. LLM model to run this request with, e.g. `claude-opus-4-7`, `claude-opus-5` or `claude-opus-5-5`. When omitted, the model configured for your organization is used. If your organization pins a model, that pin wins and requesting a different model is refused after the stream opens rather than silently succeeding on the pin; omit this field to run on the pin. The model that actually ran is reported on the `workspace_model` SSE event — note that the reported id carries a `[1m]` 1M-context suffix (e.g. `claude-opus-4-7[1m]`), so it does not string-match a bare id you sent. Both forms are accepted on input, so the reported id can be sent back as-is. A malformed id is rejected with `400` before the stream opens; an id that is well-formed but not available to your organization is refused after the stream opens, as a `status` event carrying `error` on a `200`.","uniqueKey":"workspace_model.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^claude-(?:opus|sonnet|haiku)-[\\w.-]{1,40}(?:\\[1m\\])?$","example":"claude-opus-4-7","description":"Optional. LLM model to run this request with, e.g. `claude-opus-4-7`, `claude-opus-5` or `claude-opus-5-5`. When omitted, the model configured for your organization is used. If your organization pins a model, that pin wins and requesting a different model is refused after the stream opens rather than silently succeeding on the pin; omit this field to run on the pin. The model that actually ran is reported on the `workspace_model` SSE event — note that the reported id carries a `[1m]` 1M-context suffix (e.g. `claude-opus-4-7[1m]`), so it does not string-match a bare id you sent. Both forms are accepted on input, so the reported id can be sent back as-is. A malformed id is rejected with `400` before the stream opens; an id that is well-formed but not available to your organization is refused after the stream opens, as a `status` event carrying `error` on a `200`.","uniqueKey":"workspace_model.oneOf.1","typeLabel":"null"}],"uniqueKey":"workspace_model","typeLabel":"string | null"}},"required":["query"],"uniqueKey":"","typeLabel":"object"},"examples":{"basic":{"title":"basic","value":{"query":"What are the latest insights on AAPL performance?","search_types":{"external":[{"type":"transcript"},{"type":"filing"}]}}},"multi_turn":{"title":"multi_turn","value":{"query":"Can you also compare with MSFT?","conversation_id":"12345678-93ee-44bb-afb3-d60df76e31bf","search_types":{"external":[{"type":"transcript"},{"type":"filing"}]},"filters":{"rms":{"hard_filters":{"tickers":["AAPL US","MSFT US"]}}}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"ed9427c8-c8c9-472b-8603-4224b4dc6ba0":{"description":"SSE stream of analytics events. Each event is sent as `data: {json}\\n\\n`. Events follow the sequence: conversation → message → status:start → [agentic loop] → answer → status:finish. status:keep_alive and keepalive events are sent periodically during long tool execution gaps.","content":{"text/event-stream":{"schema":{"oneOf":[{"type":"object","description":"Conversation event","required":["event_name","data"],"properties":{"event_name":{"type":"string","enum":["conversation"],"isRequired":true,"uniqueKey":"oneOf.0.event_name","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Event-specific data payload","required":["conversation_id"],"properties":{"conversation_id":{"type":"string","description":"Unique conversation identifier. Use for multi-turn continuation and References API.","isRequired":true,"uniqueKey":"oneOf.0.data.conversation_id","typeLabel":"string"},"message":{"type":"string","description":"Status message (e.g., 'Successfully created a conversation.')","uniqueKey":"oneOf.0.data.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.0.data","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"User message echo event. Second event in the stream (after conversation), echoing the user's query.","required":["event_name","data"],"properties":{"event_name":{"type":"string","description":"Type of event in the analytics stream","enum":["message"],"isRequired":true,"uniqueKey":"oneOf.1.event_name","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Event-specific data payload","required":["message_id","message_type","message"],"properties":{"message_id":{"type":"integer","description":"Unique message identifier","isRequired":true,"uniqueKey":"oneOf.1.data.message_id","typeLabel":"integer"},"message_type":{"type":"string","enum":["user","assistant"],"description":"Type of message","isRequired":true,"uniqueKey":"oneOf.1.data.message_type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"The message content","isRequired":true,"uniqueKey":"oneOf.1.data.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.1.data","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","description":"Stream status event indicating start, finish, or keep_alive of the analytics stream.","required":["event_name","data"],"properties":{"event_name":{"type":"string","description":"Type of event in the analytics stream","enum":["status"],"isRequired":true,"uniqueKey":"oneOf.2.event_name","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Event-specific data payload","required":["status"],"properties":{"status":{"type":"string","enum":["start","finish","keep_alive"],"description":"Stream lifecycle status. 'keep_alive' is sent periodically during long tool execution gaps.","isRequired":true,"uniqueKey":"oneOf.2.data.status","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"oneOf.2.data","typeLabel":"object"}},"uniqueKey":"oneOf.2","typeLabel":"object"},{"type":"object","description":"Thinking/reasoning process stream. Sent as the model reasons through the problem.","required":["event_name","data"],"properties":{"event_name":{"type":"string","description":"Type of event in the analytics stream","enum":["think"],"isRequired":true,"uniqueKey":"oneOf.3.event_name","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Event-specific data payload","required":["think_piece"],"properties":{"think_piece":{"type":"string","description":"A piece of the thinking/reasoning process (streamed incrementally)","isRequired":true,"uniqueKey":"oneOf.3.data.think_piece","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.3.data","typeLabel":"object"}},"uniqueKey":"oneOf.3","typeLabel":"object"},{"type":"object","description":"Tool invocation event. Indicates a tool is being called during analysis. Multiple tool_use_block events may be sent in parallel batches.","required":["event_name","data"],"properties":{"event_name":{"type":"string","description":"Type of event in the analytics stream","enum":["tool_use_block"],"isRequired":true,"uniqueKey":"oneOf.4.event_name","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Event-specific data payload","required":["name","input"],"properties":{"name":{"type":"string","description":"Name of the tool being called (e.g., mcp__linq__manticore_sql, mcp__linq__factset_query)","example":"mcp__linq__manticore_sql","isRequired":true,"uniqueKey":"oneOf.4.data.name","typeLabel":"string"},"input":{"type":"object","description":"Input arguments passed to the tool. Structure varies by tool.","additionalProperties":true,"isRequired":true,"uniqueKey":"oneOf.4.data.input","typeLabel":"object"}},"isRequired":true,"uniqueKey":"oneOf.4.data","typeLabel":"object"}},"uniqueKey":"oneOf.4","typeLabel":"object"},{"type":"object","description":"Tool execution result event. Contains the output from a tool call.","required":["event_name","data"],"properties":{"event_name":{"type":"string","description":"Type of event in the analytics stream","enum":["tool_result_block"],"isRequired":true,"uniqueKey":"oneOf.5.event_name","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Event-specific data payload","required":["content"],"properties":{"content":{"type":"string","description":"JSON-encoded result from the tool execution","isRequired":true,"uniqueKey":"oneOf.5.data.content","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.5.data","typeLabel":"object"}},"uniqueKey":"oneOf.5","typeLabel":"object"},{"type":"object","description":"Final answer event. Contains the complete answer in a single event (not streamed incrementally).","required":["event_name","data"],"properties":{"event_name":{"type":"string","description":"Type of event in the analytics stream","enum":["answer"],"isRequired":true,"uniqueKey":"oneOf.6.event_name","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Event-specific data payload","required":["answer_piece"],"properties":{"answer_piece":{"type":"string","description":"The complete final answer content. Unlike other SSE endpoints, analytics sends the full answer in a single event rather than streaming it incrementally.","isRequired":true,"uniqueKey":"oneOf.6.data.answer_piece","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.6.data","typeLabel":"object"}},"uniqueKey":"oneOf.6","typeLabel":"object"},{"type":"object","description":"Heartbeat event sent periodically (every ~15s during idle periods) to keep the connection alive.","required":["event_name","data"],"properties":{"event_name":{"type":"string","description":"Type of event in the analytics stream","enum":["keepalive"],"isRequired":true,"uniqueKey":"oneOf.7.event_name","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Event-specific data payload","required":["timestamp"],"properties":{"timestamp":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of the keepalive event","example":"2026-02-26T22:46:50.780316","isRequired":true,"uniqueKey":"oneOf.7.data.timestamp","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"oneOf.7.data","typeLabel":"object"}},"uniqueKey":"oneOf.7","typeLabel":"object"},{"type":"any","uniqueKey":"oneOf.8","typeLabel":"any"}],"uniqueKey":"","typeLabel":"object · object · object · object · object · object · object · object · any"},"examples":{"conversation":{"title":"conversation","description":"First event — returns the conversation identifier","value":{"event_name":"conversation","data":{"conversation_id":"7622b901-93ee-44bb-afb3-d60df76e31bf","message":"Successfully created a conversation."}}},"message":{"title":"message","description":"Second event - echoes the user's query","value":{"event_name":"message","data":{"message_id":98,"message_type":"user","message":"What are the latest NVIDIA earnings results? Compare revenue growth vs AMD."}}},"status_start":{"title":"status_start","description":"Stream has started processing","value":{"event_name":"status","data":{"status":"start"}}},"think":{"title":"think","description":"Streamed reasoning process (sent incrementally)","value":{"event_name":"think","data":{"think_piece":"I need to look up NVIDIA's latest earnings data and compare it with AMD..."}}},"tool_use_block":{"title":"tool_use_block","description":"Tool invocation during analysis. Multiple may be sent in parallel.","value":{"event_name":"tool_use_block","data":{"name":"mcp__linq__factset_query","input":{"sql":"SELECT fe.TICKER, fp.FY_END_DATE, fp.FF_SALES FROM FF_V3.FF_BASIC_AF fp JOIN FE_V4.FE_BASIC_TICKER fe ON fe.FSYM_ID = fp.FSYM_ID WHERE fe.TICKER IN ('NVDA', 'AMD')"}}}},"tool_result_block":{"title":"tool_result_block","description":"Result from a tool execution","value":{"event_name":"tool_result_block","data":{"content":"{\"success\": true, \"total_matches\": 24, \"results\": [...]}"}}},"answer":{"title":"answer","description":"Complete final answer (sent as a single event, not streamed incrementally)","value":{"event_name":"answer","data":{"answer_piece":"## NVIDIA vs AMD: Earnings Comparison\n\nNVIDIA reported record revenue of $35.1B..."}}},"keepalive":{"title":"keepalive","description":"Heartbeat sent during idle periods (>15s gap between events)","value":{"event_name":"keepalive","data":{"timestamp":"2026-02-26T22:46:50.780316"}}},"status_finish":{"title":"status_finish","description":"Stream has completed","value":{"event_name":"status","data":{"status":"finish"}}},"status_keep_alive":{"title":"status_keep_alive","description":"Sent periodically during long tool execution gaps (in addition to keepalive events)","value":{"event_name":"status","data":{"status":"keep_alive"}}}},"exampleType":"examples"}},"exampleType":"examples"},"797e4aa5-f1e5-4d21-8ef8-cb7cf74a4c7d":{"description":"Bad Request - Invalid request parameters or incorrect format.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response wrapper","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code indicating the type of error. Common codes:\n- Authentication: `API_KEY_MISSING`, `INVALID_API_KEY`\n- Validation: `INVALID_REQUEST_BODY`, `ORGANIZATION_ID_MISSING`, `TICKERS_MISSING`, `CHAT_MESSAGE_ID_MISSING`, `DOCUMENT_ID_MISSING`\n- Service: `SEARCH_FAIL`, `TTS_FAIL`, `CREATE_CONV_FAIL`, `GET_STOCK_FAIL`, `CREATE_MSG_FAIL`, `ALPHA_COMP_FAIL`, `GET_REF_FAIL`\n- Connectors: `CONNECTOR_LIST_FAIL`, `CONNECTOR_NOT_FOUND`, `CONNECTOR_CREATE_FAIL`, `CONNECTOR_UPDATE_FAIL`, `CONNECTOR_DELETE_FAIL`, `CONNECTOR_TEST_FAIL`\n- Not Found: `NOT_FOUND`\n- Meeting cancellation: `MEETING_NOT_FOUND`, `MEETING_NOT_CANCELABLE`, `MEETING_CANCEL_REASON_REQUIRED`, `MEETING_CANCEL_UNAVAILABLE`, `MEETING_CANCEL_FAIL`\n- Meeting compliance review: `MEETING_NOT_FOUND`, `MEETING_REVIEW_NOT_PERMITTED`, `MEETING_NOT_REVIEWABLE`, `MEETING_REVIEW_UNAVAILABLE`, `MEETING_REVIEW_FAIL`\n- Transcriptions: `TRANSCRIPTION_UPLOAD_FAIL`, `TRANSCRIPTION_SUBMIT_FAIL`, `TRANSCRIPTION_GET_FAIL`, `TRANSCRIPTION_NOT_FOUND`, `TRANSCRIPTION_REQUEST_INVALID`, `TRANSCRIPTION_RESULT_UNAVAILABLE` (503, poll again), `TRANSCRIPTION_SUBMIT_UNAVAILABLE` (503, submit again with the same Idempotency-Key)","example":"INVALID_REQUEST_BODY","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"msg":{"type":"string","description":"Error message (deprecated, use `message` instead)","example":"query is required and must be a string","uniqueKey":"error.msg","typeLabel":"string"},"message":{"type":"string","description":"Error message providing more details about the error","example":"query is required and must be a string","uniqueKey":"error.message","typeLabel":"string"}},"required":["code"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"payload":{"oneOf":[{"description":"Always null for error responses","isRequired":true,"uniqueKey":"payload.oneOf.0","typeLabel":"any"},{"description":"Always null for error responses","type":"null","isRequired":true,"uniqueKey":"payload.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"payload","typeLabel":"any | null"}},"required":["error","payload"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"INVALID_REQUEST_BODY","msg":"query is required and must be a string","message":"query is required and must be a string"},"payload":null},"examples":{"Example":{"title":"Example","value":{"error":{"code":"INVALID_REQUEST_BODY","msg":"query is required and must be a string","message":"query is required and must be a string"},"payload":null}}},"exampleType":"examples"}},"exampleType":"examples"},"303d91be-d582-4426-908b-c9ceed77d2e5":{"description":"Unauthorized - Invalid API key or authentication credentials.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response wrapper","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code indicating the type of error. Common codes:\n- Authentication: `API_KEY_MISSING`, `INVALID_API_KEY`\n- Validation: `INVALID_REQUEST_BODY`, `ORGANIZATION_ID_MISSING`, `TICKERS_MISSING`, `CHAT_MESSAGE_ID_MISSING`, `DOCUMENT_ID_MISSING`\n- Service: `SEARCH_FAIL`, `TTS_FAIL`, `CREATE_CONV_FAIL`, `GET_STOCK_FAIL`, `CREATE_MSG_FAIL`, `ALPHA_COMP_FAIL`, `GET_REF_FAIL`\n- Connectors: `CONNECTOR_LIST_FAIL`, `CONNECTOR_NOT_FOUND`, `CONNECTOR_CREATE_FAIL`, `CONNECTOR_UPDATE_FAIL`, `CONNECTOR_DELETE_FAIL`, `CONNECTOR_TEST_FAIL`\n- Not Found: `NOT_FOUND`\n- Meeting cancellation: `MEETING_NOT_FOUND`, `MEETING_NOT_CANCELABLE`, `MEETING_CANCEL_REASON_REQUIRED`, `MEETING_CANCEL_UNAVAILABLE`, `MEETING_CANCEL_FAIL`\n- Meeting compliance review: `MEETING_NOT_FOUND`, `MEETING_REVIEW_NOT_PERMITTED`, `MEETING_NOT_REVIEWABLE`, `MEETING_REVIEW_UNAVAILABLE`, `MEETING_REVIEW_FAIL`\n- Transcriptions: `TRANSCRIPTION_UPLOAD_FAIL`, `TRANSCRIPTION_SUBMIT_FAIL`, `TRANSCRIPTION_GET_FAIL`, `TRANSCRIPTION_NOT_FOUND`, `TRANSCRIPTION_REQUEST_INVALID`, `TRANSCRIPTION_RESULT_UNAVAILABLE` (503, poll again), `TRANSCRIPTION_SUBMIT_UNAVAILABLE` (503, submit again with the same Idempotency-Key)","example":"INVALID_REQUEST_BODY","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"msg":{"type":"string","description":"Error message (deprecated, use `message` instead)","example":"query is required and must be a string","uniqueKey":"error.msg","typeLabel":"string"},"message":{"type":"string","description":"Error message providing more details about the error","example":"query is required and must be a string","uniqueKey":"error.message","typeLabel":"string"}},"required":["code"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"payload":{"oneOf":[{"description":"Always null for error responses","isRequired":true,"uniqueKey":"payload.oneOf.0","typeLabel":"any"},{"description":"Always null for error responses","type":"null","isRequired":true,"uniqueKey":"payload.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"payload","typeLabel":"any | null"}},"required":["error","payload"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"API_KEY_MISSING","msg":"header does not contain api key","message":"header does not contain api key"},"payload":null},"examples":{"Example":{"title":"Example","value":{"error":{"code":"API_KEY_MISSING","msg":"header does not contain api key","message":"header does not contain api key"},"payload":null}}},"exampleType":"examples"}},"exampleType":"examples"},"8be5a98a-0a53-40e8-a60a-de1404b56d45":{"description":"ENDPOINT_NOT_ENABLED: the organization's feature limit for this endpoint is set to blocked. Contact LinqAlpha to enable it.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response wrapper","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code indicating the type of error. Common codes:\n- Authentication: `API_KEY_MISSING`, `INVALID_API_KEY`\n- Validation: `INVALID_REQUEST_BODY`, `ORGANIZATION_ID_MISSING`, `TICKERS_MISSING`, `CHAT_MESSAGE_ID_MISSING`, `DOCUMENT_ID_MISSING`\n- Service: `SEARCH_FAIL`, `TTS_FAIL`, `CREATE_CONV_FAIL`, `GET_STOCK_FAIL`, `CREATE_MSG_FAIL`, `ALPHA_COMP_FAIL`, `GET_REF_FAIL`\n- Connectors: `CONNECTOR_LIST_FAIL`, `CONNECTOR_NOT_FOUND`, `CONNECTOR_CREATE_FAIL`, `CONNECTOR_UPDATE_FAIL`, `CONNECTOR_DELETE_FAIL`, `CONNECTOR_TEST_FAIL`\n- Not Found: `NOT_FOUND`\n- Meeting cancellation: `MEETING_NOT_FOUND`, `MEETING_NOT_CANCELABLE`, `MEETING_CANCEL_REASON_REQUIRED`, `MEETING_CANCEL_UNAVAILABLE`, `MEETING_CANCEL_FAIL`\n- Meeting compliance review: `MEETING_NOT_FOUND`, `MEETING_REVIEW_NOT_PERMITTED`, `MEETING_NOT_REVIEWABLE`, `MEETING_REVIEW_UNAVAILABLE`, `MEETING_REVIEW_FAIL`\n- Transcriptions: `TRANSCRIPTION_UPLOAD_FAIL`, `TRANSCRIPTION_SUBMIT_FAIL`, `TRANSCRIPTION_GET_FAIL`, `TRANSCRIPTION_NOT_FOUND`, `TRANSCRIPTION_REQUEST_INVALID`, `TRANSCRIPTION_RESULT_UNAVAILABLE` (503, poll again), `TRANSCRIPTION_SUBMIT_UNAVAILABLE` (503, submit again with the same Idempotency-Key)","example":"INVALID_REQUEST_BODY","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"msg":{"type":"string","description":"Error message (deprecated, use `message` instead)","example":"query is required and must be a string","uniqueKey":"error.msg","typeLabel":"string"},"message":{"type":"string","description":"Error message providing more details about the error","example":"query is required and must be a string","uniqueKey":"error.message","typeLabel":"string"}},"required":["code"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"payload":{"oneOf":[{"description":"Always null for error responses","isRequired":true,"uniqueKey":"payload.oneOf.0","typeLabel":"any"},{"description":"Always null for error responses","type":"null","isRequired":true,"uniqueKey":"payload.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"payload","typeLabel":"any | null"}},"required":["error","payload"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"ENDPOINT_NOT_ENABLED","msg":"This endpoint is not enabled for your organization (public_api_analytics_sse). Contact LinqAlpha to enable it.","message":"This endpoint is not enabled for your organization (public_api_analytics_sse). Contact LinqAlpha to enable it."},"payload":null},"examples":{"Example":{"title":"Example","value":{"error":{"code":"ENDPOINT_NOT_ENABLED","msg":"This endpoint is not enabled for your organization (public_api_analytics_sse). Contact LinqAlpha to enable it.","message":"This endpoint is not enabled for your organization (public_api_analytics_sse). Contact LinqAlpha to enable it."},"payload":null}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"8aa7599b-2dcb-4258-a16e-03ea68ad1736":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"9cdf8e58-8f32-4db6-a144-4d35b9596918":{"url":"https://api.linqalpha.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-KEY","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-API-KEY","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-API-KEY"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"linqalpha","siteName":"Linq Alpha API Docs","title":"Analytics V2 - Linq Alpha API Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-21T08:46:42.458Z","originalFileLocation":"api-reference/basic/analytics-sse-v2.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Agentic analytics with structured source selection, hard/soft filters, and identity fields. - search_types: Choose sources — rms (internal docs), external (transcripts, filings), structured - filters.rms.hard_filters / soft_filters: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only. - organization_id and user_id: Optional (required only for platform API keys) ## Event Flow conversation ← conversation_id message ← echo of user query status: start ← stream begins +-- AGENTIC LOOP (repeats) ---------+ | tool_use_block (x1-3) | | tool_result_block (x1-3) | | keepalive (~15s) | | think (xN) | +------------------------------------+ answer ← full answer with 1 citations status: finish ← stream ends ## Retrieving References After the stream finishes, use conversation_id to get citation sources: GET /v2/analytics/conversations/{conversation_id}/references Returns normalized references with enriched metadata. See Analytics V2 References for details. One question at a time per conversation. A request that arrives while an earlier question with the same conversation_id is still being answered can wait up to about 15 seconds and then end with a status event carrying error whose code is SESSION_BUSY (HTTP status is already 200). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Linq Alpha API Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Analytics V2 - Linq Alpha API Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Agentic analytics with structured source selection, hard/soft filters, and identity fields. - search_types: Choose sources — rms (internal docs), external (transcripts, filings), structured - filters.rms.hard_filters / soft_filters: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only. - organization_id and user_id: Optional (required only for platform API keys) ## Event Flow conversation ← conversation_id message ← echo of user query status: start ← stream begins +-- AGENTIC LOOP (repeats) ---------+ | tool_use_block (x1-3) | | tool_result_block (x1-3) | | keepalive (~15s) | | think (xN) | +------------------------------------+ answer ← full answer with 1 citations status: finish ← stream ends ## Retrieving References After the stream finishes, use conversation_id to get citation sources: GET /v2/analytics/conversations/{conversation_id}/references Returns normalized references with enriched metadata. See Analytics V2 References for details. One question at a time per conversation. A request that arrives while an earlier question with the same conversation_id is still being answered can wait up to about 15 seconds and then end with a status event carrying error whose code is SESSION_BUSY (HTTP status is already 200). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Linq Alpha API Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://linqalpha.mintlify.app/_mintlify/api/og/v2?division=Analytics+V2\u0026amp;title=Analytics+V2\u0026amp;description=Agentic+analytics+with+structured+source+selection%2C+hard%2Fsoft+filters%2C+and+identity+fields.%0A%0A-+**%60search_types%60**%3A+Choose+sources+%E2%80%94+%60rms%60+%28internal+docs%29%2C+%60exte\u0026amp;theme=90ffa347c1039bd70010bd6c\u0026amp;signature=6bbf60b48f211acd2f7449570a72d96f5c03be348a035dbe01876a979a646ea3\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Analytics V2 - Linq Alpha API Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Agentic analytics with structured source selection, hard/soft filters, and identity fields. - search_types: Choose sources — rms (internal docs), external (transcripts, filings), structured - filters.rms.hard_filters / soft_filters: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only. - organization_id and user_id: Optional (required only for platform API keys) ## Event Flow conversation ← conversation_id message ← echo of user query status: start ← stream begins +-- AGENTIC LOOP (repeats) ---------+ | tool_use_block (x1-3) | | tool_result_block (x1-3) | | keepalive (~15s) | | think (xN) | +------------------------------------+ answer ← full answer with 1 citations status: finish ← stream ends ## Retrieving References After the stream finishes, use conversation_id to get citation sources: GET /v2/analytics/conversations/{conversation_id}/references Returns normalized references with enriched metadata. See Analytics V2 References for details. One question at a time per conversation. A request that arrives while an earlier question with the same conversation_id is still being answered can wait up to about 15 seconds and then end with a status event carrying error whose code is SESSION_BUSY (HTTP status is already 200). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://linqalpha.mintlify.app/_mintlify/api/og/v2?division=Analytics+V2\u0026amp;title=Analytics+V2\u0026amp;description=Agentic+analytics+with+structured+source+selection%2C+hard%2Fsoft+filters%2C+and+identity+fields.%0A%0A-+**%60search_types%60**%3A+Choose+sources+%E2%80%94+%60rms%60+%28internal+docs%29%2C+%60exte\u0026amp;theme=90ffa347c1039bd70010bd6c\u0026amp;signature=6bbf60b48f211acd2f7449570a72d96f5c03be348a035dbe01876a979a646ea3\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/linqalpha/lrWql8nYb9-314d0/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Linq Alpha API Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1767FE\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/basic/analytics-sse-v2.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.linqalpha.com/#organization\",\"name\":\"Linq Alpha API Docs\",\"url\":\"https://docs.linqalpha.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/linqalpha/9BNJqkVKHb4kSYyJ/logo/light.svg?fit=max\u0026auto=format\u0026n=9BNJqkVKHb4kSYyJ\u0026q=85\u0026s=d7dd093386c0527ef6e6c9ef5f8130ad\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.linqalpha.com#website\",\"name\":\"Linq Alpha API Docs\",\"url\":\"https://docs.linqalpha.com\",\"publisher\":{\"@id\":\"https://docs.linqalpha.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2#webpage\",\"url\":\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2\",\"name\":\"Analytics V2\",\"description\":\"Agentic analytics with structured source selection, hard/soft filters, and identity fields. - search_types: Choose sources — rms (internal docs), external (transcripts, filings), structured - filters.rms.hard_filters / soft_filters: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only. - organization_id and user_id: Optional (required only for platform API keys) ## Event Flow conversation ← conversation_id message ← echo of user query status: start ← stream begins +-- AGENTIC LOOP (repeats) ---------+ | tool_use_block (x1-3) | | tool_result_block (x1-3) | | keepalive (~15s) | | think (xN) | +------------------------------------+ answer ← full answer with 1 citations status: finish ← stream ends ## Retrieving References After the stream finishes, use conversation_id to get citation sources: GET /v2/analytics/conversations/{conversation_id}/references Returns normalized references with enriched metadata. See Analytics V2 References for details. One question at a time per conversation. A request that arrives while an earlier question with the same conversation_id is still being answered can wait up to about 15 seconds and then end with a status event carrying error whose code is SESSION_BUSY (HTTP status is already 200). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.\",\"dateModified\":\"2026-10-21T08:46:42.458Z\",\"isPartOf\":{\"@id\":\"https://docs.linqalpha.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Linq Alpha API Docs\",\"item\":\"https://docs.linqalpha.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analytics V2\",\"item\":\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2#apireference\",\"headline\":\"Analytics V2\",\"name\":\"Analytics V2\",\"description\":\"Agentic analytics with structured source selection, hard/soft filters, and identity fields. - search_types: Choose sources — rms (internal docs), external (transcripts, filings), structured - filters.rms.hard_filters / soft_filters: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only. - organization_id and user_id: Optional (required only for platform API keys) ## Event Flow conversation ← conversation_id message ← echo of user query status: start ← stream begins +-- AGENTIC LOOP (repeats) ---------+ | tool_use_block (x1-3) | | tool_result_block (x1-3) | | keepalive (~15s) | | think (xN) | +------------------------------------+ answer ← full answer with 1 citations status: finish ← stream ends ## Retrieving References After the stream finishes, use conversation_id to get citation sources: GET /v2/analytics/conversations/{conversation_id}/references Returns normalized references with enriched metadata. See Analytics V2 References for details. One question at a time per conversation. A request that arrives while an earlier question with the same conversation_id is still being answered can wait up to about 15 seconds and then end with a status event carrying error whose code is SESSION_BUSY (HTTP status is already 200). The refused question is recorded in the conversation history but is not answered; send it again once the earlier answer completes.\",\"url\":\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2\",\"mainEntityOfPage\":{\"@id\":\"https://docs.linqalpha.com/api-reference/basic/analytics-sse-v2#webpage\"},\"dateModified\":\"2026-10-21T08:46:42.458Z\",\"publisher\":{\"@id\":\"https://docs.linqalpha.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.linqalpha.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Linq Alpha API Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Linq Alpha API Docs","nav":{"global":{"anchors":[{"anchor":"Website","href":"https://linqalpha.com"}]},"tabs":[{"tab":"Quickstart","pages":[{"title":"Quickstart","href":"/quickstart"}]},{"tab":"API Reference","groups":[{"group":"MCP","pages":[{"title":"LinqAlpha MCP","openapi":"POST /v1/mcp","href":"/api-reference/basic/mcp"}]},{"group":"Basic","pages":[{"title":"Map Tickers","openapi":"GET /v1/map_tickers","href":"/api-reference/basic/map_tickers"},{"title":"Chat Message","openapi":"GET /v1/chat_messages/{chat_message_id}","href":"/api-reference/basic/chat_message"},{"title":"References","openapi":"GET /v1/references","href":"/api-reference/basic/references"},{"title":"References (v2)","openapi":"GET /v2/conversations/{conversation_id}/references","href":"/api-reference/basic/references_v2"},{"title":"Presigned URL","openapi":"GET /v1/documents/{document_id}/presigned_url","href":"/api-reference/basic/presigned_url"},{"title":"Batch Presigned URLs","openapi":"GET /v1/documents/batch_presigned_urls","href":"/api-reference/basic/batch_presigned_urls"},{"title":"Presigned URL V2","openapi":"GET /v2/documents/{document_id}/presigned_url","href":"/api-reference/basic/presigned_url_v2"},{"title":"Batch Presigned URLs V2","openapi":"GET /v2/documents/presigned_urls","href":"/api-reference/basic/batch_presigned_urls_v2"},{"title":"Customer Connectors","openapi":"GET /v2/connectors","href":"/api-reference/basic/connectors"},{"title":"Search","openapi":"POST /v1/search","href":"/api-reference/basic/search"},{"title":"TTSQL","openapi":"POST /v1/ttsql","href":"/api-reference/basic/ttsql"},{"title":"Chat","openapi":"POST /v2/chat/sse","href":"/api-reference/basic/chat_v2"},{"title":"Analytics","openapi":"POST /v1/analytics/sse","href":"/api-reference/basic/analytics-sse"},{"title":"Stop Stream","openapi":"POST /v1/stop_stream","href":"/api-reference/basic/stop_stream"},{"title":"Conversation Feedback","openapi":"POST /v1/conversations/{conversation_id}/feedback","href":"/api-reference/basic/conversation_feedback"},{"title":"Delete Conversation Feedback","openapi":"DELETE /v1/conversations/{conversation_id}/feedback","description":"Deletes feedback for a specific conversation. If `message_id` is not provided, the feedback from the last message in the conversation will be deleted.","href":"/api-reference/basic/delete_conversation_feedback"}]},{"group":"Analytics V2","pages":[{"title":"Analytics V2","openapi":"POST /v2/analytics/sse","href":"/api-reference/basic/analytics-sse-v2"},{"title":"Analytics V2 References","openapi":"GET /v2/analytics/conversations/{conversation_id}/references","description":"Retrieves the list of evidence references (citations) used in an analytics conversation, in normalized format with enriched metadata.\n\n> **Note:** This endpoint returns references from the Analytics V2 SSE endpoint. Some source types (e.g., `rms`) require a separate onboarding process. For more information, please contact us at support@linqalpha.com.\n\n**Usage Flow:**\n1. Call the Analytics SSE V2 endpoint (`POST /v2/analytics/sse`)\n2. From the SSE stream, find the `conversation` event → extract `conversation_id`\n3. After the stream finishes, call this endpoint with the `conversation_id`\n4. The response contains all references with citation index, source document info, and metadata\n\n**How to view original documents:**\n- **Via Viewer:** `https://chat.linqalpha.com/rms/viewer?conversation_id={conversation_id}\u0026citation_idx={citation_idx}`\n\n**Note:** This endpoint returns references in the same normalized format as the v1 references API, with enriched metadata fields (s3_file_key, external_url, calendar_date, fiscal_year, etc.). Use this endpoint when consuming the v2 analytics SSE stream.","href":"/api-reference/basic/analytics_references"},{"title":"Analytics V2 Judge","openapi":"POST /v2/analytics/messages/{chat_message_id}/judge","href":"/api-reference/basic/analytics_judge"},{"title":"Vault — Get Upload URL","openapi":"POST /v2/vault/presigned_url","href":"/api-reference/vault/presigned_url"},{"title":"Vault — Confirm Upload","openapi":"POST /v2/vault/confirm","href":"/api-reference/vault/confirm"},{"title":"Vault — Document Status","openapi":"GET /v2/vault/status","href":"/api-reference/vault/status"}]},{"group":"Transcriptions","tag":"NEW","pages":[{"title":"Transcriptions — Get Upload URL","openapi":"POST /v2/transcriptions/uploads","href":"/api-reference/transcriptions/upload"},{"title":"Transcriptions — Submit Job","openapi":"POST /v2/transcriptions","href":"/api-reference/transcriptions/create"},{"title":"Transcriptions — Poll / Retrieve","openapi":"GET /v2/transcriptions/{job_id}","href":"/api-reference/transcriptions/get"},{"title":"Transcriptions — Supported Languages","href":"/api-reference/transcriptions/languages"}]},{"group":"Evaluations","pages":[{"title":"Execute Agent Judge","openapi":"POST /v2/judge/agent","href":"/api-reference/evaluations/create"},{"title":"Get Agent Judge Evaluation","openapi":"GET /v2/judge/agent/{evaluation_id}","href":"/api-reference/evaluations/get"},{"title":"Execute LLM Judge","openapi":"POST /v2/judge/llm","href":"/api-reference/evaluations/create_llm"},{"title":"Get LLM Judge Evaluation","openapi":"GET /v2/judge/llm/{evaluation_id}","href":"/api-reference/evaluations/get_llm"}]},{"group":"RMS (On request)","pages":[{"title":"Source","openapi":"GET /v1/sources/{source_id}","tag":["New"],"href":"/api-reference/rms/source"},{"title":"Create Organization","openapi":"POST /v1/organizations","href":"/api-reference/rms/create_organization"},{"title":"Create Source Batch","openapi":"POST /v1/source_batches","tag":["New"],"href":"/api-reference/rms/create_source_batch"},{"title":"Get Upload URL","openapi":"POST /v1/sources/upload_url","tag":["New"],"href":"/api-reference/rms/upload_url"},{"title":"Create Source","openapi":"POST /v1/sources","tag":["New"],"href":"/api-reference/rms/create_source"},{"title":"RMS Chat","openapi":"POST /v1/rms_chat","href":"/api-reference/rms/rms_chat"},{"title":"RMS Deep Research","openapi":"POST /v1/rms_deep_research","href":"/api-reference/rms/rms_deep_research"}]},{"group":"Briefing","tag":"NEW","pages":[{"title":"Create Briefing Schedule","openapi":"POST /v1/briefings","href":"/api-reference/briefing/create"},{"title":"List Briefing Schedules","openapi":"GET /v1/briefings","href":"/api-reference/briefing/list"},{"title":"Update Briefing Schedule","openapi":"PATCH /v1/briefings/{id}","href":"/api-reference/briefing/update"},{"title":"Delete Briefing Schedule","openapi":"DELETE /v1/briefings/{id}","href":"/api-reference/briefing/delete"},{"title":"Preview Briefing On-Demand","openapi":"POST /v1/briefings/preview","href":"/api-reference/briefing/preview"},{"title":"List Deliveries","openapi":"GET /v1/briefings/{id}/deliveries","href":"/api-reference/briefing/deliveries"},{"title":"Get Delivery Detail","openapi":"GET /v1/briefings/deliveries/{delivery_id}","href":"/api-reference/briefing/delivery-detail"},{"title":"Get Delivery References","openapi":"GET /v1/briefings/deliveries/{delivery_id}/references","href":"/api-reference/briefing/delivery-references"},{"title":"Refresh External Content PDF Upload URL","openapi":"POST /v1/external_content/refresh_upload_url","href":"/api-reference/briefing/external-content-refresh-upload-url"}]},{"group":"Sync Status","tag":"NEW","pages":[{"title":"Organization Sync Status","openapi":"GET /v1/status/sync","href":"/api-reference/status/sync"},{"title":"Document Sync Status","openapi":"GET /v1/status/documents","href":"/api-reference/status/documents"},{"title":"Container Sync Status","openapi":"GET /v1/status/containers","href":"/api-reference/status/containers"}]},{"group":"Meeting Agent","pages":[{"title":"Cancel Meeting Agent","openapi":"POST /v1/meetings/{meeting_id}/cancel","href":"/api-reference/meetings/cancel"},{"title":"Approve Meeting Agent Results","openapi":"POST /v1/meetings/{meeting_id}/approve","href":"/api-reference/meetings/approve"},{"title":"Reject Meeting Agent Results","openapi":"POST /v1/meetings/{meeting_id}/reject","href":"/api-reference/meetings/reject"}]}]}]},"title":"Analytics V2 - Linq Alpha API Docs","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}