Analytics V2
Agentic analytics with structured source selection, hard/soft filters, and identity fields.
search_types: Choose sources —rms(internal docs),external(transcripts, filings),structuredfilters.rms.hard_filters/soft_filters: Hard = exclude non-matching (AND between fields, OR within arrays). Soft = boost relevance only.organization_idanduser_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][2] 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.
Referencing Vault documents
To chat over documents you uploaded through the Vault endpoints, pass theirrms_document_id (returned by Vault — Confirm Upload) in search_types.rms[].document_ids, and set source to "vault":
document_idsarerms_document_idvalues fromconfirm(poll Document Status untilSyncedfirst) — not the presigndocument_id.workspacemust match the workspace the document was uploaded into (theworkspacesent topresigned_url/confirm).
Selecting a model
Passworkspace_model to run a request on a specific model:
workspace_model SSE event, so
you can always confirm which one served the request:
[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.workspace_model and your requested value is ignored. This is not an error —
the request succeeds on the policy’s model. Read the workspace_model SSE event
to see what ran.400 before the stream
opens, so a typo fails fast rather than silently running on a different model.
The permitted set is a fixed list, not every Claude model that exists. Currently
claude-opus-4-7, claude-opus-4-8 and claude-opus-5 (with or without the
[1m] suffix). Requesting anything else returns 400 with
workspace_model is not permitted in this environment. Ask us if you need a
model that is not on the list.Authorizations
Body
The analytics query to process.
"What are the latest insights on AAPL earnings?"
Organization ID
User ID
User email
User name
Existing conversation ID for multi-turn continuation. Omit or null for new conversation.
Structured source selection. Controls which document sources to query. Omitting a category means don't search it.
Metadata filters. Hard filters exclude non-matching documents (AND between fields, OR within arrays). Soft filters boost relevance without excluding.
Customer MCP connectors to enable for this analytics request.
Connector names to disable for this analytics request.
Optional. LLM model to run this request with, e.g. claude-opus-4-7. When omitted, the model configured for your organization is used. An enforced organization-level model policy takes precedence over this field. 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.
claude-opus-4-7, claude-opus-4-8, claude-opus-5, claude-opus-4-7[1m], claude-opus-4-8[1m], claude-opus-5[1m] ^claude-(?:opus|sonnet|haiku)-[\w.-]{1,40}(?:\[1m\])?$"claude-opus-4-7"
Response
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.