Ask a question in plain English. Get back a finished, on-brand answer — a chart, a table, a client-ready summary — that you can drop straight into your work. No spreadsheets, no analysts, no chart-building.
Marketing Demo
New here? 10-second explainer
You ask a question in plain English. You get back a finished answer — a chart, a table, or a short write-up — already in your brand colours, ready to use.
Think of it like a vending machine for portfolio answers: press a button ("largest country exposures?") and out comes the finished thing. You don't cook it or plate it — it arrives done.
🗣️Ask like a human. No codes, no menus. "Which bonds look cheap?" works.
🎨It looks like you. Every chart and table comes out in your colours, not ours.
🔄It gets smarter on its own. When new data is added to Orca, it just appears here — nobody has to update this page.
Type a question on the left, watch the answer build on the right.
Query
Recommended endpoint for Tom:
https://orca.x-trillion.com/call
For Claude Desktop, use the connector URL separately: /sse?key=<tom_connector_key>. This page is intentionally simpler and just calls the HTTP query API.
Results
Preview
Raw JSON
Product API
How it Works
This panel stays empty until you ask something — then it fills with finished components. Try "What are the largest country exposures in wnbf?" You'll get a chart. You didn't build the chart — Orca did. That's the whole idea: you display answers, you don't build them.
Click "Send Query" to see the returned JSON.
Product API — POST /query
The same Orca, exposed as a stable typed API. Front ends read business fields — ytw, duration, rating — and never need to know which internal tool ran or how it labelled things. Single-bond lookups come back normalized as bond_analytics (clean numerics + source lineage + a one-line summary); everything else is wrapped as raw, so the response is always valid.
Ask about a single bond to see the normalized bond_analytics envelope — clean numerics, source lineage, and a one-line summary.
The lightbulb 💡
In your own app, you just type what you want — in plain English — and the finished answer comes back ready to show.
"Largest country exposures in wnbf" → a finished pie chart. "Is XS1709535097 cheap?" → a finished fact sheet. You don't pick a tool, build a request, or assemble the answer. You write the question; Orca returns the finished thing.
Two separate halves: the question is yours — free text, typed by your user, from anywhere in your app — and the answer is Orca's — a finished, branded chart, table, or summary. You ask for the answer; you don't make it.
So what do you actually build?
Almost nothing. You send the question, and Orca answers with a typed "block" — it decides whether the answer is a chart, a table, or a fact sheet. You write the code to draw each kind of block exactly once, and after that every new question just works.
You never write a "country exposures chart" and a "yield chart" and a "ratings chart". You write "how to draw a chart" one time. Orca picks which one each answer is.
Step 1 — Ask Orca, and ask for display blocks
One POST. The only special bit is include_display: true — that tells Orca to return ready-to-draw blocks instead of raw data.
const res = await fetch("https://orca.x-trillion.com/call", {
method: "POST",
credentials: "include",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
tool: "orca_query",
args: { query: "largest country exposures in wnbf", client_id: "guinness" },
include_display: true // ← give me ready-to-draw blocks
})
});
const { display } = await res.json();
Step 2 — What comes back: a list of typed blocks
display.blocks is an array. Each block says what it is (type) and carries its own data. display.theme is your brand (more below).
Loop the blocks, switch on type, hand each to a small draw function. This is the entire integration — and it never grows.
function renderBlock(block) {
switch (block.type) {
case "chart": return drawChart(block); // ← ONE chart function, every chart
case "table": return drawTable(block); // ← ONE table function, every table
case "factsheet": return drawFactsheet(block);
default: return; // unknown type? skip it, don't crash
}
}
display.blocks.forEach(renderBlock);
The payoff: when Orca gains a new capability next month that returns a chart, it renders here with zero new code — because you already handle "chart". Your page stops growing; the answers keep coming.
Your brand comes with the answer
display.theme is resolved by Orca from the client_id you send — so charts and tables arrive in your colours, not ours. Apply it once when a response lands:
applyTheme(display.theme); // sets chart palette + colours from your brand
Same page, different team: send client_id: "guinness" and it's Guinness navy; send another client and it's their colours — no code change. To force a specific look regardless, set HOST_THEME at the top of the script and your values always win.
Even less work, later
The three steps above are the do-it-yourself version. The next step is that you don't write drawChart at all — you drop in our renderer component and feed it display. Same blocks, same theme, but the drawing code lives with us and every client gets it for free. Until then, the loop above is all you need.
Request Shape
{
"tool": "orca_query",
"args": {
"query": "Summarize the portfolio positioning in client-friendly language.",
"client_id": "guinness"
}
}
Response Fields
data - returned portfolio data, tables, summaries, or text depending on the question.
data.bonds - bond lookup results keyed by ISIN when the query asks about a specific bond.
routing.tool - the internal Orca tool selected from the natural-language query.
routing.args - arguments Orca generated for that tool.
routing.confidence - router confidence score when available.
routing.model - model used to route the request.
error - populated when the request is unsupported or fails.
Your dashboard — 6 questions
Edit any question, then press Run. Each panel on the right fills with a finished, on-brand component. This whole dashboard is just six questions — you didn't build a single chart.
Each panel shows a one-line answer above its component. Toggle Brief ↔ Enhanced to switch between the direct answer and the same answer with related context — no re-run needed.
Dashboard
Edit the six questions on the left and press Run — each panel fills with a finished component, in your brand colours.