# Welcome

Welcome to the Orbit Financial Technology! Here you'll get an overview of all the amazing features Orbit offers to help you make sense of unstructured data.

You'll see some of the best parts of Orbit in action — and find help on how it can help with your day to day work.

### Jump right in

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Getting Started</strong></td><td>Accessing Orbit Platform       </td><td><a href="/files/r0WMaBNrA8XN1bfuiyuu">/files/r0WMaBNrA8XN1bfuiyuu</a></td><td></td><td><a href="/pages/7aUFmnCMx9m4smGncsXL">/pages/7aUFmnCMx9m4smGncsXL</a></td></tr><tr><td><strong>Platform Overview</strong> </td><td>Understand the building blocks   </td><td><a href="/files/r0WMaBNrA8XN1bfuiyuu">/files/r0WMaBNrA8XN1bfuiyuu</a></td><td></td><td><a href="/pages/DSQqnsAqJPnIRyPgQJ1S">/pages/DSQqnsAqJPnIRyPgQJ1S</a></td></tr><tr><td><strong>Pre-built Knowledge Bases</strong>  </td><td>Knowledge Bases </td><td><a href="/files/r0WMaBNrA8XN1bfuiyuu">/files/r0WMaBNrA8XN1bfuiyuu</a></td><td></td><td><a href="/pages/V1ye2G5UrMpw5g4c2BG5">/pages/V1ye2G5UrMpw5g4c2BG5</a></td></tr></tbody></table>


# 1.1 Welcome - the data and research intelligence layer for institutional investing

Orbit is the integrated data layer for investment research — one place where the public, internal, and third-party data your team relies on is brought together, linked, and made ready for analysis. It sits between the world's financial information and the decisions your firm makes from it, turning filings, transcripts, research, news, and your own internal documents into a single structured foundation that your analysts, portfolio managers, and AI systems can all work from.

<figure><img src="/files/ScX4vkEmMl8p8WflIdN5" alt=""><figcaption></figcaption></figure>

Research data is fragmented by default. Public filings sit in one system, market and pricing data in another, broker research in inboxes and shared drives, news in feeds, and a firm's own notes and models scattered across teams. The work of pulling these together — and keeping them tied to the right company — is where research time is spent, and where it is lost. Orbit's purpose is to be the one layer that ends that fragmentation: every source, public or private, in a single place, anchored to a common backbone, and queryable as one body of knowledge.

That backbone is the **entity master** — a master record of every company and the relationships between them. It is what allows a broker note, a regulatory filing, a news item, and a price series about the same company to be recognised as being about that company, and read together. Connecting a firm's internal research into the global public corpus this way is where the value compounds: your analysts' proprietary view, set against the full public record, in one query. The entity master is the part of Orbit that is hardest to replicate and the reason the platform becomes more useful the more data it holds.

On top of that foundation, Orbit does two things. It lets your team **ask** — putting questions in natural language across all of the data at once and getting answers grounded in primary sources. And it lets your team **automate** — building research as repeatable workflows that run on their own, producing structured data and reports on a schedule or a trigger. The same platform serves the analyst running an ad hoc question this morning and the desk running a standing monitoring process every night.

The coverage beneath it is comprehensive and global. Across more than 60,000 listed companies and over a decade of history, Orbit maintains not just the documents themselves but the structured data drawn from them — spanning the Americas, APAC, and Europe, market by market and country by country. A decade of processed history cannot be back-filled, and it compounds: every new document is read against everything that came before it.

Orbit is also **model-agnostic and personalised by design.** It is not built around a single AI model or vendor. It routes each piece of work to the model best suited to it, balancing quality against cost — so the platform improves as the underlying models improve, and your firm is never locked to one provider's pricing or capability. And it is built so that every user can hold their own logic, their own views, and their own workflows on top of the shared data, rather than being handed a single fixed way of working. The intelligence is in the data, the entity master that links it, and the orchestration around it — not in any one model.

The platform is organised into two layers. The **Knowledge Base** is the foundation: the entity master, the unified body of public, internal, and third-party data, and the structured records built on top. **Orbit Insight** is where your team works: the application and integrations through which you ask questions, monitor companies and portfolios, run and build automated research, and connect Orbit to the systems and data you already use. Part 2 explains how each works, layer by layer.

This is what it means to call Orbit *infrastructure* rather than a tool. It is the layer a firm adopts to bring AI to its research process systematically — across all of its data, in one consistent and governed place — rather than assembling point solutions or asking each analyst to improvise with a general-purpose assistant. The chapters that follow set out exactly what that layer does, and why bringing it all together is a larger undertaking than it first appears.


# 1.2 Who Orbit is for

Orbit is built for the institutional buy-side — hedge funds, asset managers, and the investment teams within them — where research depends on reading across a large, fragmented body of information and turning it into decisions. It is designed to meet a firm wherever it sits in its own adoption of AI, rather than assuming everyone starts from the same place. A team taking its first structured step beyond a general-purpose assistant and a desk already running automated workflows are both served by the same platform; what differs is how much of it they switch on.

The same foundation looks different depending on the role using it. Because every source sits in one place, anchored to the same entity master, each person works against the same underlying data — but through the lens of their own job, their own coverage, and their own logic.

**The research analyst** uses Orbit to cover more ground without losing depth. They pull structured fundamentals across a coverage universe, track how a company's disclosures and guidance evolve over time, read a company's filings alongside the broker research and news about it, and produce first-draft analysis grounded in primary sources rather than starting from a blank page. The analyst can also build agents that encode their own approach — the metrics they watch, the questions they always ask of a new filing — so their method scales beyond what they can read by hand.

**The portfolio manager** uses Orbit to keep a book under continuous watch. They monitor holdings against theses, see what has changed since the last review, and get synthesis that connects a single company's news to the wider position — without waiting for the next scheduled update. Standing monitoring workflows run on their own and surface only what warrants attention.

**The head of research** uses Orbit to scale and standardise the function. They apply consistent process across the whole team, codify the firm's research approach into reusable agents and workflows, and extend coverage into markets and asset classes that were previously out of practical reach for the headcount available. Where each analyst once held their method in their head, the head of research can see it captured, shared, and run at scale.

**The quantitative team** treats Orbit as a clean, entity-anchored data source. Structured fields, linked to the right company and traceable back to the originating document, accessible by API — suitable for signal construction, systematic screening, and continuous monitoring across a wide universe.

**The data or technology leader** treats Orbit as infrastructure. Rather than commissioning an internal build to unify the firm's research data, they adopt a layer that already connects public, internal, and third-party sources, plugs into existing systems through the API and standard connectors, and can be deployed privately where required — giving the firm's own AI investments an institutional-grade data foundation to draw on, governed in one place.

These are not separate products. They are the same Knowledge Base and the same Orbit Insight, surfaced for different work and shaped by each user's own logic and views. That is what makes Orbit a single layer a whole firm can adopt — analysts, PMs, quants, and technologists working over one shared, linked body of data — rather than a collection of disconnected tools, each team solving the integration problem again on its own.


# 1.3 Core principles

Four principles run through every part of Orbit. They explain not just what the platform does, but why it is built the way it is — and together they describe what it means to treat research data as infrastructure rather than as a set of tools.

**One layer for all your data.** Orbit's first principle is unification. Public filings, market data, third-party feeds, and a firm's own internal research belong in one place, linked to a common backbone, and queryable as a single body of knowledge — not scattered across systems that each have to be searched and reconciled by hand. The entity master is what makes this real: by resolving every document and data point to the company it concerns, it lets sources that were never designed to work together be read together. A firm's proprietary research, set against the full public record, in one query. This is the principle the rest of the platform serves, and the reason Orbit becomes more valuable the more data it holds.

**Structured-first.** Orbit does not simply store documents and search them on demand. It reads them, draws structured data out of them, and answers from that structured layer wherever it can — falling back to the underlying text only when it must. This is what keeps results consistent from one user to the next and stable over time, and what makes it practical to run analysis across an entire universe of companies rather than one name at a time. The reading has already been done; your team works from the result.

**Personalised and model-agnostic.** Orbit is built to be shaped by the people using it and to draw on whichever AI models serve the work best. Every user can hold their own logic, their own views, and their own workflows on top of the shared data, so the platform reflects how each team actually researches rather than imposing a single fixed method. And because Orbit is not built around any one model or vendor, it routes each task to the model best suited to it — balancing quality against cost, improving as the models improve, and leaving your firm free of lock-in to a single provider. Capability that adapts to the firm, on infrastructure that adapts to the market.

**Transparent and accountable.** Every answer traces back to its source. Structured data carries its lineage to the originating document, analysis cites what it drew on, and a person can always see — and stand behind — how a conclusion was reached. In a setting where research informs real capital decisions and must withstand scrutiny, this is not a feature bolted on at the end; it is a condition of the whole design. Orbit is built to be relied on, which means it is built to be checked.


# 1.4 Capabilities at a glance

At a high level, Orbit gives a research team five things to do with its data. Each is covered in depth later — the mechanics in Part 2, the applied use cases in Part 3 — but together they describe the shape of the platform, and the order in which a firm typically grows into it.

**Access.** Orbit puts a comprehensive, global body of research data within reach from one place: more than 60,000 listed companies across the Americas, APAC, and Europe, over a decade of history, spanning filings, transcripts, sustainability and regulatory documents, news, and market data — alongside whatever internal and third-party sources the firm brings in. Everything is anchored to the entity master, so it is not just available but linked. Access, in Orbit, means access to *connected* data, not another set of silos to search.

**Ask.** Your team puts questions in natural language and gets answers drawn from across all of that data at once — grounded in primary sources and traceable back to them. Because the documents have already been read and structured, an answer about a company draws on its filings, its disclosures, the research and news about it, and the firm's own notes, read together. This is the ad hoc mode: a question this morning, answered now.

**Monitor.** Beyond one-off questions, Orbit keeps companies, portfolios, and themes under continuous watch. Rather than re-running the same checks by hand, a team sets what matters — holdings, a coverage universe, a thesis, a theme — and Orbit surfaces what changed and what warrants attention. Periodic review becomes standing awareness.

**Automate.** The same agents that answer questions can be assembled into repeatable workflows that run on their own — on a schedule or a trigger — producing structured data and finished reports without anyone restarting the process each time. Orbit ships with off-the-shelf agents to start fast, but the larger idea is that every user can build their own: encoding their logic, their views, and their workflow, and eventually linking agents together to automate research end to end. This is where a team moves from using AI occasionally to running its research process on it.

**Integrate.** Finally, all of the above is built to live inside the firm's existing environment rather than beside it. Orbit connects to internal systems and third-party data, is reachable through an API and standard connectors, and can be deployed privately where required — so the firm's own AI investments and existing tools draw on the same connected data foundation, governed in one place.

Read together, these are not five separate features so much as one progression: a firm starts by *accessing* connected data and *asking* questions of it, grows into *monitoring* and *automating* its recurring research, and *integrates* the whole layer into how it already works. That progression — from occasional use to systematic infrastructure — is the path the rest of this documentation follows.


# 1.5 Why Orbit, not a model alone

Most firms evaluating Orbit have already tried a general-purpose AI assistant, and many have considered building something themselves. Both are reasonable starting points, and both run into the same wall: the hard part of investment research is not the reasoning, it is the data the reasoning has to stand on. Orbit is the layer that supplies it.

**A model on its own has no data of yours, and no memory of anything.** A general-purpose assistant is a powerful reasoning engine, but it arrives empty. It has no access to a firm's internal research, no proprietary corpus of filings and disclosures, no decade of history to read a new document against, and no master record that knows which company a document actually concerns. It cannot tell you what changed since last quarter because it does not retain last quarter. Ask it the same question twice and you may get two different answers, with no trace of where either came from. For a casual question this is fine. For research that informs capital decisions and must withstand scrutiny, the gap is the whole problem. Orbit exists to close it: the connected data, the entity master that links it, the persistence that lets one analysis build on the last, and the lineage that lets every answer be checked. The model reasons; Orbit gives it something to reason about.

**Running at scale is a different problem from answering one question.** A model can read a filing you paste into it. It cannot, on its own, monitor a thousand companies overnight, run the same disciplined analysis consistently across an entire coverage universe, or produce structured output stable enough to compare one company against another and this quarter against the last. That requires data already structured for the purpose, workflows that run unattended, and orchestration underneath — which is what Orbit is. The difference between *asking a question* and *running a research process* is the difference between a model and the infrastructure around it.

**Building it yourself is a data problem, and the data is the part that cannot be rushed.** The orchestration patterns are increasingly public, and a capable team can wire a model to a database in weeks. What it cannot do in weeks — or in a single year — is source filings, transcripts, news, and market data across the Americas, APAC, and Europe; process a decade of history so that each new document is read in the context of everything before it; and, hardest of all, build and maintain an entity master that reliably resolves every document and data point to the right company across markets, languages, and corporate changes. That backbone is the difference between a pile of sources and a connected one, and it is precisely the part that takes years and does not get easier with a larger model. On top of it sits the ongoing work most build plans underestimate: integrating the firm's own internal data and third-party feeds into that backbone, keeping the whole thing current as companies change and new documents arrive, and routing work across models as they evolve. A firm can build this. The question is whether it wants to spend years building data infrastructure instead of doing research — and whether, having built it, it wants to maintain it forever.

**Orbit is not a competitor to the models — it is what makes them useful here.** Because the platform is model-agnostic, it does not bet against any model; it routes each task to whichever model serves it best, and improves as they improve. The lasting value is not in the model, which everyone can reach, but in the connected data, the entity master, and the orchestration that turn a general-purpose model into an institutional research capability. That is the layer a firm adopts when it decides to bring AI to its research process systematically, rather than one question at a time.

This is the claim Part 2 sets out to prove. Each chapter that follows — the entity master, the unified data layer, the structured records, the agents your team can build, the orchestration across models — is one more part of what "a model alone" leaves out, and one more part a build-it-yourself effort would have to reproduce and maintain. Read together, they are the case for adopting the layer rather than rebuilding it.


# 2.1 The platform at a glance

Orbit is built as a stack. At the bottom is the data and the backbone that links it; in the middle, the structured records drawn from that data; above that, the agents that do the work; and across the top, the people and systems that put questions to it. Each layer rests on the one below, and the whole stack is held together by a single backbone — the entity master — that runs through all of it.

<figure><img src="/files/pqYsDfgvlQUySPljqVS7" alt=""><figcaption></figcaption></figure>

> *Caption: The Orbit stack — all data unified on one entity master, structured by agents, and served to users and systems above.*

Read from the bottom up, the architecture tells the story of the platform.

**The entity master is the backbone.** It underpins every other layer. A master record of every company and the relationships between them, it is what allows a filing, a broker note, a news item, and a price series about the same company to be recognised as belonging together. Every piece of data in the layers above is anchored to it. Because of that, nothing in Orbit sits in isolation — and adding a new source means linking it into a structure that already understands the companies it describes, not starting another silo. This is covered in 2.2.

**The data layer is one home for everything.** Public filings, news, and market data sit alongside the firm's own internal documents and any third-party feeds it brings in — all in one place, all anchored to the entity master. This is what makes Orbit *the* data layer for research rather than one more source to reconcile against the others. The same layer also holds a private space, a sandbox, where a firm's own data can live securely within the platform. This is covered in 2.3.

**The structured layer is where documents become data.** Sitting between the raw sources and the agents above, this layer is the result of the reading Orbit has already done — the structured records drawn out of documents so they can be queried, compared, and monitored without re-reading the underlying text each time. Specialist processes turn each kind of source into structured output: broker research, news flow, filings, and more. This is covered in 2.4.

**The agent layer is where the work happens.** At the top, an orchestrating agent directs specialist agents that draw on the structured layer beneath them to answer questions and run workflows. The agent system works in two modes — answering ad hoc questions across the data, or running structured workflows that produce data and reports on their own. Orbit provides off-the-shelf agents to start with, and lets every user build their own. This is covered in 2.5 through 2.8.

Above the stack are the people and systems that use it: analysts, portfolio managers, and quants working in **Orbit Insight**, and the firm's own applications and AI tools reaching the same data through the API and connectors. Whichever way the platform is approached, it is the same stack underneath, resting on the same backbone.

For simplicity, the documentation groups this stack into two layers a user deals with directly. The **Knowledge Base** is everything from the entity master up through the structured data — the connected, structured foundation. **Orbit Insight** is everything above it — the agents, the application, and the integrations through which a team actually works. The chapters that follow take each part of the stack in turn, starting with the backbone that holds it together.


# 2.2 The entity master

Every other part of Orbit rests on one thing: a master record of every company Orbit covers, and the relationships between them. This is the entity master. It is the least visible part of the platform and the most important — the backbone that turns a collection of separate sources into a single connected layer.

The problem it solves is deceptively hard. A single company appears across the world's data under many different names and identifiers: a legal name in a filing, a ticker on an exchange, a shortened name in a news headline, a subsidiary in a broker note, a different romanisation in another market. To a person, these are obviously the same company. To a system, they are not — unless something reconciles them. The entity master is that something. It resolves every document, every data point, and every reference to the one company it actually concerns, so that everything Orbit holds about that company can be brought together and read as one.

<figure><img src="/files/SLe1QQ7GTHWC3v1vmDgk" alt=""><figcaption></figcaption></figure>

> *Caption: Many sources, many names, one company — reconciled by the entity master.*

This is what makes Orbit *the* data layer rather than one more source to reconcile. Because every source is anchored to the same backbone, a filing, a news item, a price series, and a firm's own internal research about a company are recognised as belonging together — and can be queried together. Ask about a company and the answer draws on everything Orbit knows about it, from every source, without anyone first having to work out which records refer to which entity.

The relationships matter as much as the records. The entity master holds not just companies in isolation but how they connect — corporate structures and the links between related entities — so that analysis can follow those connections rather than stopping at a single name. This is the foundation that later chapters build on: it is what lets monitoring, screening, and thematic work reach across a universe of companies rather than examining them one at a time.

The backbone is also what makes integrating a firm's own data so valuable. When internal research — broker notes, meeting notes, proprietary models — is brought into Orbit, it is anchored to the same entity master as the public corpus. A firm's private view of a company then sits directly alongside the full public record of that same company, in one place, in one query. This is covered in detail in 2.7, but the reason it works at all is the backbone: without a common entity master, internal and external data are two disconnected piles; with it, they are one connected body of knowledge.

This is also the part of Orbit that is hardest to replicate, and the clearest answer to why building this in-house is a larger undertaking than it appears. Wiring a model to a database is quick. Building an entity master that reliably resolves every document and data point to the right company — across markets, across languages, across name changes, mergers, and corporate restructurings, and keeping it correct as companies change over time — is slow, painstaking, and never finished. It is not a feature that a larger or better AI model makes easier, because it is a data problem, not a reasoning problem. A firm that sets out to unify its research data discovers that this backbone is most of the work, and that the work does not end. Orbit has already done it, and maintains it continuously.

Everything that follows in this section — the unified data layer, the structured records, the agents — depends on this foundation. It is the reason Orbit becomes more useful the more data it holds: each new source is not another silo, but one more body of information linked into a structure that already understands the companies it describes.


# 2.3 One home for all your data

Research data is fragmented by default, and the fragmentation is expensive. Public filings live in one system, market and pricing data in another, news in feeds, broker research in inboxes and shared drives, and a firm's own notes, models, and meeting records scattered across teams and individuals. Each source has its own way of naming companies, its own access method, and its own gaps. The work of pulling them together for any given question — and making sure they all refer to the same company — falls on the analyst, every time. It is repeated, manual, and never reusable.

Orbit's answer is to be the one home for all of it. Every source sits in the same place, anchored to the same entity master, and is queryable as a single body of knowledge. The data falls into three kinds.

**Public data** is the global corpus Orbit sources and maintains: company filings, earnings transcripts, sustainability and regulatory documents, news, and market data, spanning more than 60,000 listed companies across the Americas, APAC, and Europe, with over a decade of history behind it. This is the shared foundation every client starts from, and it arrives already connected — not as a feed to be integrated, but as part of the linked layer.

**Internal data** is the firm's own: broker research it receives, analyst notes, proprietary models, meeting records, and any other documents it holds. Brought into Orbit, this private material is anchored to the same entity master as the public corpus, so a firm's own view of a company sits directly alongside the full public record of that company. This is where much of the value is, and it is covered in full in 2.7.

**Third-party data** is the specialist sources a firm subscribes to or wants to bring in — additional data providers, niche feeds, alternative datasets. Rather than living in yet another silo, these too can be connected through the backbone and read alongside everything else.

<figure><img src="/files/q0YOoFxeVPlyxGkmprdZ" alt=""><figcaption></figcaption></figure>

> *Caption: One company, every source — public, internal, and third-party — in a single view.*

The point of putting all three in one place is not tidiness; it is that the combination is worth more than the sum. A question answered across public filings, market data, the firm's internal research, and third-party feeds at once is a question that previously required pulling from four systems and reconciling the results by hand. Connecting internal research into the public corpus, in particular, is where a firm's proprietary edge meets the full public record — its analysts' private view, set against everything publicly known, in a single query. That is the combination no individual source can offer and no general-purpose tool can assemble, because it depends on the backbone underneath.

This is also the most direct expression of what it means for Orbit to be infrastructure rather than a tool. A tool is one more source a firm adds to the pile. Infrastructure is the layer that holds the pile together. When all of a firm's research data lives in one connected home, every capability above it — asking, monitoring, automating — operates across everything at once, rather than across one fragment at a time. The breadth of the foundation is what gives the rest of the platform its reach.

The same layer also includes a private space — a sandbox — where a firm's own data lives securely within the platform, governed in one place rather than spread across personal drives and inboxes. How that data is secured, and how it is connected, is covered in Parts 2.7 and 5; the point here is simply that it belongs in the same home as everything else.


# 2.4 From documents to structured data

Between the raw sources and the agents that do the work sits the layer that makes Orbit fast and consistent: the structured data layer. This is where documents stop being only text to be read and become data to be queried — without ever ceasing to be documents you can still read.

A filing, a transcript, or a research note is, in its raw form, a wall of language. To answer a question from it, something has to read it, find the relevant facts, and interpret them in context. Doing that fresh every time a question is asked is slow, expensive, and inconsistent — two analysts asking the same question of the same document can come away with different answers, and the same analyst asking twice may not get the same result. Orbit removes that repetition by doing the reading once, in advance. As documents enter the platform, they are processed into structured records — the facts, figures, and statements they contain, organised, and anchored to the right company through the entity master. From then on, questions that the structured layer can answer are answered from it, rather than from the raw text underneath.

<figure><img src="/files/C5q2VEZFBXj5gyBPeloF" alt=""><figcaption></figcaption></figure>

This is the principle introduced in Part 1 — *structured-first* — made concrete. It has three consequences that run through everything above it.

The first is **consistency.** Because the reading is done once and stored, every user works from the same structured result. The answer to a question about a company does not depend on who asked, or when, or how they phrased it. Over time, this is what allows a company to be compared against itself across quarters and years, and against its peers, on a like-for-like basis — because the underlying records were produced the same way.

The second is **speed and scale.** Answering from structured data is far quicker and far cheaper than re-reading documents on demand. That difference is what makes it practical to work across an entire universe of companies rather than one name at a time. Monitoring thousands of holdings overnight, screening a whole market against a set of criteria, or running the same analysis across a sector are all feasible precisely because the heavy reading has already happened — the work at query time is light.

The third is **traceability.** Structured records do not float free of their origin. Each one carries its lineage back to the document it came from, so any figure or statement can be traced to its source and checked. The structured layer is faster to work with, but it never becomes a black box.

**Two layers, by design**

It is important to be clear about what the structured layer is not. It is not an attempt to reduce every document to fields, and it never will be — because that is not possible. Financial documents carry nuance, narrative, qualification, and judgment that no structured schema can fully capture. The exact wording of a risk disclosure, the tone of a management answer on an earnings call, the caveats around a guidance figure — much of what matters in research lives in language, and resists being flattened into data without losing something.

For that reason, Orbit keeps the **document layer permanently available and directly queryable**, alongside the structured layer. This is by design, not a temporary state on the way to full structuring. The raw documents are not an archive sitting behind the structured records; they are a live layer in their own right, searchable and readable, so that any question — including the ones that depend on exact language or context that no structured field would hold — can be answered from the source itself.

The two layers work together. The structured layer answers the large majority of questions quickly, consistently, and at scale. The document layer answers the rest — the questions that need the words themselves — and stands as the source of truth and audit trail beneath everything. A user never has to choose between them: Orbit draws on the structured records where they apply and the underlying documents where they are needed, and presents one answer, with its sources attached.

This pairing — structured records as the working layer, documents as the permanent, queryable ground beneath them — is what lets Orbit be both fast and complete. The agents in the chapters that follow are built on top of both. Where a structured answer exists, they use it, which is what makes their work consistent and economical at scale; where a question reaches past it, the document layer is there, by design, to answer from the source.


# 2.5 The agent system: ask or automate

Above the data layers sits the part of Orbit that does the work. The Knowledge Base holds the connected data; the agent system is what turns it into answers and outputs. There are two ways to put it to work — ask it a question, or set it to run a process — and both draw on the same foundation underneath.

When a request comes in, an orchestrating agent interprets it, works out which data and which specialist agents it needs, draws on the structured and document layers as appropriate, and assembles the result. The user does not have to direct any of this — which agent runs, which layer to read, how to combine the pieces. They state what they want; the orchestration handles how it is produced. This is the layer your team experiences as simply "asking Orbit," and it is the same machinery whether the request is a one-off question or a process that runs every night.

**Two modes**

**Ask** is the interactive mode. A user puts a question in natural language and gets an answer drawn from across all of the data at once, grounded in primary sources and traceable back to them. This is the mode for the question that arises in the moment — during earnings season, ahead of a meeting, in the middle of building a view. The work happens now, and the answer comes back now.

**Automate** is the standing mode. The same agents can be assembled into repeatable workflows that run on their own — on a schedule, or in response to a trigger such as a new filing or a piece of news — and produce structured data and finished reports without anyone restarting the process each time. This is the mode that turns a piece of research a team does by hand, again and again, into something the platform does for them in the background. A morning briefing on a coverage list, a standing watch on a portfolio, a report refreshed every quarter end: each is a workflow defined once and run indefinitely.

The two modes are not separate products; they are the same agent system, used two ways. A workflow is, in effect, a question worth asking on a schedule. Teams typically begin in the ask mode — exploring, getting comfortable, seeing what the data can answer — and move work into the automate mode as patterns emerge and certain questions prove worth running on their own. That progression, from asking to automating, is how a firm shifts from using Orbit occasionally to running part of its research process on it.

**Off-the-shelf, or built by you**

Orbit provides a set of off-the-shelf agents for common research work, so a team can get value immediately without building anything. These are covered in 2.6. But the more important point is that agents are not a fixed catalogue handed down by Orbit. Every user can build their own — encoding their own logic, their own view of what matters, and their own way of working — and can link agents together so that the output of one becomes the input to the next, automating a chain of research from end to end. This is covered in 2.7.

This is what makes the platform personal as well as shared. The data underneath is common to the whole firm; the agents on top are each user's own. Two analysts working from the identical Knowledge Base can run entirely different processes over it, each reflecting how they research, what they cover, and what they care about. The platform does not impose a single way of working — it gives each person the means to build theirs and run it at a scale no individual could manage by hand.

Throughout, the agents work the way the rest of the platform does. They draw on the structured layer where it answers, and on the document layer where a question needs the words themselves, exactly as described in 2.4 — and every result they produce carries its sources, so it can be checked. The agent system adds reach and repeatability on top of the connected data; it does not change what the data is or how it is grounded.


# 2.6 Off-the-shelf agents

A team should get value from Orbit on day one, without building anything. That is what the off-the-shelf agents are for: ready-made agents for the most common research work, available from the start, each drawing on the connected data and both data layers, and each returning results with their sources attached.

They are a starting point in two senses. They cover work nearly every research team does, so they are useful immediately; and they are a way to learn how agents behave before building your own, which is where the platform's real reach lies (covered in 2.7). Think of them as a foundation to begin from, not the boundary of what Orbit can do.

Orbit provides a few to begin with.

**Filings Insight Extractor** reads a company's filings and disclosures and pulls out what matters — the figures, the changes, the guidance, the risks — so an analyst starts from the substance of a document rather than from its first page. It turns the slow work of reading a long filing into a fast, structured read of its key contents, grounded in the source.

**Portfolio News Tracker** keeps a portfolio or coverage list under continuous watch for relevant developments, surfacing the news that bears on the companies a team holds or follows and filtering out the noise that does not. Rather than scanning feeds by hand, a team is brought what matters, tied to the right company through the entity master.

**Summary Composer** turns underlying data and documents into a written summary — a briefing, an overview, a digest — composed from the connected data and carrying its sources, so the output can be read quickly and checked when needed. It is the agent that produces something a person can hand on, rather than something they have to assemble.

**Data Transformer** takes data and documents and renders them into the structured form a team needs — organising, formatting, and shaping information into output that can be used directly, whether for analysis, for a model, or for another agent further down a workflow.

Each of these can be used on its own, in the ask mode, for a single piece of work — run the Filings Insight Extractor over the company you are looking at this morning. And each can be set to run in the automate mode, on a schedule or a trigger — have the Portfolio News Tracker watch your book every night, or the Summary Composer produce a briefing every quarter end. The same agent serves both ways of working.

They are also a natural bridge to building your own. The off-the-shelf agents are examples of what an agent is and does; once a team sees how they behave, the step to building an agent that encodes its own logic, or to linking several agents into an end-to-end workflow, is a smaller one. Most teams begin with these, find the edges where their own process differs, and build from there. That path — start with the ready-made, then make it yours — is the subject of the next chapter.


# 2.7 Build your own agents

The off-the-shelf agents are a starting point. The larger idea — and the one that makes Orbit a platform rather than a product — is that every user can build their own.

Agents in Orbit are not a fixed catalogue handed down and frozen. They are something a team creates, shapes, and owns. A user can build an agent that encodes their own logic — the metrics they always check, the questions they always ask of a new filing, the way they judge whether something matters — and run it across the connected data at a scale no person could manage by hand. The data underneath is common to the whole firm; the agents on top are each user's own. That combination is what makes the platform both shared and personal at the same time.

**Building without engineering**

Building an agent does not require writing code. The Agent Builder is a visual environment: a user assembles an agent from building blocks, connects them, and sees how the result behaves — the way one might sketch a process on a whiteboard, except that the process then runs. For many needs, a user can simply describe what they want in plain language and have Orbit propose an agent to match, which they then review and adjust. The point is that the people who know the research — analysts, PMs, sector specialists — can build the agents, rather than having to brief an engineering team and wait.

**From building blocks to end-to-end workflows**

Agents are built up, not bought whole. The smallest building blocks do focused jobs — pull a particular figure, detect a particular kind of change, format a particular output. These combine into larger agents that carry out a complete task, and those in turn can be linked so that the output of one becomes the input to the next. Chained this way, a series of agents can carry a piece of research from end to end — gathering the inputs, doing the analysis, producing the output — running on its own, on a schedule or a trigger, exactly as described in 2.5. A team can start with a single small agent and grow, over time, toward an automated process that runs a meaningful part of its research without manual steps.

**Your logic, your views, your workflows**

This is where the platform becomes genuinely personal. Two analysts working from the identical Knowledge Base can build entirely different agents over it, each reflecting how they research, what they cover, and what they judge to be important. A sector specialist can encode the signals that matter in their sector; a PM can build a watch that reflects their particular theses; a quant can shape output to feed a model. Each user maintains their own agents, refines them as their thinking evolves, and keeps them as a growing asset — their own method, captured and run at scale. Nothing about this is imposed; the platform supplies the means, and each person builds their own way of working on top of it.

For a head of research, this has a further benefit: a team's methods, once held only in individual analysts' heads, become things that can be captured, shared, and run consistently. The way the firm does research can be encoded, applied across the whole coverage universe, and preserved even as people come and go.

**Build your logic, not your infrastructure**

There is an important distinction in what a team builds here. Building an agent means building *your logic* — your view of what matters and how to assess it. It does not mean building the infrastructure underneath: the connected data, the entity master, the structured and document layers, the orchestration, the choice of models. All of that is already there, maintained for you. This is precisely the line between what is worth a firm's effort and what is not. A firm's edge is in its judgment and its process, and the Agent Builder is where that edge gets expressed and scaled. The data infrastructure beneath it is not where a firm should be spending its time — it is what Orbit provides so the firm can spend its time on the part that is actually its own.

This is the same point made in 1.5, seen from the other side. The reason not to build the platform in-house is that the infrastructure is a multi-year data problem with no end. The reason to build *agents* is that your logic is yours, it should be expressed, and Orbit gives you the surface to express it on — without first having to build everything underneath.


# 2.8 Model-agnostic orchestration

One question runs underneath everything Orbit does: which AI model should do this particular piece of work? Orbit's answer is that there is no single right model — so it does not pick one and build around it. It uses whichever model is best suited to each task, and changes that choice as the models change. This is what it means to call the platform model-agnostic.

The reasoning is simple. AI models differ — in what they are good at, in how fast they are, and in what they cost to run. A task that needs the deepest reasoning is not the same as a task that needs to run cheaply across a million documents, and the best model for one is rarely the best for the other. A platform built around a single model is stuck with that model's particular balance of strengths, price, and limits for everything it does. Orbit instead routes each task to the model that fits it — reserving the most capable models for the work that needs them, and using faster, more economical models for work that does not.

<figure><img src="/files/TkUcmwkMCAbIc6SAjMCS" alt=""><figcaption></figcaption></figure>

> *Caption: Each task routed to the model best suited to it — for the right balance of quality and cost.*

This has three consequences that matter to a firm.

The first is **cost and efficiency.** Using the right model for each task, rather than the most powerful model for everything, keeps the economics sensible — which is what makes it viable to run research at scale across an entire universe of companies, not just on the handful of names where the cost of heavy processing can be justified. Matching the model to the work is part of what lets the platform operate at the breadth described earlier in this section.

The second is **improvement over time.** Because Orbit is not wedded to any one model, the platform gets better as the models do. When a stronger or more efficient model becomes available, it can be brought into the routing without rebuilding anything a firm relies on. The work a team has set up — its agents, its workflows — keeps running, and quietly benefits from advances in the underlying models. A firm does not have to migrate to capture the improvement; it arrives underneath.

The third is **no lock-in.** A firm building on Orbit is not making a bet on a single AI provider. If one model's capabilities, availability, or pricing change, the platform is not hostage to it, because it was never built around it. This is a meaningful form of future-proofing: the firm's research capability rests on the connected data and the orchestration over it, not on the fortunes of any one model.

This is also part of the answer to where Orbit's lasting value sits. The models are a shared resource — capable, improving, and reachable by anyone. What is not shared, and not easily reproduced, is the connected data, the entity master that links it, and the orchestration that puts the right model on each task and assembles the result. Orbit does not compete with the models; it is the layer that turns them into an institutional research capability, and that draws on the best of them without depending on any single one.

It is worth being clear about what this does and does not change for a user. It does not change how the platform is used: a team asks questions and builds agents exactly as described in the previous chapters, and never has to think about which model is doing what. What it changes is everything underneath — the quality, the cost, and the durability of the result. The orchestration is invisible by design. Its job is to make the right choice on every task so that no one using Orbit has to.


# 2.9 Trust and traceability

#### 2.9 Trust and traceability

Research informs real capital decisions, and those decisions have to withstand scrutiny — from a portfolio manager, an investment committee, a compliance function, a regulator. A research platform that cannot show its work has limited value at an institution, however capable it is. Orbit is built so that everything it produces can be traced, checked, and stood behind. This is not a feature added at the end; it is a property of the whole design, and it is why the principle of transparency has run through every chapter of this section.

The foundation of it is **lineage.** Every structured record carries a link back to the document it came from, as described in 2.4. Every answer and every agent output is grounded in primary sources and presents them, so a figure can be traced to the filing it was drawn from and a statement to the document that said it. Nothing Orbit produces floats free of its origin. When an agent returns a result, the path from the source material to that result is available — not hidden inside a process that has to be taken on faith.

This matters in three practical ways.

It makes results **checkable.** A user is never asked to trust an answer blindly. They can follow it back to the source and confirm it — which is what allows a professional to rely on the platform's output and put their name to it. The document layer, kept permanently queryable as described in 2.4, is what makes this possible: the original words are always there to return to.

It makes the platform **auditable.** Because the path from source to output is recorded, a firm can demonstrate how a conclusion was reached after the fact — to its own oversight functions or to an external authority. The same lineage that lets an analyst check an answer in the moment lets a firm account for it later.

And it keeps a human **accountable.** Orbit is built to support decisions, not to make them unaccountably. Its outputs are transparent precisely so that a person remains in a position to judge them, accept or override them, and take responsibility for what is done with them. The platform does the work and shows the work; the judgment, and the accountability for it, stay with the people using it.

This is also where the threads of this whole section come together. The entity master makes the data connected; the structured layer makes it fast; the document layer keeps it complete; the agents make it reach; model-agnostic orchestration makes it economical and durable. Traceability is what makes all of that trustworthy — the property that lets an institution rely on the platform for work that matters, rather than treating it as a clever assistant whose output always has to be redone by hand to be sure. A platform a firm can build its research process on is one it can account for, and that is what Orbit is designed to be.


# 3.1 The research value chain

Investment research is not one task but a chain of them, running from getting hold of a document to deciding what to do about it. Understanding that chain is the clearest way to see what Orbit is for — because every use case in this section sits somewhere along it, and the platform is built to support the whole of it rather than one link.

The chain has five stages, each building on the one before.

**Access** — getting the information. Before anything can be analysed, it has to be in reach: the filing, the transcript, the news, the data, for the company in question. This is the most basic stage, and historically one of the most time-consuming — finding the right document, for the right entity, across fragmented sources. In Orbit it is immediate, because all of the data is already in one connected place, anchored to the entity master.

**Extraction** — finding out what it says. Once a document is in hand, the relevant facts have to be drawn out of it: the figures, the changes, the guidance, the statements that matter. This is the work the structured layer does in advance, so that what a document says is available as data rather than buried in text.

**Analysis** — judging whether it is good or bad, and against what. A fact on its own means little; it acquires meaning in comparison — to the same company last quarter and last year, to its peers, to expectations. This is where research starts to produce a view rather than a record, and where the connected, structured data pays off, because comparison across time and across companies depends on records produced consistently.

**Synthesis** — working out what it means for you. Analysis of a single company becomes useful to an investor when it is connected to what they hold, what they believe, and what they are watching: a thesis, a portfolio, a theme. This is where research becomes specific to a firm — and where a firm's own logic, expressed through the agents it builds, shapes the output to its own view.

**Decision support** — informing what to do. At the top of the chain, research feeds a decision: what merits attention, what has changed enough to act on, what the weight of evidence suggests. Orbit is built to support these decisions transparently — surfacing what matters, showing the evidence, and tracing every conclusion to its source — so that a person can weigh it and decide. As established in 2.9, the platform supports the decision and shows its work; the judgment, and the accountability for it, remain with the people making it.

<figure><img src="/files/Tcoqlf7eSTI6RGHpif5k" alt=""><figcaption></figcaption></figure>

> *From getting the document to informing the decision — Orbit supports the whole chain.*

Two things about this chain are worth drawing out.

The first is that **value rises as you climb.** Access and extraction are necessary but undifferentiated — everyone needs them, and on their own they save time without changing outcomes. The higher stages — analysis, synthesis, decision support — are where research actually creates an edge, and they are also where the work has always been hardest to scale, because they depend on judgment applied consistently across many companies. The reason the lower stages matter is that they are the foundation the higher ones stand on: analysis is only as good as the extraction beneath it, and synthesis only as reliable as the analysis. Orbit invests in getting the whole chain right precisely so that the valuable upper stages rest on solid ground.

The second is that **the use cases that follow live at different points on the chain.** Some are mostly about access and extraction done at scale — covering more companies, reading more documents, missing less. Others reach into analysis and synthesis — comparing across a universe, connecting developments to a portfolio or a theme. The chapters ahead are organised by the work a team does — earnings, thematic research, portfolio monitoring, screening, sustainability — but each can be read as an answer to the question *how far up the chain does this take me, and across how many companies at once?* That is the question Orbit is built to change the answer to.


# 3.2 The use-case library

The previous chapters described the parts: the connected data, the off-the-shelf agents, and the Agent Builder for assembling your own. This chapter introduces what a team actually runs — the use-case library — and the rest of Part 3 walks through it.

A use case, in Orbit, is not a feature or a button. It is a complete recurring workflow with a clear business outcome — a piece of research a team needs done, defined end to end, from the data it draws on to the output it produces. "Morning portfolio brief" is a use case; "earnings call analysis" is a use case. Each one corresponds to a real job a research team does, and each produces something a person can act on, not just a screen to look at.

Three things are true of every use case in the library.

**Each is built from agents.** A use case is assembled from the building blocks described in Part 2 — the off-the-shelf agents, combined and sequenced into a workflow that delivers a specific outcome. The agents are the parts; the use case is the finished thing built from them. This is why the library exists at all: rather than asking a team to assemble agents themselves before getting any value, Orbit ships the common workflows already built.

**Each ships ready to run, and is also a starting point.** The use cases in the library are productised — a team can select one and run it as it comes, with no setup beyond pointing it at the relevant portfolio, coverage list, or universe. But none of them is fixed. Each is also a template: a starting point a team can open in the Agent Builder and reshape to its own logic — its own metrics, its own thresholds, its own definition of what matters. The library gives a team a fast start and a head start at once: run it as-is today, make it yours over time.

**Each runs ad hoc or automated.** Every use case works in both modes from 2.5. A team can run one on demand — pull the morning brief now, analyse this earnings call as it happens — or set it to run on its own, on a schedule or a trigger, so the brief arrives every morning and the earnings analysis runs the moment a transcript lands. Many use cases have a natural home in one mode, but none is confined to it.

The library is organised the way a research team's work is, into five groups. **Daily workflow** covers the recurring rhythm of a research day — the briefs and triage that start it. **Single-name analysis** covers deep work on one company — earnings, events, theses, diligence. **Portfolio risk** covers the view across a book — drift, concentration, exposure, and where attention is most needed. **Thematic and strategic** covers research organised around themes rather than individual names. **ESG and stewardship** covers the sustainability and engagement work that sits alongside fundamental research, including regulatory reporting.

Each use case in the chapters that follow can be read against the value chain from 3.1: some do foundational work — access and extraction — at scale and on a schedule, while others reach into analysis and synthesis, connecting what they find to a portfolio, a thesis, or a theme. As you read, the useful question to hold is the one from 3.1: *how far up the chain does this take me, and across how many companies at once?* The library is the set of answers Orbit ships ready-made — and the point from which a team builds its own.


# 3.3 Daily workflow

The daily workflow use cases cover the recurring rhythm of a research day — the standing tasks that frame everything else: knowing what changed overnight, knowing what is coming, and clearing the noise to find what matters. These are the use cases that benefit most from running automatically, because their value is in being done before the day starts rather than on demand. All four sit at the foundational end of the value chain — access and extraction — but done continuously and across a whole portfolio or coverage list, which is what turns a morning of catching up into a morning already caught up.

**01 · Morning portfolio brief.** What it produces is a single read on the state of a portfolio at the start of the day: what moved, what was announced, what news broke across the holdings, and what deserves a closer look — drawn together from across all the data and tied to the right companies through the entity master. The outcome is that a PM or analyst begins the day already oriented, rather than spending the first hour assembling a picture from scattered sources. Its natural home is the automate mode: defined once against a portfolio, it arrives every morning before the desk sits down. On the value chain it is access and extraction, but synthesised into one brief rather than left as a pile of separate alerts. Run it as-is against your book, or shape it to lead with the metrics and events your desk cares about most.

**02 · Pre-earnings calendar prep.** What it produces is a forward view of the reporting season: which covered companies report when, and what to be ready for in each — the prior quarter's open questions, the guidance to test, the points the last call left unresolved. The outcome is that a team walks into earnings season prepared rather than reacting to it, with the prep work done in advance instead of scrambled together the night before each print. It runs naturally on a schedule ahead of the season and refreshes as dates firm up. On the value chain it is access and extraction in service of synthesis — assembling what is known so the team is ready to judge what is new. Run it across your coverage, or customise the prep checklist to your house process.

**03 · Weekend research prep.** What it produces is the queued-up reading and analysis a team wants ready for the week ahead: the filings, developments, and open items across the coverage universe, organised so that Monday starts from a prepared position rather than a backlog. The outcome is that the gap between Friday and Monday stops being a blind spot — the platform does the catching-up over the weekend so the team does not have to. It is an automate-mode use case by nature, running over the weekend to deliver a ready brief. On the value chain it is foundational work done while no one is watching. Run it as shipped, or tune what it gathers and how it prioritises.

**04 · News flow triage.** What it produces is a filtered, prioritised view of the news across a portfolio or universe — separating what is material from what is not, and surfacing the items that bear on a team's specific holdings and theses. The outcome is the recovery of the time research teams lose to scanning feeds: instead of reading everything to find the few things that matter, a team is brought the few things directly, each tied to the right company. It works on demand — "what's material right now" — but its natural home is a standing watch that triages continuously through the day. On the value chain it is access and extraction with a layer of judgment about materiality. Run it with Orbit's default sense of what counts as material, or sharpen that definition to your own.

Across the four, the through-line is that a research day has a fixed amount of orienting and catching-up built into it, and these use cases move that work off the team's plate and into the background. None of it is the work that creates edge — it is the work that has to happen before the edge-creating work can begin. Done by the platform, on a schedule, it gives a team back the start of its day.


# 3.4 Single-name analysis

#### 3.4 Single-name analysis

The single-name use cases cover deep work on one company — the analysis that happens when a name needs real attention, whether because it just reported, because something happened, because the thesis is in question, or because it is a candidate for the book. These reach higher up the value chain than the daily workflow: they are not just access and extraction but analysis and synthesis, judging a company against its own history, its peers, expectations, and a team's existing view. This is where research starts to produce a position rather than a summary.

**05 · Earnings call analysis.** What it produces is a worked read of a company's results the moment they land: the numbers against expectations and prior periods, the change in guidance, the substance of management's commentary, and what is new versus what was already known — drawn from the transcript and the release together and grounded in both. The outcome is that an analyst gets to a view on a print in minutes rather than hours, during the window when speed matters most. It runs on demand when a call happens, or automatically the moment a transcript lands for a covered name. On the value chain it spans extraction through analysis — pulling the facts and judging them against context. Run it as shipped, or shape it to test the specific questions your thesis on a name turns on.

**06 · Material event flash.** What it produces is a fast, focused read on a material development — an announcement, a disclosure, a piece of breaking news — that sets out what happened, why it matters, and what it bears on, for the company in question. The outcome is that when something moves, a team gets an immediate, grounded assessment rather than waiting to assemble one, and can judge quickly whether it changes anything. Its natural home is the automate mode, triggered by a qualifying event so the flash arrives as the event breaks. On the value chain it is extraction into rapid analysis — turning a raw event into an assessment of its significance. Run it on Orbit's sense of what counts as material, or define the events that matter for your names.

**07 · Thesis state monitoring.** What it produces is a standing read on whether the case for holding a name still holds — tracking the developments, results, and disclosures that bear on a stated thesis, and surfacing what supports it and what cuts against it. The outcome is that a thesis stops being something written once and revisited occasionally, and becomes something continuously checked against the evidence, so a team knows when the ground beneath a position has shifted. This is an automate-mode use case by nature, running continuously against a defined thesis. On the value chain it is firmly in synthesis — connecting new information to a team's own view of a company. It depends on the team's thesis being expressed, which makes it one of the most natural to customise: the shipped version monitors against a general frame, but its real power comes when shaped to your actual thesis on a name.

**08 · New-name due diligence.** What it produces is a structured first pass on a company a team is considering: the business, the financials, the history, the risks, the open questions — assembled into a coherent starting brief from across all the data. The outcome is that the slow early work of getting up to speed on an unfamiliar name is compressed, so an analyst reaches the point of forming a view far faster, with the groundwork done and sourced. It runs on demand, when a candidate appears. On the value chain it spans access through analysis — gathering everything on a new name and organising it into an assessable form. Run it as a standard diligence template, or customise it to the diligence checklist your firm applies to every new position.

The common thread is depth on a single name, produced fast and grounded in sources. Two of these — earnings call analysis and material event flash — are about speed in the moment, getting to a view while the window is open. The other two — thesis state monitoring and new-name due diligence — are about thoroughness, either sustained over time or compressed at the outset. All four climb into the parts of the value chain where judgment matters, which is also why all four reward customisation most: the higher up the chain a use case reaches, the more it benefits from carrying a team's own logic rather than a generic one.


# 3.5 Portfolio risk

The portfolio risk use cases shift the unit of analysis from one company to the whole book. Rather than asking "what about this name," they ask "what about my portfolio" — where it has drifted, where it is concentrated, what it is exposed to, and where attention is most needed right now. These depend on the platform's reach across an entire holdings list at once, anchored through the entity master so every position is correctly identified and aggregated. On the value chain they sit in synthesis: each connects information across many companies to a team's own portfolio and its own view of risk.

**09 · Portfolio thesis drift.** What it produces is a read across the book of where the original case for each holding is weakening — aggregating the thesis-level signals from individual names into a portfolio-wide view of which positions are drifting away from the reasons they were taken. The outcome is that thesis erosion is caught at the portfolio level, systematically, rather than name by name as individual analysts happen to notice it. It runs naturally on a schedule, refreshing as new evidence arrives. On the value chain it is synthesis across the whole portfolio — the single-name thesis monitoring of 3.4, lifted to the level of the book. Run it against a general thesis frame, or shape it to the specific theses your team has set for its positions.

**10 · Concentration and factor drift.** What it produces is a view of how the portfolio's concentrations and factor exposures are shifting over time — where risk is quietly building through correlated positions or drift in underlying characteristics, even when no single position looks alarming. The outcome is that a team sees structural risk forming before it becomes a problem, rather than discovering it after a move. It runs on a schedule as a standing monitor. On the value chain it is synthesis — combining position-level data into a portfolio-level read on risk. Run it as shipped, or customise the factors and thresholds to the risk frame your firm actually manages to.

**11 · Sector and theme exposure.** What it produces is a map of where the portfolio is actually exposed — by sector and by theme — including the exposures that are not obvious from a position's primary classification, drawing on the deeper company understanding in the data rather than surface labels. The outcome is that a team knows its true exposure, including the indirect and second-order kind, rather than the exposure its holdings appear to have on paper. It runs on demand for a point-in-time read or on a schedule to track exposure as it moves. On the value chain it is synthesis, and it connects directly to the thematic work in 3.6. Run it on Orbit's sector and theme definitions, or supply your own.

**12 · Top-3 attention list.** What it produces is the sharpest possible output: the small number of things across the entire portfolio that most warrant attention right now — the positions where something has changed enough, or risk has built enough, to deserve a human's time today. The outcome is that a team's attention is directed to where it matters most, rather than spread evenly across a book or pulled toward whatever happened to be loudest. It is an automate-mode use case by nature, recomputed continuously so the list is always current. On the value chain it reaches toward decision support — not making a decision, but surfacing what most needs one, with the evidence attached. As established earlier, the platform surfaces and shows its work; the judgment of what to do remains with the team. Run it with Orbit's prioritisation, or shape what "warrants attention" means to your desk.

The progression across these four is worth noting. The first three describe the portfolio's state — its thesis health, its risk structure, its true exposure — each a synthesis across many positions. The fourth, the attention list, turns that state into a prioritised call on where to look, which is the closest any use case in the library comes to decision support. It is also the clearest illustration of the line the platform holds throughout: it can tell a team where attention is most warranted and show exactly why, but the decision about what to do with that attention stays human. That is by design, and it is what makes a portfolio-level tool something a team can rely on rather than something it has to second-guess.


# 3.6 Thematic and strategic

The thematic use cases organise research around themes rather than individual names — a structural shift in approach. Instead of starting from a company and asking what it does, they start from an idea — an industry shift, a technology, a policy direction, a structural trend — and ask which companies are exposed to it, how much, and what is happening to it. This is where the relationships in the entity master do their most visible work: a theme is not a list of companies someone tagged, but a structure that can be traced across the connections between companies, including the indirect ones. On the value chain these reach into synthesis, connecting developments across many companies to a theme a team cares about.

**13 · Thematic exposure.** What it produces is a map of which companies are exposed to a given theme and to what degree — not just the obvious names everyone associates with it, but the fuller set, weighted by how much of each business actually touches the theme. The outcome is that a team can see a theme as an investable universe rather than a handful of household names, and judge real exposure rather than reputational association. It runs on demand to assess a theme, or on a schedule to track how a theme's universe evolves. On the value chain it is analysis and synthesis across many companies at once. Run it on Orbit's reading of a theme, or define the theme precisely as your team frames it.

**14 · Theme contributor ranking.** What it produces is a ranking of the companies most exposed to a theme by the degree of their contribution — sorting an investable universe by who is genuinely a play on the idea versus who is only loosely connected. The outcome is that a team moves from "these companies relate to the theme" to "these are the ones where the theme actually drives the business," which is the distinction that matters for position-taking. It runs on demand and refreshes as the underlying exposures change. On the value chain it is synthesis with a layer of judgment about degree and materiality. Run it as shipped, or shape the contribution criteria to what your team counts as real exposure.

**15 · Hidden beneficiary discovery.** What it produces is the non-obvious set: the companies that stand to benefit from a theme without being labelled as theme names — the suppliers, the enablers, the second-order beneficiaries that surface only when the connections between companies are followed rather than their headline classifications. The outcome is the kind of finding that is genuinely differentiated — exposure others miss because it does not show up under the obvious search. This is where the entity master's relationship structure pays off most directly: hidden beneficiaries are found through links, not labels. It runs on demand as a discovery exercise. On the value chain it reaches into synthesis and toward the edge-creating end of it. Run the discovery broadly, or direct it along the specific kinds of relationship your team wants to trace.

**16 · Theme event tracking.** What it produces is a standing watch on a theme: the developments, announcements, and data points across the theme's whole universe that signal it strengthening, weakening, or shifting — aggregated into a continuous read on the theme rather than scattered across the news of individual names. The outcome is that a team holding a thematic view knows when the evidence for that view is changing, across all the companies the theme touches at once. It is an automate-mode use case by nature, running continuously against a defined theme. On the value chain it is synthesis sustained over time. Run it on Orbit's framing of the theme, or track exactly the signals your view depends on.

The four form a natural sequence: map a theme's exposure, rank who genuinely drives it, discover the beneficiaries others miss, then track the whole thing over time. Hidden beneficiary discovery is the one to dwell on — it is the clearest example in the entire library of a use case that produces something hard to get any other way, because it depends on the relationship structure underneath the data rather than on search. That is a useful illustration of the broader point: the more a use case relies on the connections in the entity master rather than on documents in isolation, the more differentiated its output, and the harder it would be to reproduce without the backbone. Thematic research is where that advantage is most visible.


# 3.7 ESG and stewardship

The ESG and stewardship use cases cover the sustainability and engagement work that sits alongside fundamental research — and they have a distinct character, because some of them carry a compliance dimension that the others do not. Producing a regulatory disclosure or a standards-aligned scorecard is not just useful research; it is output a firm may have to stand behind to an auditor or a regulator. That makes the traceability established in 2.9 not a convenience here but a requirement: every figure traceable to its source, the whole path auditable after the fact. These use cases draw on the same connected data and the same backbone as everything else — ESG is not a separate system, but the same companies seen through a sustainability lens.

**17 · SFDR PAI reporting.** What it produces is the principal adverse impact data assembled across a portfolio in the form the SFDR disclosure regime calls for — gathering the required indicators across holdings into a structured, sourced output ready to feed a firm's reporting. The outcome is that a reporting obligation that is otherwise a heavy, manual collation exercise becomes largely assembled by the platform, with each data point traceable to where it came from. It runs naturally on the reporting cycle. On the value chain it is access and extraction in service of a structured deliverable. A necessary note on accountability: Orbit assembles and sources the data, but the firm remains responsible for what it discloses — the platform supports the reporting and shows its work; the sign-off stays with the firm. Run it against the standard indicator set, or customise it to your firm's reporting template and methodology.

**18 · Controversy monitoring.** What it produces is a standing watch for ESG controversies across a portfolio or universe — surfacing the incidents, allegations, and developments that bear on the sustainability profile of held names, tied to the right company through the entity master. The outcome is that reputational and ESG risk is caught as it emerges rather than discovered late, across the whole book at once. It is an automate-mode use case by nature, running continuously. On the value chain it is access and extraction with a layer of judgment about materiality. Run it on Orbit's sense of what constitutes a controversy, or define the categories and severity that matter to your mandate.

**19 · SASB scorecard.** What it produces is a sustainability scorecard for a company built around the industry-specific metrics that the SASB standards identify as financially material for its sector — drawn from the company's own disclosures and organised against the framework. The outcome is a consistent, framework-aligned ESG read on a company, comparable across a universe because it is produced the same way each time. It runs on demand for a single name or on a schedule across a universe. On the value chain it spans extraction into analysis. Run it on the standard framework, or adapt the metric set and weighting to your firm's own ESG methodology.

**20 · Engagement priority list.** What it produces is a ranked view of where stewardship attention is most warranted — the holdings where engagement would matter most, on the issues where it would matter most, prioritised across the portfolio. The outcome is that a stewardship team directs its finite engagement capacity to where it can have the most effect, rather than spreading it evenly or reacting to whatever surfaces. It runs as a standing list, recomputed as circumstances change. On the value chain it reaches toward decision support — surfacing where to engage and why, with the evidence attached, while the decision to engage and how stays with the team. It is, in effect, the stewardship counterpart to the portfolio attention list in 3.5. Run it on Orbit's prioritisation, or shape what "warrants engagement" means for your stewardship approach.

What sets this group apart is the audit dimension. Two of these — SFDR PAI reporting and the SASB scorecard — produce output measured against external frameworks, where being able to show the source of every number is the difference between a deliverable a firm can file and one it cannot. This is where the platform's grounding in primary sources, kept traceable end to end, stops being a quiet virtue and becomes the point. The other two — controversy monitoring and the engagement priority list — mirror use cases seen elsewhere in the library (the standing watch, the attention list), applied to the stewardship side of a firm's work. Together they let a firm run its sustainability and engagement research on the same foundation, with the same rigour, as its fundamental research — rather than treating ESG as a separate exercise on separate tools.


# 4.1 How Orbit is priced

Most software is priced by how big the buyer is — seats, assets, headcount. Orbit is priced by how a firm *uses* it. The reason is that two firms of very different sizes can use the platform in nearly the same way, and two firms of the same size can use it completely differently. What determines the value a firm gets — and therefore what it pays for — is not its scale but its maturity in adopting AI into its research process. Pricing follows that.

This matters because it changes who pays what. A large institution just beginning to connect AI to its data may need far less of the platform than a small, AI-native fund running automated workflows across its whole universe. Pricing by firm size would get both wrong. Pricing by usage and maturity matches what a firm pays to what it actually does with the platform — which is both fairer to the buyer and a more honest reflection of value delivered.

Orbit frames that maturity in three stages. They are not rigid tiers a firm is sorted into so much as a description of how firms grow into the platform, and most firms move up the stages over time as AI becomes more central to how they work.

**Stage one — connected data.** At the first stage, a firm's need is access: it wants the connected, structured data and the ability to ask questions of it, in one place, instead of working across fragmented sources. This is the foundation — the Knowledge Base and the ability to query it. A firm at this stage is putting AI to work on its research data without yet running automated processes over it. Notably, a firm can be large and sophisticated and still be here: many institutions that have already rolled out a general-purpose AI assistant have, in effect, paid the cost of adopting AI but still lack the institutional financial data to point it at. For them, connecting Orbit's data is the missing piece, not the beginning of an AI journey.

**Stage two — running the platform.** At the second stage, a firm moves from asking to running: it uses the agents and the use-case library, sets workflows to run on their own, and consumes the platform's processing across more of its work. This is where the *automate* mode from Part 2 comes into its own, and where consumption — the actual work the platform does on a firm's behalf — becomes part of what is paid for, because it reflects how much the platform is doing. How that consumption works is the subject of 4.3.

**Stage three — enterprise and private.** At the third stage, a firm runs Orbit as core infrastructure: integrating its own internal data at scale, deploying privately where required, and building extensively on the platform with its own logic and workflows. This is the most involved relationship, shaped to a firm's specific environment, data, and requirements — and priced accordingly, because it is the most customised and the most deeply embedded.

These stages map onto the packages described in 4.2, and onto the way consumption is handled in 4.3. The through-line is the progression introduced all the way back in 1.4 — access, ask, monitor, automate, integrate — seen now from the commercial side: a firm pays in line with how far along that progression it is, and the relationship grows as the firm does.

One consequence worth stating plainly: this model is designed so a firm can start where it is. A firm does not have to commit to the deepest, most expensive relationship to begin getting value; it can enter at the stage that matches how it works today and move up as AI becomes more central to its research. The pricing is built to meet a firm where it is on its own adoption curve — the same principle that runs through the whole platform.


# 4.2 What's included: the subscription

The foundation of Orbit's pricing is a subscription — a recurring fee for access to the platform. It is the predictable, pay-for-access part of the model: what a firm has, before any question of how much it runs. A subscription gives a firm the connected data, the application, and the means to reach both, and it comes in two forms depending on how a firm works.

What every subscription includes is the platform itself. That means the **Knowledge Base** — the global corpus, the entity master, and the structured and document layers described in Part 2 — and **Orbit Insight**, the application through which a team queries it, runs the off-the-shelf agents and use-case library, and builds its own agents. It also includes the **access surfaces**: as well as working in the application, a subscriber can reach Orbit through its **API** and through **MCP**, so the platform's data and agents can be used inside a firm's own tools and AI systems, not only in Orbit's interface. A subscription is, in short, full access to the platform and everything needed to put it to work.

Every subscription also includes a **base allowance of agent consumption.** Running agents and workflows draws on consumption — the subject of 4.3 — but a subscription does not start at zero. It comes with an allowance built in, enough to use the agents and use cases as part of normal work, so that ordinary day-to-day use is covered by the subscription itself. Consumption pricing applies on top of that allowance, when usage goes beyond it; it is not a charge on every action from the first one.

The subscription comes in two forms.

**Individual subscription.** Priced per user, this is the working subscription for the people doing research — analysts, PMs, quants. It includes everything above: full access to the data and the application, the API and MCP surfaces, and a base allowance of agent consumption sufficient for an individual's normal work. For a single user putting Orbit to work, including connecting it into their own tools, the individual subscription is self-contained — access and everyday use, in one fee.

**Enterprise subscription.** For firms operating at scale — many users, and in particular firms connecting Orbit into their own environment programmatically at volume — the subscription takes an enterprise form. The distinction that matters here is volume of access. An individual subscription includes MCP and API access for a person's own use; but a firm that wants to connect Orbit into its systems at scale — for example, feeding Orbit's data and agents into its own deployment of a general-purpose AI assistant across the organisation through MCP — is generating load well beyond individual use, and at that scale the programmatic access itself becomes consumption-based rather than bundled. The enterprise subscription is the framework for that: platform access across an organisation, with high-volume MCP and API usage treated as consumption, sized and priced with the Orbit team.

The shape to take away is that the subscription is what a firm *has* — access to the whole platform, the surfaces to reach it, and enough included consumption to work normally. What a firm *runs* beyond that, and what it *builds* at scale, are the next two chapters. Pricing for either form of subscription is set with the Orbit team, because the right configuration — how many users, what volume of access, what scale — depends on how a firm intends to use the platform.


# 4.3 Agent consumption

Running agents and workflows draws on **consumption**. Each subscription includes a base allowance of consumption for everyday use; usage beyond that allowance is billed as additional consumption. This is the usage-based part of the pricing model, separate from the fixed subscription fee.

**How it works.** Consumption is measured in credits — the unit in which the platform's work is counted. Running an agent, processing documents, and executing a workflow each draw credits. A subscription's base allowance is an amount of included credits; when usage exceeds it, additional consumption applies.

**What's covered by the allowance.** Normal day-to-day research — querying the data and running agents as part of regular work — is designed to sit within the included allowance. Consumption beyond the subscription applies to higher-volume use, such as running automated workflows across a large universe continuously.

**How cost scales.** Consumption is proportional to usage: the more work a firm has the platform do, the more it draws. Light use stays within the allowance; heavy or large-scale automation draws additional consumption.

**Programmatic access at volume.** For enterprise firms connecting Orbit into their own systems through the API or MCP at organisational scale, that access is itself consumption-based, as described in 4.2. Access for an individual user's own work is included in the subscription; high-volume programmatic access draws on consumption.

Credit allowances, what each kind of work draws, and pricing for additional consumption are configured with the Orbit team, based on a firm's scale, workflows, coverage, and any programmatic access.


# 5.1 Deployment Options

When adopting the Orbit platform, organizations have several deployment options to choose from, depending on their infrastructure preferences and specific needs. Whether you prefer a fully cloud-based solution, on-premise deployment, or a hybrid approach, Orbit offers flexible options to meet your requirements.

### 1. **SaaS Deployment on AWS**

Currently, the **SaaS version** of the Orbit platform is deployed on **Amazon Web Services (AWS)**. This option provides a fully managed, cloud-based solution that leverages the scalability, reliability, and security of AWS.

* **Benefits of AWS Deployment**:
  * **Scalability**: Easily handle increasing workloads as your use of the platform grows.
  * **Reliability**: AWS’s robust infrastructure ensures high availability and minimal downtime.
  * **Security**: Benefit from AWS’s advanced security features, which protect data and applications against threats.

This deployment option is ideal for organizations looking for a hassle-free, scalable solution without the need to manage their own infrastructure.

### 2. **Custom Deployment: Cloud or On-Premise**

For organizations that require more control over their deployment environment, **Orbit AI Studio** can be deployed on any cloud platform or in on-premise environments. This flexibility allows you to align the deployment with your existing infrastructure and compliance requirements.

* **Cloud Deployment**: In addition to AWS, we are soon launching an **Azure-native version** of the platform, allowing deployment on Microsoft Azure. This option is perfect for organizations that already utilize Azure for their cloud services.
* **On-Premise Deployment**: Orbit AI Studio can also be deployed within your own data centers. This is an ideal choice for organizations with strict data sovereignty, compliance, or security requirements.

#### **Advantages of Custom Deployment**:

* **Flexibility**: Choose the deployment environment that best aligns with your IT strategy.
* **Control**: Maintain full control over your data and the application environment.
* **Compliance**: Ensure compliance with internal and external regulations by hosting the platform in your preferred environment.

### 3. **Hybrid Deployment: API Access to Knowledge Bases**

While deploying the Orbit application on your preferred environment is straightforward, migrating Orbit’s extensive pre-built knowledge bases can be a complex and expensive exercise. To balance the benefits of custom deployment with the need for seamless access to data, we recommend a **hybrid deployment** approach.

* **Hybrid Deployment**: In this setup, the Orbit AI Studio is deployed in your chosen environment (cloud or on-premise), while access to Orbit’s pre-built knowledge bases is maintained via **APIs**.

<figure><img src="/files/k73ekJJHJVp8k2LMdrlW" alt=""><figcaption></figcaption></figure>

#### **Benefits of Hybrid Deployment**:

* **Cost-Effective**: Avoid the high costs associated with migrating large data sets.
* **Seamless Integration**: Access comprehensive data without the need to host it all internally.
* **Flexibility**: Combine the best of both worlds—custom application deployment with easy access to vast knowledge bases.

Hybrid deployment is a strategic approach that offers the flexibility of custom deployments while leveraging the rich data and insights provided by Orbit’s pre-built knowledge bases.


# 5.2 Security and Compliance

Security and compliance are paramount when deploying the Orbit platform in enterprise environments. Whether utilizing our SaaS version or opting for a custom deployment, Orbit is committed to maintaining the highest security standards to protect your data and ensure compliance with industry regulations.

### 1. **Security and Compliance in the SaaS Version**

The SaaS version of the Orbit platform is currently deployed on **Amazon Web Services (AWS)**, which provides industry-leading security features. We are also preparing to offer an **Azure-native version** that will adhere to Microsoft Azure’s robust security and compliance standards.

#### **AWS Security and Compliance**:

* **Data Encryption**: All data is encrypted at rest and in transit using advanced encryption standards.
* **Identity and Access Management (IAM)**: We utilize AWS’s IAM to control and monitor access to resources, ensuring that only authorized users have access to sensitive data.
* **Network Security**: AWS’s secure network architecture, including firewalls and DDoS protection, helps protect the platform from external threats.
* **Compliance with AWS Standards**: The SaaS version adheres to AWS’s comprehensive compliance framework, which includes certifications such as SOC 1/2/3, GDPR, and HIPAA.

#### **Azure Security and Compliance**:

* **Upcoming Azure-Native Version**: As we expand our deployment options, the Azure-native version of Orbit will follow Microsoft Azure’s security protocols. Azure provides similar high standards for data protection, including encryption, IAM, and network security, ensuring robust protection for your data.

### 2. **Following Industry Best Practices**

We are committed to following industry best practices to safeguard our platform and your data. Our security measures are aligned with the strictest standards commonly found in the industry.

#### **Key Security Practices**:

* **Data Protection**: We implement rigorous data protection measures, including encryption and regular security audits, to ensure that your data remains secure and confidential.
* **Access Control**: Strict access control mechanisms are in place to limit who can view or interact with sensitive data, reducing the risk of unauthorized access.
* **Regular Security Updates**: The Orbit platform is regularly updated with the latest security patches and improvements to protect against emerging threats.
* **Incident Response**: We have a robust incident response plan in place to quickly identify, mitigate, and resolve any security issues that may arise.

### 3. **Compliance Standards**

Our commitment to following best practices and maintaining the highest security settings ensures that Orbit is well-positioned to meet your organization’s compliance requirements.

#### **Security Settings**:

* **Comprehensive Monitoring**: Continuous monitoring of the platform ensures that any potential security issues are detected and addressed promptly.
* **Data Privacy**: We adhere to data privacy principles, ensuring that personal and sensitive data is handled in compliance with applicable regulations such as GDPR.
* **Documentation and Transparency**: We maintain detailed documentation of our security practices and are transparent about the measures we take to protect your data.


# 5.3 Scaling and Performance

The Orbit platform is engineered to handle massive volumes of data efficiently, making it a robust solution for organizations that require scalability and high performance. Whether processing hundreds of millions of PDFs or managing large-scale automated workflows, Orbit is designed to meet the demands of even the most data-intensive environments.

### 1. **Scalability and Data Handling**

One of the critical strengths of the Orbit platform is its ability to scale effectively to manage large volumes of data. The platform has been rigorously tested and proven through its deployment of pre-built knowledge bases, which collectively host:

* **Hundreds of Millions of PDFs**: The platform is currently managing knowledge bases that contain hundreds of millions of PDFs, showcasing its capacity to handle vast amounts of data.
* **Tens of Thousands of New PDFs Daily**: Orbit processes tens of thousands of new PDFs every day, ensuring that the platform can keep pace with the continuous influx of data while maintaining performance and reliability.

This scalability ensures that organizations can rely on Orbit to grow alongside their data needs, providing consistent and efficient performance regardless of the data volume.

### 2. **Efficient Data Processing**

Processing such a large volume of data is computationally expensive and can be challenging for many platforms. To overcome these challenges, Orbit has developed proprietary models and procedures that optimize data processing, making it feasible and cost-effective to manage and analyze large datasets.

* **Proprietary Models**: Orbit’s proprietary data processing models are designed to maximize efficiency while minimizing resource consumption, ensuring that large-scale data processing tasks can be performed without compromising on speed or accuracy.
* **Cost-Effective Calculations**: The platform’s innovative procedures allow for the processing of vast amounts of data in a cost-effective manner, ensuring that even organizations with significant data processing needs can operate within their budgets.

These advancements make Orbit a leader in handling and processing large volumes of unstructured data, providing users with fast, reliable insights without the need for excessive computational resources.

### 3. **Comprehensive Audit Trails**

In addition to its scalability and performance, the Orbit platform is equipped with thorough audit trails that track every aspect of user activity and data processing. This comprehensive logging system ensures transparency, accountability, and the ability to troubleshoot any issues that may arise.

* **User Activities**: The platform logs all user activities, providing a detailed record of who accessed what data, what changes were made, and when these actions occurred. This is crucial for maintaining security and ensuring compliance with internal and external regulations.
* **Change Requests**: Every change request within the platform is tracked, including who initiated the request, what changes were proposed, and the outcome of those changes. This allows for complete visibility into the evolution of data and processes within the platform.
* **Data Processing Trails and Failsafe**: Orbit maintains detailed logs of data processing activities, including successes, errors, and failsafe operations. This ensures that any issues can be quickly identified and resolved, minimizing downtime and maintaining the integrity of the data processing pipeline.

These audit trails are essential for ensuring the platform’s reliability and for providing users with the assurance that their data is handled with the utmost care and precision.


# 5.4 Integration with Existing Systems

At the heart of Orbit’s mission is the goal of connecting as much data as possible to empower organizations with comprehensive insights and analysis. To achieve this, Orbit not only continues to expand its pre-built knowledge bases but also focuses on developing robust connectors that allow clients to easily centralize and integrate their existing data into the platform.

### 1. **Connecting and Centralizing Data**

Orbit understands that for organizations to fully leverage AI and data analytics, they need a unified platform where all relevant data can be accessed and analyzed seamlessly. The platform is designed to integrate with existing systems, allowing clients to centralize their data sources and enhance their decision-making capabilities.

* **Expanding Knowledge Bases**: As part of our ongoing commitment to data integration, Orbit continuously expands its pre-built knowledge bases, ensuring that clients have access to a vast and growing repository of information that can be easily integrated with their own data.
* **Developing Connectors**: To further support data centralization, Orbit is actively developing connectors that simplify the integration process, enabling clients to connect their internal systems with the Orbit platform effortlessly.

### 2. **Microsoft Graph API Integration**

The first major connector that Orbit has developed is the **Microsoft Graph API** integration. This connector is designed to make it easy for clients to bring their Microsoft data into the Orbit platform, facilitating a seamless flow of information and enabling more comprehensive analysis.

* **Microsoft Data Integration**: Through the Microsoft Graph API, Orbit can access and integrate a wide range of data from Microsoft applications, including emails, Office documents, and other content stored within the Microsoft ecosystem.
* **Seamless Data Consumption**: This integration allows clients to effortlessly consume their Microsoft data within the Orbit platform, breaking down data silos and enabling a more holistic view of their information. Whether it’s emails, spreadsheets, or presentations, all relevant data can be centralized and analyzed within Orbit.

### 3. **Future Integration Plans**

Orbit’s commitment to integration doesn’t stop with Microsoft. The platform is designed to be extensible, and additional connectors are in development to support a wide range of data sources and systems. This ongoing expansion ensures that clients can continue to centralize and leverage all their data, regardless of where it originates.


# 5.5 Product Options

Orbit Platform offers multiple access options to accommodate varying client needs, technical capabilities, and use cases. Each product option provides different levels of customization, control, and implementation requirements.

## Dataset Access

Dataset Access provides comprehensive financial document repositories in structured formats for organizations that wish to incorporate our data into their own systems. All datasets undergo rigorous quality control and standardization processes.

Datasets include:

* Global exchange filings with full-text and structured metadata
* Earnings call transcripts across multiple markets and languages
* Sustainability and ESG reports with standardized categorization
* Regulatory documents with jurisdiction tagging

Delivery occurs through secure, authenticated channels with scheduled updates based on document publication frequencies. Organizations receive the data in standardized formats suitable for database integration.

## API Access

Our API suite enables programmatic access to Orbit's document intelligence capabilities. These RESTful APIs allow seamless integration with existing systems while leveraging our advanced document processing infrastructure.

The API suite includes multiple categories:

* **Entity & Document Discovery APIs**: Locate entities and related documents
* **Document Content APIs**: Retrieve and parse document content
* **Search Infrastructure APIs**: Perform advanced semantic and keyword searches
* **RAG Intelligence APIs**: Execute complex question-answering across document sets
* **Document Monitoring**: Receive alerts when new relevant documents are published

All APIs are secured with standard authentication protocols and include comprehensive documentation, code samples, and rate limiting appropriate to service tier levels.

## Orbit Insight Platform

Our flagship solution delivers document intelligence through an intuitive user interface designed for financial professionals. Orbit Insight is available in two deployment models:

## **SaaS Version**

The cloud-based SaaS deployment provides immediate access with minimal setup requirements. This option includes:

* Browser-based access from any location
* Regular platform updates with new features
* Pre-configured document sets and analytical bots
* Scalable resources based on usage requirements
* Collaborative features for teams and organizations

### **On-Premises Deployment**

For organizations with specific security, compliance, or data sovereignty requirements, our on-premises deployment offers:

* Complete installation behind corporate firewalls
* Integration with internal document repositories
* Custom security configurations
* Dedicated infrastructure with scalable resources
* Full control over data residency and management
* Customized implementation based on organizational needs


# 5.6 Product Selection Guide

Selecting the appropriate product option depends on various factors including technical capabilities, use case requirements, and organizational constraints. This section provides guidance on which product option best suits different scenarios.

## When to Choose Dataset Access

Dataset Access is most appropriate for organizations with:

Strong technical capabilities and data engineering resources. These organizations typically have established data processing infrastructure and prefer to integrate raw data into proprietary systems. Clients choose Dataset Access when they require:

* Complete control over data processing methodologies
* Integration with complex proprietary systems
* Ability to build custom analytical models on financial document data
* Long-term data needs with substantial processing volumes
* Requirements for specialized processing beyond standard platform capabilities

Financial institutions with large quant teams and data science departments frequently select this option to maintain their proprietary analytical edge.

## When to Choose API Access

API Access serves organizations with development resources that wish to leverage our document processing capabilities within their own applications. This option is ideal for:

* Financial technology providers building document intelligence into their platforms
* Asset managers integrating document analysis into proprietary research systems
* Organizations with existing applications requiring document intelligence enhancement
* Development teams comfortable with API integration but seeking to avoid building document processing infrastructure

API Access provides a balance between custom implementation and leveraging pre-built document intelligence capabilities.

## When to Choose SaaS Platform

The SaaS Platform option delivers immediate value without technical integration requirements. This option best serves:

* Teams seeking immediate access to document intelligence capabilities
* Organizations without extensive technical resources for custom implementation
* Users focused on specific analytical workflows rather than system integration
* Groups requiring collaborative features across research teams
* Organizations with standard security requirements compatible with cloud solutions

The SaaS platform provides the fastest time-to-value with minimal implementation overhead while still offering considerable analytical flexibility.

## When to Choose On-Premises Deployment

On-Premises Deployment addresses specific organizational requirements around data security, compliance, and integration with internal systems. This option is designed for:

* Organizations in highly regulated industries with strict data handling requirements
* Institutions with sensitive internal documents requiring analysis
* Companies with specific data residency requirements due to regulatory constraints
* Enterprises with existing on-premises infrastructure integration requirements
* Organizations requiring customized security implementations beyond standard cloud offerings

On-Premises Deployment provides full platform capabilities within an organization's controlled environment while accommodating specialized integration and security requirements.


# 6.1 First time login


# 7.1 Common Questions

#### 1. **What is the primary focus of the Orbit platform?**

The primary focus of the Orbit platform is to help organizations retrieve and analyze insights from unstructured data, particularly in the financial services sector, by leveraging AI and pre-built knowledge bases.

#### 2. **What deployment options are available for the Orbit platform?**

Orbit can be deployed as a SaaS solution on AWS, as a custom deployment on any cloud or on-premise, and soon on Azure. A hybrid deployment is also available for accessing Orbit’s knowledge bases via APIs.

#### 3. **How does the Orbit platform handle large volumes of data?**

Orbit is built to scale, processing hundreds of millions of PDFs and tens of thousands of new PDFs daily. Proprietary models and procedures ensure efficient and cost-effective data processing.

#### 4. **How can I access the results generated by the Orbit platform?**

Results generated by the platform, especially through bots, can be accessed via dashboards, file exports, or API integrations, depending on your preference.

#### 5. **How does Orbit integrate with existing systems?**

Orbit’s mission is to centralize data, and it offers connectors like the Microsoft Graph API to easily integrate Microsoft data, including emails and Office documents, into the platform.

#### 6. **What are the different levels of knowledge base access available for purchase?**

Orbit offers four levels of knowledge base access: 1) PDF Data, 2) Machine-Readable Text, 3) Vector Format Data, and 4) Search API, with each level requiring progressively less internal technical work.

#### 7. **How does the platform help in identifying innovative technologies in company reports?**

Orbit uses LLMs to analyze annual reports from its global exchange filings knowledge base. A specific prompt helps identify innovative or disruptive technologies mentioned in these documents, which are then classified for further analysis.

#### 8. **What is the purpose of the bot marketplace in Orbit?**

The bot marketplace allows users to automate and customize their workflows, running advanced logic with minimal coding. It provides flexibility and encourages users to create their own bespoke bots for repetitive tasks.

#### 9. **What kind of audit trails does the Orbit platform offer?**

Orbit provides thorough audit trails, tracking user activities, change requests, and data processing logs, ensuring transparency and accountability in all operations.

####


# 7.2 Contacting Support

If you need assistance or have any questions regarding the Orbit platform, our support team is here to help. Please feel free to reach out to us at:

**Email**: <mark style="color:blue;"><support@orbitfin.ai></mark>

When contacting support, please provide as much detail as possible about your inquiry or issue to help us assist you more effectively. Include information such as:

* Your name and organization
* The specific issue or question you have
* Any relevant screenshots or error messages
* The steps you have taken so far

Our support team will get back to you promptly to help resolve your issue or answer your questions.

Thank you for using Orbit!


# 7.3 Glossary of Terms

#### 1. **Knowledge Base**

A centralized repository within the Orbit platform that contains structured and unstructured data, including pre-built datasets such as global exchange filings, sustainability reports, and regulatory documents. It serves as the foundation for analysis and data retrieval.

#### 2. **LLM (Large Language Model)**

A type of AI model used within the Orbit platform to process and understand natural language. LLMs are employed to extract insights from documents, identify emerging technologies, and support advanced search and chat functionalities.

#### 3. **Bot Marketplace**

A feature within the Orbit platform that allows users to create, configure, and deploy bots for automating workflows. The marketplace provides a variety of pre-built bots that can be customized to meet specific needs, enabling mass customization and automation.

#### 4. **SaaS (Software as a Service)**

The cloud-based deployment model of the Orbit platform hosted on AWS. It provides users with access to the platform’s full capabilities without the need to manage infrastructure, offering scalability, reliability, and security.

#### 5. **Entity Search**

A search feature in the Orbit platform that allows users to focus queries on specific entities, such as companies. This helps in retrieving the most relevant data for targeted analysis.

#### 6. **API (Application Programming Interface)**

A set of protocols and tools that allow different software applications to communicate with the Orbit platform. APIs are used for integrating the platform’s capabilities with other systems, enabling data access, bot results retrieval, and more.

#### 7. **Concept Management**

A feature that allows users to create and manage predefined prompts within the Orbit platform. These concepts define how information is processed and presented, enabling consistent and efficient data analysis across the platform.


# 7.4 Whitepapers

[Harnessing GenAI - Redefining the Investment Research Landscape](https://assets.ctfassets.net/j2hojduyr5yi/2VvTkFwOlIqRcIIDf2EmIz/110b54644aa2e4e6832b1b399b811ce0/Whitepaper_compressed.pdf)

[From Challenges to Solutions - The True Cost of Enterprise-Level RAG Systems](https://www.orbitfin.ai/news/from-challenges-to-solutions)


# Advancing News Analytics for Financial Decision Making

**1. Introduction**

The financial industry has long depended on commercial news feeds such as Bloomberg and Reuters to support investment decision-making and risk management. These platforms, while highly regarded for their credibility and timeliness, are not without limitations. As global financial markets expand and diversify, the need for more comprehensive, multilingual, and adaptive news analytics has become increasingly critical. This paper presents an innovative approach to news analytics that leverages search engine APIs and large language models (LLMs) to redefine the way information is gathered, analyzed, and utilized for decision-making.

**2. Addressing the Limitations of Traditional Commercial News Feeds**

While mainstream news platforms are trusted for their reliability and focus on major markets, they have inherent limitations that hinder their effectiveness in a globalized financial landscape. First, their coverage is often restricted to prominent listed companies and markets, leaving significant gaps when it comes to emerging markets, mid-cap, and small-cap stocks. Additionally, their focus on English-centric content limits the accessibility of news in other languages, which is essential for comprehensive global coverage. Finally, the editorial prioritization of high-profile or “hot” topics often overlooks less prominent but potentially impactful stories.

**3. Leveraging Search Engines as a News Knowledge Base**

To address these limitations, our approach utilizes search engines like Google and Baidu as the foundation for news collection. These platforms represent the largest crowdsourced news knowledge base in the world, offering unparalleled latency, breadth, and multilingual capabilities. By integrating search engine APIs into our analytics pipeline, we ensure comprehensive access to real-time and historical information across regions, languages, and sectors. This allows us to overcome the coverage and content constraints of traditional commercial news feeds while providing a more dynamic and flexible solution.

**4. Overcoming Challenges in Traditional News Analytics**

Historically, news analytics have relied heavily on bespoke-trained deep learning models, particularly for sentiment analysis. While effective in specific contexts, these models are constrained by their inability to adapt dynamically to new languages or unexpected events. Furthermore, the lengthy development cycles associated with training and retraining these models make them ill-suited for rapidly changing market conditions. These challenges underscore the need for a more flexible and scalable solution.

**5. Introducing a Novel Pipeline for News Analytics**

Our proposed pipeline introduces a transformative approach to news analytics that integrates advanced technologies to enhance both efficiency and adaptability. The pipeline consists of the following steps:

1. **Comprehensive News Collection:** Using search engine APIs, news is fetched for every company within the defined scope. This can be executed on-demand or as part of a daily collection routine. Historical data can also be retrieved for backtesting purposes, ensuring robust analysis over time.
2. **Unsupervised Event Extraction:** Leveraging the advanced capabilities of LLMs, the system performs unsupervised event extraction, identifying virtually unlimited meaningful topics and events without the need for predefined training datasets.
3. **Event Clustering and Ontology Classification:** Extracted events are clustered using vector-based methodologies, which excel at handling unknown phrases and terms. These clusters are then classified into a three-tier event ontology, providing structured and actionable insights tailored to financial decision-making.

<figure><img src="/files/2xlwMUnyFsTb3DDHP8jq" alt=""><figcaption></figcaption></figure>

1. **Ontology Evolution:** Periodic re-clustering of low-similarity events generates new event types, enabling the ontology to evolve and remain relevant to emerging trends and market developments.
2. **Customizable Event Classification:** Clients can define bespoke event classifications aligned with their unique requirements and trading strategies. This flexibility transforms the pipeline into a purely computational task, ensuring rapid deployment and minimal operational risk.

**6. Key Benefits of the Proposed Approach**

The integration of search engine APIs and LLMs into our pipeline delivers several key advantages. First, it provides comprehensive coverage that spans global markets, multilingual content, and niche sectors, addressing the gaps in traditional platforms. Second, the unsupervised and evolving nature of the system ensures adaptability to new events and trends, making it highly resilient in dynamic environments. Third, its client-centric design enables tailored classifications and workflows, enhancing its utility for diverse trading strategies. Finally, the pipeline’s emphasis on efficiency and reliability eliminates the complexities associated with bespoke model training, ensuring fast and consistent results.

<figure><img src="/files/WhU3BJmXkB17W5Ktoguq" alt=""><figcaption></figcaption></figure>

**7. Conclusion**

This innovative approach to news analytics does not aim to replace traditional commercial news feeds or sentiment analysis models. Instead, it provides a complementary solution that leverages the breadth and intelligence of search engine APIs and LLMs to extract, cluster, and classify news events with unprecedented granularity and flexibility. By offering a new option for mining actionable insights from global news, this solution empowers financial professionals to make more informed decisions in an increasingly complex and interconnected world.


# 7.5 Release Notes

## Release Notes v7.0.10

**Release Date:** January 26, 2026\
This release adds News Flow Tracker and Market Intelligence modules to Dashboard, simplifies the chat interface by removing Fast/Deep Research, and enhances ESG Controversies Tracker with news date display. Backend improvements include database optimization and refined user permissions.

***

### New Features

#### Dashboard Enhancements

* Added **News Flow Tracker Agent** module overview card
* Added **Market Intelligence Agent** module overview card

#### ESG Controversies Tracker Agent

* Added news start date display for better timeline visibility

***

### Improvements

#### Dashboard

* Updated "Orbit Research Agent" module description and labeling

#### Database Optimization

* Optimized ESG Controversies Tracker table structure for improved performance

#### Data Management

* Consolidated Deep Research S3 storage and data management configurations

***

### Changes

#### New Chat Module

* Removed Fast/Deep Research toggle functionality

#### Permission Updates

* Restricted access to Agent, Concept, and Weight pages for individual user accounts (enterprise accounts unaffected)

***

## **Release Version: v7.0.9**

**Release Date:** January 20, 2026

This release includes several major feature upgrades and optimizations, covering the launch of Agentic AI assistant, Dashboard restructuring, Portfolio management optimization, and Notification system development. Below are the detailed updates.

***

### New Features

#### 1. Agentic AI Assistant (Beta)

A new Agentic (Beta) entry point has been added to the **Dashboard / New Chat** page, providing the following core capabilities:

| Feature                  | Description                                                                                                              |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| Task Schedule Automation | Automatically generates task schedules, executes analysis tasks step by step, with visibility into task execution status |
| MCP Data Query           | Supports MCP protocol data query capabilities                                                                            |
| Context Awareness        | Supports conversation memory and intent understanding with chain-of-thought deep reasoning for smarter interactions      |
| Sharing                  | Allows sharing conversation content with other users                                                                     |
| High Concurrency         | Supports large numbers of concurrent users                                                                               |

#### 2. Notification Module

A newly developed notification system with the following features:

**Notification Types:**

* **Company Report Notifications:** When a new report is added to the system for any company included in the organization's Portfolios, all employees in the organization will receive real-time notifications
* **Subscription Result Notifications:** When a subscribed job generates results at its scheduled time, the system sends real-time completion notifications
* **System Notifications:** Supports publishing system-wide announcements visible to all users

**Interactive Features:**

* New notification icon added to the left sidebar menu
* Supports navigation to detail pages
* Supports read/unread message status management

#### 3. Watchlist Feature

* **Search Page:** Search results now support adding to Portfolio / Watchlist
* **Company Detail Page:** New option to add company to Watchlist
* **User Registration:** A default Watchlist is created for new users upon registration

***

### Feature Optimizations

#### 1. Dashboard Restructuring

| Enhancement            | Description                                               |
| ---------------------- | --------------------------------------------------------- |
| Subscription Module    | New subscription management module added                  |
| Notification Module    | New notification center module added                      |
| Watchlist Module       | New watchlist module added                                |
| CSS Style Optimization | Global style optimization for improved visual consistency |

#### 2. Portfolio Management Page Restructuring

* **Style Redesign:** Redesigned following Knowledge Base design standards for improved display and interaction experience
* **Portfolio Management:** Supports creating, editing Portfolios, and deleting/batch deleting companies
* **Company Addition:** Supports remote search and Excel bulk upload for adding companies

#### 3. Search Functionality Enhancement

* **Chat History Search:** New Agentic type filter added
* **Share Search:** New Agentic type filter added

#### 4. Other Optimizations

* **Company Logos:** Upgraded to high-definition images for enhanced visual quality

***

### Notes

* Features marked **(Beta)** are in testing phase and will be continuously improved in future releases

***

## **Release Version:** v7.0.7

**Release Date:** **December 26, 2025**

#### Added

**Company Page**

* Add quick navigation to Chat from current/related companies
* Add single company subscription capability
* Add "Latest Event" module displaying Agent computation timeline
* Add "Quick Analysis" for one-click access to Chat, Deep Research, and News Summary
* Add related companies display with Deep Research comparison feature
* Add latest 3 news display and full news history page
* Add private report upload with Knowledge Base integration
* Add Chat History association display

**Subscription Management**

* Add centralized Subscription Management page with filtering, Run Now, Start/Stop, and Unsubscribe functions
* Add navigation entry in sidebar

**News Flow Tracker Agent**

* Add Subscription tab with introduction video and preset result carousel
* Add subscription statistics dashboard
* Add Portfolio/Company dimension subscription support
* Add public and private template management with AI-assisted optimization
* Add multiple schedule options for subscriptions

**Subscription Results**

* Add History Result page for all subscriptions with filtering and sharing
* Add HTML/Markdown format viewing for subscription results
* Add privacy-protected sharing functionality
* Add login redirect for unauthenticated users accessing shared content

**Chat Interface**

* Add country flags to company selector
* Add AI-generated default title when saving Chat, Search, Deep Search, and Deep Research

**Share Page**

* Add Subscription type display and filtering

***

#### Changed

**Company Page**

* Redesign single company page layout and navigation
* Optimize "Add to Portfolio" workflow
* Redesign Report section with latest Filing and Earning Call Transcript display
* Update "See All" to navigate to filtered company reports page

**Chat Interface**

* Redesign chat input box for Dashboard and New Chat pages
* Optimize filter selection UI
* Update Knowledge Base default selection to key reports and news
* Change keyboard shortcuts: `Enter` to send, `Shift + Enter` for new line
* Update placeholder text

**Other**

* Optimize single PDF page to expand Chat by default
* Optimize Portfolio page icon display
* Optimize Settings page logout and avatar upload functions
* Change Knowledge Base company group name to optional field

***

#### Fixed

* Fix PDF Chat error for specific documents
* Fix menu display issue for unauthenticated users
* Fix Knowledge Base refresh issue

## **Release Version:** v6.9.175

**Release Date:** **April 29, 2025**

**Earnings Call Calendar Bot and Market Intelligence Scanner Bot**

* Added dedicated dashboard pages.

**Knowledge Base**

* Updated upload logic.

## Release Version: **v6.9.116**

**Release Date: March 6, 2025**

1. **RegWatch Bot**
   * Added a “Report List” page
   * Added a details page
2. **Permission Configuration**
   * Added RegWatch-related permissions

## Release Version: **v6.9.113**

**Release Date: March 5, 2025**

1. **News Signal Pulse Bot**
   * Added data display functionality
   * Added export functionality
2. **Market Intelligence Scanner**
   * Added portfolio query caching functionality
3. **Smart Monitor Bot**
   * Added portfolio query caching functionality
4. **Modern Slavery Monitor**
   * Added portfolio query caching functionality
5. **Data Transformer**
   * Added portfolio query caching functionality
6. **Menu**
   * Added a fixed caching feature for the menu

## Release Version: **v6.9.110**

**Release Date: February 26, 2025**

1. **AI Concept Screen Bot**
   * Fixed a bug causing the chat feature to fail
2. **Market Intelligence Scanner**
   * Added a popup to view detailed concept results
3. **Smart Monitor Bot**
   * Added a popup to view detailed concept results
4. **Modern Slavery Monitor**
   * Added a popup to view detailed concept results
5. **Data Transformer**
   * Added a popup to view detailed concept results
6. **Concept**
   * Fixed a bug related to uppercase and lowercase searches
7. **Single Company Page**
   * Added an association with the News Portfolio Bot

## **Release Version**: **v6.9.109**&#x20;

**Release Date: February 15, 2025**\
Earnings Call Calendar\
(1) Fixed a time zone bug in the Earnings Call bot

## **Release Version**: **v6.9.106**&#x20;

**Release Date: February 12, 2025**

1. Added a global company logo feature and a portfolio popup
2. Developed the Report Generator Bot\
   (1) Enabled switching to other bots on the results page
3. Market Intelligence Scanner\
   (1) Clicking on the Dashboard now takes you directly to the results page
4. Fixed online issues\
   (1) Fixed table styling for the portfolio news tracker\
   (2) Fixed table styling for the Smart Monitor

## **Release Version**: **v6.9.105**&#x20;

**Release Date: February 9, 2025**

1. Fixed the bug causing custom report uploads to prod to fail
2. Fixed an issue creating the datatransform bot
3. Fixed an issue creating market-intelligence
4. Fixed the issue where market-intelligence init would not appear on the dashboard
5. Fixed a custom report upload bug

## **Release Version**: **v6.9.104**&#x20;

**Release Date: February 6, 2025**

1. News Insight Matrix\
   (1) Developed Dashboard functionality\
   (2) Developed Table functionality
2. Single Company Popup\
   (1) Added a display for News Insight Matrix results
3. Dashboard\
   (1) Added a display for News Insight Matrix results
4. Smart Monitor Bot\
   (1) Added Company Level Export and Document Level Export functions on the overview page\
   (2) Added Company Details Export function on the single company page

## **Release Version**: v6.9.97

**Release Date**: January 24, 2025

**News Insight Matrix**

* Developed **Dashboard** functionality.
* Developed **Table** functionality.

**Single Company Page Popup**

* Added **News Insight Matrix** results display.

**Dashboard**

* Added **News Insight Matrix** results display.

**Smart Monitor Bot**

* Overview page: Added **Company Level Export** and **Document Level Export** functionalities.
* Single company page: Added **Company Details Export** functionality.

## Release Version: v6.9.72

**Release Date**: December 27, 2024

**Menu**

* Added the **Active Bot** page.
* Updated the **Bot Marketplace** page UI, introducing a new feature for grouped bot displays.

**News Flow Tracker**

* Added a **Dashboard Statistics** page.

## Release Version: v6.9.66

**Release Date**: December 13, 2024

**SmartMonitor Bot**

* Added batch list view, batch creation functionality, and batch calculation result view.
* Developed views for displaying the latest and historical report results for companies, including filtering by concept column, switching between Score, Result, and Flag views, and enabling report chat functionality.
* Added aggregated results for batch company reports with filters for company/portfolio and concept column, along with the ability to switch between Score, Result, and Flag views and access report chat functionality.
* Implemented functionality to view individual results by company and concept, edit answers, and highlight PDFs to show the basis for the answers.

**Dashboard**

* Optimized table headers and tag display globally.
* Added a preview feature for SmartMonitor Bot results.

**Concept Weightings**

* Added a UI view for the Weighting concept relationship list.

**Menu**

* Implemented a fixed left-side menu and updated the global UI style accordingly.

**Global UI Style Optimization**

* Made overall improvements to the user interface design.

**Bot Icon**

* Modified bot icons.

## Release Version: v6.9.57

**Release Date**: December 6, 2024

**Global Styles**

* **Enhancements**:
  1. Updated font style.
  2. Changed primary color.
  3. Modified the UI style of the left-side menu.
  4. Optimized menu adaptation for each page.
  5. Updated the Chat button style.

**Portfolio Management Module**

* **New Feature**:
  * Added validation logic.

**Data Transformer Bot**

* **New Feature**:
  * Added filtering functionality for companies and portfolios.

**News Flow Tracker Bot**

* **Enhancement**:
  * Improved news display logic with refined regular expressions.

**Report Generator Bot**

* **Bug Fixes**:
  * Fixed issues with drag-and-drop and text highlighting.

## Release Version: v6.9.35

**Release Date**: November 19, 2024

**Data Transformer**

* **Enhancement**: Improved the logic for selecting companies and reports.

**Concept Management**

* **Enhancement**: Refined the logic for concept reports.
* **New Feature**: Added a Co-pilot function for intelligently breaking down questions.

**Report Generator Bot**

* **Enhancement**: Optimized the calculation logic.

## **Release Version**: v6.9.29

**Release Date**: November 19, 2024

#### 1. Earnings Call Calendar

* **New Feature**: Non-corporate users can now view up to 20 data entries. To access more, users must fill out a form to contact us.

2. Single Company Page

* **Bug Fix**: Resolved an issue with pagination for filing data.
* **UI Update**: Standardized the date display format to 'yyyy-mm-dd' across the interface.

3. Concept

* **Enhancement**: Improved the preview style for user concepts.

4. Settings Library

* **Update**: Removed this module from the Settings section.

## Release **Version: v6.9.19**

**Release Date:** November 8, 2024

1. **Dashboard**
   * Added display of two private bots.
2. **Sustainability Bot**
   * Fixed the default sorting bug for AUM.
   * Fixed the pagination bug.
   * Fixed the data display bug for Consulting sources.
3. **Thematic Bot**
   * Fixed the default sorting bug for AUM.
   * Fixed the pagination bug.
   * Fixed the data display bug for Consulting sources.
4. **Report Generator Bot Development**
   * Optimized the process for creating report-type concepts.
   * Enhanced the display of calculation results, added a drag-and-drop feature.
5. **Single Company Pop-up**
   * Added association with the Report Generator Bot.

## Release **Version: v6.9.13**

**Release Date:** November 7, 2024

1. **Added Private Bots for Sustainability and Thematic**
2. **Concept Page**
   * Added "Report" type concepts.
   * When creating a "Report" type concept, you can now select the time range and report type.
3. **Added Report Generator Bot**
   * Added a batch list page.
   * Added a result preview page.

## Release **Version: v6.9.4**&#x20;

**Release Date:** November 1, 2024

1. **Single Company Pop-up**
   * Added a "Your Insight" category, displaying details of associated single-company bots.
   * Optimized the UI for the display position of the company description.
   * Improved the display of the News tab.
   * Changed the default report query period to one year.
   * Fixed the "load more" bug for default filing data.
2. **Data Transformer Bot**
   * Optimized the export of Excel files to ensure standardized naming.
3. **Global**
   * Enhanced the bot creation process to keep step descriptions collapsed by default.

## Release **Version: v6.9.1**&#x20;

**Release Date:** October 31, 2024

1. **Global Function Modifications**
   * Added a feature to sort by market cap by default in entity search.
2. **Login Module**
   * Adapted the login pop-up for mobile devices.
   * Updated login font style.
   * Modified text for login and registration options.
3. **DataTransformer Bot**
   * Updated text for selecting company reports.
4. **Filings Insight Bot**
   * Added support for System concepts.
5. **Dashboard**
   * Fixed the sticky header bug at extreme heights.
   * Fixed loading display bug for non-logged-in users.
6. **Single Company Pop-up**
   * Updated text on the tab pages.

## **Release Version: 6.8.99**

**Release Date**: October 23, 2024

1. **Concept Page Reconstruction**
   * Reconstructed the Concept management UI.
   * Added System category & concept.
   * System concept details can now be viewed in a pop-up window.
   * Added filtering and search functionality for System concepts & User concepts.
   * Optimized the UI display for User concepts.
2. **Data Transformer Bot**
   * Optimized the UI for Concept selection steps.
   * Added System concept calculation functionality when creating a bot.
   * Added Knowledge report calculation functionality when creating a bot.
   * Added System concept display in the application orchestration view.
   * Added System concept calculation results in the workflow view.
   * Added Knowledge report calculation results in the workflow view.
   * Added System concept calculation results in the table view of the calculation results overview page.
   * Added Knowledge report calculation results in the table view of the calculation results overview page.
   * Added System concept calculation results export functionality in the calculation results overview page.
   * Added Knowledge report calculation results export functionality in the calculation results overview page.
   * Optimized the date display for System concept results in the calculation results overview page.
3. **Single PDF Chat Pop-up**
   * Added a quick question feature for System concepts & User concepts.
4. **Earnings Call Calendar Bot**
   * Added a filter functionality for Report name in the table view.
   * Fixed the issue of duplicate tickers in the table view.
5. **Dashboard UI Optimization**
   * Added Bot result display view on the Dashboard.
   * Optimized the view for Private Bots.
6. **Permissions**
   * System pre-defined Bot results (read-only) are now visible to all users.
   * Added menu permissions for logged-in users.

## Release **Version: v6.8.90**

**Release Date**: October 18, 2024

Added an automatic calculation feature to the DataTransformer bot (up to 10 entitlements and 10 concepts can be selected).

## Release **Version: v6.8.77**

**Release Date**: September 25, 2024

1. **Earnings Call Calendar Bot**
   * Fixed the bug where the company name column was displayed as empty.
2. **Chat Page**
   * Optimized the CoPilot parsing functionality.
3. **News Flow Tracker Bot**
   * Optimized the UI display.

## Release **Version: v6.8.76**

**Release Date**: September 24, 2024

1. **News Flow Tracker Bot**
   * The list page now displays daily Google news related to 1,000 companies and extracts specified fields.&#x20;
   * Developed filtering functionality on the list page by time, portfolio/entity.
   * Added a pop-up to display summary results.
2. **Market Intelligence Scanner Bot**
   * Standardized the UI style for table list displays.
3. **Earnings Call Calendar Bot**
   * Standardized the UI style for table list displays.

## Release **Version: v6.8.73**

**Release Date**: September 19, 2024

**Market Intelligence Scanner Bot**

1. Adjusted the content on the bot results page, added PDF chat pop-up and result location viewing pop-up.
2. Fixed display bugs on both the Bot List and Bot Summary pages.
3. Optimized bot calculation logic.

**Custom Report Upload**

1. Fixed a bug where the title display showed an error.

## Release **Version: v6.8.69**&#x20;

**Release Date**: September 14, 2024

1. **Market Intelligence Scanner Bot**
   * Added a task list page, bot calculation result page, and summary details page.
2. **Summary Composer Bot**
   * Modified the result view: concept on the left, PDF on the right.
3. **Data Transformer Bot**
   * Added a new business orchestration feature.
4. **Search Engine**
   * Fixed a bug in company-specific + news data queries.
5. **Chat**
   * Fixed the issue where the confirmation window for "+new chat" occasionally did not redirect.
6. **Concept Management**
   * Added a new concept type in the backend, frontend development has not yet started.

## Release **Version: v6.8.63**

**Release Date**: September 09, 2024

1. **Login Functionality Update**
   * Users who are not logged in can only view shared pages; all other pages are inaccessible.
2. **Custom Knowledge Base Upload Optimization**
   * PDF uploads are now supported, and reports are automatically processed. Once the report status is marked as `SUCCESS`, users can immediately initiate a chat.

## **Release Version: v6.8.56**

**Release Date**: September 02, 2024

1. **Earnings Call Calendar Bot**
   * **Calendar View**: Added new features for stock code and portfolio filtering. Introduced a new data source, `China Earning Call Transcripts - 3rd Party`.
   * **Table View**: Introduced a new view with functionalities including time, stock code, portfolio, and report type filtering. Also added the `China Earning Call Transcripts - 3rd Party` data source.
2. **Search Engine**
   * Added `China Earning Call Transcripts - 3rd Party` as a new data source for chat and search functions.
3. **Data Transformer Bot**
   * Fixed a bug causing long concept names to wrap incorrectly when creating a batch.
4. **Portfolio Page**
   * Fixed a bug related to errors when deleting multiple selected portfolios.
   * Improved data display in the table.
5. **Single Company Page**
   * Added `China Earning Call Transcripts - 3rd Party` as a new data source.
   * Removed the line chart for price data.
6. **Share Page**
   * Fixed a bug where issues persisted when modifying and re-submitting questions on the page.
7. **UI and Text Improvements**
   * Optimized CSS styles and improved text content across various pages.

## **Release Version**: v6.8.45

**Release Date**: August 22, 2024

1. **Optimization of Filing Insight Extractor Bot**: The bot has been enhanced to provide additional data in table outputs, now including both `statement` and `reference_txt` fields.
2. **Multi-Selection Support for Ticker in Filing Insight Extractor Bot**: The bot now supports multi-selection for tickers within tables, offering greater flexibility in data analysis.
3. **Improvement in Chat Logic for Filing Insight Extractor Bot**: The logic governing chat interactions has been refined to better align and correlate `result`, `flag`, `statement`, and `reference_txt` relationships, ensuring more accurate and contextually relevant responses.


# Introduction

## Welcome to Orbit

This API Reference describes the RESTful and realtime APIs you can use to interact with the Orbit platform. REST APIs are usable via HTTP in any environment that supports HTTP requests.


# Playground

To test the APIs, please create your API keys and test here:

Please enter your API key and then start the testing process.

<figure><img src="/files/XCgIeHkjOzwo9mZfK8Cb" alt=""><figcaption></figcaption></figure>

{% embed url="<https://api.orbitfin.ai/docs>" %}


# Pricing

### Credit-Based System

Orbit uses a unified credit-based pricing system across all our products and services. Credits are the universal unit of consumption that measures:

* **LLM Processing**: Computational resources for AI analysis and generation
* **Data Access**: Retrieval of documents, reports, and market data
* **Tool Usage**: Execution of specialized financial analysis tools

#### Key Principles

1. **Pay for What You Use**: Credits are deducted only for successful operations
2. **Transparent Pricing**: Each operation has a fixed credit cost
3. **No Hidden Fees**: All costs are clearly defined upfront
4. **Universal Currency**: Same credits work for both APIs and MCP

#### How Credits Apply

* **APIs**: Direct programmatic access charges credits per operation
* **MCP**: Natural language queries consume credits based on complexity
* **Shared Pool**: API and MCP usage draws from the same credit balance

#### Credit Consumption Examples

* Simple data lookup = Low credit usage (0.1 credits)
* AI-powered analysis = Medium credit usage (1-2 credits)
* Complex multi-step research = High credit usage (10+ credits)

***

### API Pricing Table

| API Endpoint                                       | Description                                                                      | Credits                                                               |
| -------------------------------------------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| **Single Entity Lookup**                           | Search for a single company using ISIN, ticker, LEI, or company name             | 0.1 credit                                                            |
| **Bulk Entity Lookup**                             | Search multiple companies with filters (exchange, country, market cap, industry) | 1 credit per 20 companies                                             |
| **Report List**                                    | Retrieve list of available reports for specific companies within date range      | 0.5 credit per 20 total                                               |
| **File Download**                                  | Download files in PDF, extracted text, or embedding format                       | <p>PDF: 5 credits</p><p>Text: 10 credits</p><p>Vector: 12 credits</p> |
| **PDF Parser**                                     | Extract structured content from PDF documents with block-level precision         | 0.4 credit per 10 pages                                               |
| **Internet News**                                  | Collect news from Google                                                         | 0.5 credit                                                            |
| **Chat with Internet News**                        | Collect news from Google and chat on it                                          | 1 credit                                                              |
| **End of Day Price**                               | Fetch end of day price from Google Finance                                       | 0.5 credit                                                            |
| **Deriving conclusions through inquiry - Chat AI** | AI-powered conversational query about company filings (limit: 4 turns)           | 1 credit                                                              |
| **Get Report List by Question**                    | Semantic and keyword search across filing documents (limit: 20 results)          | 1 credit                                                              |

### MCP Pricing Table

<table><thead><tr><th width="192.796875">Tool Name</th><th width="244.47265625">Description</th><th width="91.95703125">Credit</th><th>Notes</th></tr></thead><tbody><tr><td>Company Search</td><td>Query company info via ISIN / Ticker / LEI / Name to obtain orbit_entity_id,<br>required as a prerequisite for all other tools</td><td>1</td><td></td></tr><tr><td>Get Filings Data</td><td>Internal proprietary vector search across 308 document types (filings,<br>announcements, ESG reports, etc.). Returns AI-generated summaries, evidence citations, and URL</td><td>1</td><td><p></p><p>Max 1-year date range per call; up to 10 years of historical data; typical response time 30–120s</p></td></tr><tr><td>Bot News Tracker</td><td>AI-powered daily news sentiment tracker — generates sentiment scores (0–100),<br>classifies positive/negative events, identifies competitors, risk factors, and provides<br>buy/hold/sell signals</td><td>1</td><td>Max 31-day range per call; up to 3 years of historical data</td></tr><tr><td>Get Eod Price</td><td>Retrieves end-of-day (EOD) stock price data with flexible time windows: 1D / 5D /<br>1M / 6M / YTD / 1Y / 5Y / MAX</td><td>0.5</td><td></td></tr><tr><td>Google News</td><td>Searches Google News for financial and business coverage with multi-keyword<br>filtering, date range, and multi-language support</td><td>0.5</td><td></td></tr></tbody></table>


# Single Entity Lookup

Use this endpoint to search for companies by name, permanent identifier, ISIN code, or ticker symbol.

#### Endpoint

```
POST /v1/company_report/company_search
```

#### Authentication

This endpoint requires API key authentication via the request header.

#### Request Headers

| Header         | Value              | Required | Description                             |
| -------------- | ------------------ | -------- | --------------------------------------- |
| `Content-Type` | `application/json` | Yes      | Specifies the media type of the request |
| `X-API-KEY`    | `{your_api_key}`   | Yes      | Your unique API authentication key      |

#### Query Parameters

You can search using **any one** of the following parameters:

| Parameter | Type   | Required | Description                                                                        |
| --------- | ------ | -------- | ---------------------------------------------------------------------------------- |
| `name`    | string | No       | Full or partial name of the company                                                |
| `perm_id` | string | No       | Permanent identifier of the company                                                |
| `isin`    | string | No       | ISIN (International Securities Identification Number) code of the company's equity |
| `ticker`  | string | No       | Stock ticker symbol of the company's equity                                        |

> **Note:** At least one parameter must be provided. You can use multiple parameters to refine your search.

#### Example Request

```bash
curl -X POST https://api.orbitfin.ai/v1/company_report/company_search \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your_api_key>" \
  -d '{
    "name": "NAME",
    "ticker": "TICKER",
    "perm_id": "PERMID_ID",
    "isin": "ISIN"
  }'
```

#### Response

**Success Response (200 OK)**

```json
{
  "status_code": 200,
  "data": [
    {
      "orbit_entity_id": "1-4295914405",
      "name": "NVIDIA CORP",
      "png_logo_path": "https://ot-cdn.s3.us-west-2.amazonaws.com/company-logos/v1/c820079af1c24e5c97dd511bcee95163.png",
      "children": [
        {
          "isin": "ARBCOM460184",
          "ticker": "NVDAm"
        },
        {
          "isin": "BRNVDCBDR008",
          "ticker": "NVDC34"
        },
        {
          "isin": "CA67080A1093",
          "ticker": "NVDA"
        },
        {
          "isin": "US67066G1040",
          "ticker": "NVDA"
        }
      ]
    }
  ],
  "message": "Search successful"
}
```

**Response Fields**

| Field                      | Type    | Description                                           |
| -------------------------- | ------- | ----------------------------------------------------- |
| `status_code`              | integer | HTTP status code of the response                      |
| `data`                     | array   | Array of company objects matching the search criteria |
| `data[].orbit_entity_id`   | string  | Unique identifier for the company entity              |
| `data[].name`              | string  | Official registered name of the company               |
| `data[].png_logo_path`     | string  | URL to the company's logo image                       |
| `data[].children`          | array   | List of securities associated with the company        |
| `data[].children[].isin`   | string  | ISIN code for the specific security                   |
| `data[].children[].ticker` | string  | Ticker symbol for the specific security               |
| `message`                  | string  | message                                               |


# Bulk Entity Lookup

Search for multiple companies with advanced filters.

#### Endpoint

```
POST /v1/company_report/company_search_batch
```

#### Parameters

| Parameter        | Type    | Required | Description                                                                                                                                                                                                |
| ---------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **mic**          | string  | No       | Exchange code (e.g., XNAS, XLON)                                                                                                                                                                           |
| country\_iso     | string  | No       | Country code (e.g., US, GB, JP)                                                                                                                                                                            |
| market\_cap\_usd | dict    | No       | Market cap range {"min": 1000000, "max": 10000000}                                                                                                                                                         |
| industry\_id     | string  | No       | Industry classification ID (e.g., "123")                                                                                                                                                                   |
| limit            | integer | No       | Number of results (default: 20, max: 100)                                                                                                                                                                  |
| offset           | integer | No       | Pagination offset (default: 0)                                                                                                                                                                             |
| order            | string  | No       | <p>Sort order</p><ul><li>market\_cap\_desc: Market cap descending (default)</li><li>market\_cap\_asc: Market cap ascending</li><li>name\_asc: Name ascending</li><li>name\_desc: Name descending</li></ul> |

#### Example Request

bash

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/company_report/company_search_batch' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "mic": "",
  "country_iso": "",
  "market_cap_usd": {"min": 1000000, "max": 10000000},
  "industry_id": "",
  "limit": 50,
  "offset": 0,
  "order": "market_cap_desc"
}'
```

#### Response

json

```json
{
  "status_code": 200,
  "data": {
    "companies": [
      {
        "orbit_entity_id": "1-4295914405",
        "name": "NVIDIA CORP",
        "png_logo_path": "https://ot-cdn.s3.us-west-2.amazonaws.com/company-logos/v1/c820079af1c24e5c97dd511bcee95163.png",
        "country_iso": "CA",
        "mic": "XTSE",
        "market_cap_usd": 4595372833264.54,
        "primary_industry_id": "1-4294952838",
        "primary_business_sector_id": "1-4294952722",
        "primary_economic_sector_id": "1-4294952723",
        "lei": "549300S4KLFTLO7GSQ80",
        "cik": "0001045810",
        "primary_isin": "CA67080A1093",
        "primary_ticker": "NVDA"
      }
    ],
    "pagination": {
      "total": 77961,
      "limit": 50,
      "offset": 0,
      "has_more": true
    }
  },
  "message": "Batch search successful"
}
```

## Response Fields

### Success Response Structure

#### Top-Level Fields

| Field         | Type    | Description                                                            |
| ------------- | ------- | ---------------------------------------------------------------------- |
| `status_code` | integer | HTTP status code of the response (200 for success)                     |
| `data`        | object  | Container object holding the search results and pagination information |
| `message`     | string  | message                                                                |

#### Data Object

| Field        | Type   | Description                                            |
| ------------ | ------ | ------------------------------------------------------ |
| `companies`  | array  | Array of company objects matching the search criteria  |
| `pagination` | object | Pagination metadata for navigating through result sets |

#### Company Object (`data.companies[]`)

| Field                        | Type   | Description                                                                            |
| ---------------------------- | ------ | -------------------------------------------------------------------------------------- |
| `orbit_entity_id`            | string | Unique identifier for the company entity in the Orbit system                           |
| `name`                       | string | Official registered name of the company                                                |
| `png_logo_path`              | string | URL to the company's logo image in PNG format                                          |
| `country_iso`                | string | ISO 3166-1 alpha-2 country code where the primary listing is located                   |
| `mic`                        | string | Market Identifier Code (MIC) of the primary exchange where the company is listed       |
| `market_cap_usd`             | number | Current market capitalization in US dollars                                            |
| `primary_industry_id`        | string | Unique identifier for the company's primary industry classification                    |
| `primary_business_sector_id` | string | Unique identifier for the company's primary business sector                            |
| `primary_economic_sector_id` | string | Unique identifier for the company's primary economic sector                            |
| `lei`                        | string | Legal Entity Identifier (LEI) - a 20-character unique identifier for legal entities    |
| `cik`                        | string | Central Index Key (CIK) assigned by the U.S. Securities and Exchange Commission        |
| `primary_isin`               | string | Primary ISIN (International Securities Identification Number) for the company's equity |
| `primary_ticker`             | string | Primary stock ticker symbol for the company's equity                                   |

#### Pagination Object (`data.pagination`)

| Field      | Type    | Description                                                                |
| ---------- | ------- | -------------------------------------------------------------------------- |
| `total`    | integer | Total number of companies matching the search criteria across all pages    |
| `limit`    | integer | Maximum number of results returned per page (default: 50)                  |
| `offset`   | integer | Number of results skipped from the beginning (used for pagination)         |
| `has_more` | boolean | Indicates whether additional results are available beyond the current page |


# Retrive Document List

## Get company report

{% tabs %}
{% tab title="Sign" %} <mark style="color:green;">`GET`</mark> `/v1/instruments/get_company_reports`
{% endtab %}

{% tab title="Example request" %}

```
POST {{baseUrl}}/{{version}}/instruments/get_company_reports
Content-Type: application/json
X-API-KEY: <token>

{
  "perm_id": "1-4295905573",
  "start_date": "2024-02-15",
  "end_date": "2025-02-14",
  "lv3_type_id_list": [
    "10002"
  ],
  "page": 1,
  "size": 10
}
```

{% endtab %}
{% endtabs %}

Search all company report by company perm\_id.

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |
| X-API-KEY    | `<token>`          |

**Body**

| Name               | Type      | Description                       |
| ------------------ | --------- | --------------------------------- |
| `perm_id`          | string    | Perm\_id of the company           |
| `start_date`       | string    | Isin code of the company's equity |
| `end_date`         | string    | Ticker of the company's equity    |
| `lv3_type_id_list` | string\[] | List of report types              |
| `page`             | integer   | Which page                        |
| `size`             | integer   | Page size                         |

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status_code": 200,
  "data": {
    "reports": [
      {
        "report_id": "f_8cpwBjXjmmql5CM2FwprgR",
        "report_title": "10-K",
        "language": "en",
        "type_id_list": [
          "10002"
        ],
        "reported_at": "2024-11-01",
        "can_be_questioned": true,
        "attachments_pdf": [
          {
            "attachment_id": "pVzPFulH",
            "file_title": "Form 10-K",
            "file_title_en": "Form 10-K",
            "language": "en",
            "page_count": 60,
            "preview_link": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2024/11/01/edgar-data-320193-000032019324000123-aapl-20240928.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=rigWmpZ2ujEhFDq0effSJH5UmK8%3D&Expires=1740644555"
          },
          {
            "attachment_id": "nh5tYfGl",
            "file_title": "10-K",
            "file_title_en": "10-K",
            "language": "en",
            "page_count": 14,
            "preview_link": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2024/11/01/edgar-data-320193-000032019324000123-a10-kexhibit4109282024.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=UYNVnCC9%2BYtapUuPMqFl%2FePITmM%3D&Expires=1740644555"
          },
          {
            "attachment_id": "YYLRd39V",
            "file_title": "APPLE INC. 2022 EMPLOYEE STOCK PLAN RESTRICTED STOCK UNIT AWARD AGREEMENT",
            "file_title_en": "APPLE INC. 2022 EMPLOYEE STOCK PLAN RESTRICTED STOCK UNIT AWARD AGREEMENT",
            "language": "en",
            "page_count": 7,
            "preview_link": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2024/11/01/edgar-data-320193-000032019324000123-a10-kexhibit10199282024.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=SdC1QT6U5ye64jPiUIhoFWoLpjw%3D&Expires=1740644555"
          },
          ...
        ]
      },
      {
        "report_id": "o_6EHx3VwgfFt4VnhQYKRgH6",
        "report_title": "Apple Inc. CONDENSED CONSOLIDATED STATEMENTS OF OPERATIONS (Unaudited)",
        "language": "en",
        "type_id_list": [
          "10002",
          "10085",
          "10089"
        ],
        "reported_at": "2024-05-02",
        "can_be_questioned": true,
        "attachments_pdf": [
          {
            "attachment_id": "LmD1CkuH",
            "file_title": "FY24_Q2_Consolidated_Financial_Statements",
            "file_title_en": null,
            "language": "en",
            "page_count": null,
            "preview_link": "https://official-reports.s3.amazonaws.com/data-system/B42E5804738080206BF4A3B215BEDED1.pdf?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=DJB81l9Ua1VFUmlb8L4Wm32TsCc%3D&Expires=1740644555"
          }
        ]
      }
    ],
    "page": 1,
    "size": 10,
    "total": 2
  },
  "detail": null,
  "message": "success"
}
```

{% endtab %}

{% tab title="400" %}

```json
{
  "error": "Invalid request"
}
```

{% endtab %}
{% endtabs %}


# Document Download

Download report files in various formats.

#### Endpoint

```
POST /files/download
```

#### Parameters

| Parameter  | Type      | Required | Description                            |
| ---------- | --------- | -------- | -------------------------------------- |
| report\_id | string\[] | Yes      | Report IDs to download (max: 10)       |
| format     | string    | Yes      | Output format: pdf, extract, embedding |
| options    | object    | No       | Format-specific options                |

**Format Options:**

* **PDF**
* **Extract**
* **Embedding**

#### Example Request

bash

```bash
curl -X POST "https://api.orbitfin.ai/v1/files/download" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "report_id": ["rpt_9xk3m7nq"],
    "format": "extract",
    "options": {
      "format": "json",
      "include_tables": true
    }
  }'
```

#### Response

json

```json
{
  "status": "success",
  "credits_used": 0.5,
  "data": {
    "download_urls": [
      {
        "report_id": "rpt_9xk3m7nq",
        "url": "https://download.orbitfin.ai/temp/...",
        "expires_at": "2024-12-08T10:30:00Z",
        "file_size": 234567,
        "format": "extract"
      }
    ]
  }
}
```


# Document Search

Search across filing documents using semantic or keyword search.

#### Endpoint

```
POST /search/documents
```

#### Parameters

| Parameter         | Type      | Required | Description                                  |
| ----------------- | --------- | -------- | -------------------------------------------- |
| query             | string    | Yes      | Search query (natural language or keywords)  |
| orbit\_entity\_id | string\[] | No       | Limit to specific companies                  |
| report\_type      | string\[] | No       | Limit to specific report types               |
| date\_range       | object    | No       | {"start": "2024-01-01", "end": "2024-12-31"} |
| search\_type      | string    | No       | semantic, keyword, hybrid (default: hybrid)  |
| limit             | integer   | No       | Max results (default: 20, max: 20)           |

#### Example Request

bash

```bash
curl -X POST "https://api.orbitfin.ai/v1/search/documents" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "artificial intelligence investments",
    "orbit_entity_id": ["ent_2vxp8q3n", "ent_7kms9p2w"],
    "search_type": "semantic",
    "limit": 10
  }'
```

#### Response

json

```json
{
  "status": "success",
  "credits_used": 1.0,
  "data": {
    "total_matches": 47,
    "returned_count": 10,
    "results": [
      {
        "score": 0.92,
        "report_id": "rpt_9xk3m7nq",
        "company_name": "Apple Inc.",
        "report_type": "10-K",
        "section": "Item 1A - Risk Factors",
        "page": 23,
        "snippet": "...our investments in artificial intelligence and machine learning technologies...",
        "context": {
          "before": "We continue to make significant",
          "match": "investments in artificial intelligence and machine learning technologies",
          "after": "to enhance our products and services"
        }
      }
    ]
  }
}
```


# Chat with a report

## Chat with a report

{% tabs %}
{% tab title="Sign" %} <mark style="color:green;">`GET`</mark> `/v1/chat/chat_report`
{% endtab %}

{% tab title="Example request" %}

```
POST {{baseUrl}}/{{version}}/chat/chat_report
Content-Type: application/json
X-API-KEY: <token>

{
  "report_id": "f_0UwYjo28DaDWedx2JZ42rz",
  "question": "hello"
}
```

{% endtab %}
{% endtabs %}

Ask a AI question regarding a report.

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |
| X-API-KEY    | `<token>`          |

**Body**

| Name        | Type   | Description                |
| ----------- | ------ | -------------------------- |
| `report_id` | string | Report ID                  |
| `question`  | string | Question would like to ask |

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status_code": 200,
  "data": {
    "request_params": {
      "report_id": "f_0UwYjo28DaDWedx2JZ42rz",
      "question": "hello"
    },
    "answer": "Hello! How can I assist you today?",
    "reference": [
      {
        "attachment": "ohHiFb3O",
        "page": 2
      },
      {
        "attachment": "kqKqBlO6",
        "page": 3
      },
      {
        "attachment": "ohHiFb3O",
        "page": 3
      },
      {
        "attachment": "ohHiFb3O",
        "page": 4
      }
    ],
    "error": false
  },
  "detail": null,
  "message": "success"
}
```

{% endtab %}

{% tab title="400" %}

```json
{
  "error": "Invalid request"
}
```

{% endtab %}
{% endtabs %}


# Chat Query

### 6. Chat Query

Interactive AI-powered chat for company research.

#### Endpoint

```
POST /chat/query
```

#### Parameters

| Parameter         | Type      | Required | Description                             |
| ----------------- | --------- | -------- | --------------------------------------- |
| messages          | array     | Yes      | Chat history with role and content      |
| orbit\_entity\_id | string\[] | No       | Limit to specific companies (max: 5)    |
| knowledge\_base   | string    | No       | filings, news, all (default: filings)   |
| temperature       | float     | No       | Response creativity (0-1, default: 0.3) |

#### Example Request

bash

```bash
curl -X POST "https://api.orbitfin.ai/v1/chat/query" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": "Compare Apple and Microsoft R&D spending trends"
      }
    ],
    "orbit_entity_id": ["ent_2vxp8q3n", "ent_7kms9p2w"]
  }'
```

#### Response

json

```json
{
  "status": "success",
  "credits_used": 1.0,
  "data": {
    "response": "Based on the latest 10-K filings...",
    "citations": [
      {
        "source": "AAPL 10-K 2024",
        "page": 45,
        "text": "Research and development expense was $29.9 billion"
      }
    ],
    "usage": {
      "prompt_tokens": 156,
      "completion_tokens": 892,
      "total_tokens": 1048
    }
  }
}
```


# Deep Research

Comprehensive AI research analysis with multiple sub-queries.

#### Endpoint

```
POST /research/deep
```

#### Parameters

| Parameter         | Type      | Required | Description                              |
| ----------------- | --------- | -------- | ---------------------------------------- |
| query             | string    | Yes      | Research question or topic               |
| orbit\_entity\_id | string\[] | Yes      | Companies to analyze (max: 5)            |
| analysis\_type    | string\[] | No       | Types: financial, competitive, risk, esg |
| output\_format    | string    | No       | detailed, summary, bullet\_points        |
| include\_visuals  | boolean   | No       | Generate charts/tables (default: true)   |

#### Example Request

bash

```bash
curl -X POST "https://api.orbitfin.ai/v1/research/deep" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Analyze competitive positioning and financial health",
    "orbit_entity_id": ["ent_2vxp8q3n", "ent_7kms9p2w"],
    "analysis_type": ["financial", "competitive"],
    "output_format": "detailed"
  }'
```

#### Response

json

```json
{
  "status": "success",
  "credits_used": 10.0,
  "data": {
    "research_id": "res_4mp9k2nx",
    "executive_summary": "Comprehensive analysis reveals...",
    "sections": [
      {
        "title": "Financial Performance Comparison",
        "content": "...",
        "data_tables": [],
        "charts": []
      }
    ],
    "methodology": {
      "sub_queries_generated": 12,
      "documents_analyzed": 24,
      "data_points_extracted": 156
    },
    "citations": [],
    "generated_at": "2024-12-08T09:15:00Z"
  }
}
```


# Orbit API Setup

### 1. Overview <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--1-overview-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--1-overview-0"></a>

Orbit exposes two access channels, both of which require authentication:

* **REST API** — for backend services, data pipelines, and batch jobs.

To support both machine-to-machine integrations and end-user delegated access, Orbit supports **two authentication methods**:

<table><thead><tr><th>Method</th><th>Channels</th><th>Typical Use Cases</th><th data-hidden></th></tr></thead><tbody><tr><td><strong>API Key</strong></td><td>REST API </td><td>Server-to-server calls, individual developers, trusted internal environments</td><td></td></tr></tbody></table>

### 2. Base URLs & Interactive References <a href="#heading-f20e82ae-0d17-4395-8fc6-21abfe6b1b51--20-base-urls-interactive-references-0" id="heading-f20e82ae-0d17-4395-8fc6-21abfe6b1b51--20-base-urls-interactive-references-0"></a>

Before issuing any request, make sure you are calling the correct endpoint. Orbit exposes two independent services, each with its own base URL and interactive documentation:

| Service      | Base URL                  | Interactive Reference                                                       | Description                                                                                                                             |
| ------------ | ------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **REST API** | `https://api.orbitfin.ai` | `https://api.orbitfin.ai/docs` [<sup>1</sup>](https://api.orbitfin.ai/docs) | RESTful endpoints for programmatic access — entity lookup, report retrieval, file download, PDF parsing, news, EOD price, Chat AI, etc. |

This API Reference describes the RESTful and realtime APIs you can use to interact with the Orbit platform. REST APIs are usable via HTTP in any environment that supports HTTP requests.

**Quick Reference**

**REST API**

```
<HTTP>
Base URL:         https://api.orbitfin.ai      
OpenAPI / Docs:   https://api.orbitfin.ai/docs
Auth Header:      X-API-KEY: <your-api-key>
Versioning:       /v1/...   (e.g. /v1/company_report/file_list)
Content-Type:     application/json
```

**Minimal Smoke Tests**

Verify your key works against each surface in under 10 seconds.

**REST API — list files for a report**

```
curl -X POST 'https://api.orbitfin.ai/v1/company_report/file_list' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
        "report_id": ["f_haBmMwT4WN7tXrt8rj9eA3"],
        "option": ["pdf"]
      }'
```

Obtain different types of file information based on a list of report IDs and query options.

Full request/response schemas and a live "Try it out" console are available in the API Playground [<sup>1</sup>](https://api.orbitfin.ai/docs).

**Unified Billing Across Both Surfaces**

API Key usage on either surface draws from the **same credit pool** on your Orbit account:

Universal Currency: Same credits work for both APIs and MCP · APIs: Direct programmatic access charges credits per operation · MCP: Natural language queries consume credits based on complexity · Shared Pool: API and MCP usage draws from the same credit balance

. There is no need to provision separate quotas — a single API key (or a single OAuth-authenticated user, see §3) is billed uniformly.

<br>

### 3. Method 1: API Key Authentication <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--2-method-1-api-key-authentication-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--2-method-1-api-key-authentication-0"></a>

1. Sign in to the Orbit Console\[<https://insight.orbitfin.ai/>] → **Settings → API Keys**.

<figure><img src="/files/Q2qQEI3se4Oq8e2XVL7h" alt=""><figcaption></figcaption></figure>

2. Click **Create API Key**, give it a name, and save.

#### 3.2 Using API Key with the REST API <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--22-using-api-key-with-the-rest-api-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--22-using-api-key-with-the-rest-api-0"></a>

Pass the key in the `X-API-KEY` header:

**\<BASH>**

```
curl -X POST 'https://api.orbitfin.ai/v1/company_report/file_list' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
        "report_id": ["f_haBmMwT4WN7tXrt8rj9eA3"],
        "option": ["pdf"]
      }'
```

#### 3.4 Security Best Practices <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--24-security-best-practices-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--24-security-best-practices-0"></a>

API keys are long-lived credentials that do not carry user identity, which makes per-user authorization difficult and creates significant risk if leaked into logs or version control; audit trails can only record what an API key did, not which user.

Therefore:

* **Never** embed API keys in frontend code.
* **Never** commit them to Git.
* **Rotate** keys regularly.
* Follow the **principle of least privilege** when assigning scopes (where supported).


# Single Entity Lookup

#### Endpoint

```
POST /v1/company_report/company_search
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/company/company_search_v1_company_report_company_search_post)

#### Request

**Headers**

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | your-api-key       |

**Request Body Parameters**

| Parameter | Type   | Required | Description                                                                                                                                                                 |
| --------- | ------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`    | string | No       | Full or partial name of the company                                                                                                                                         |
| `lei`     | string | No       | LEI (Legal Entity Identifier) is a unique 20-character code that identifies legal entities. Use this parameter in your API request to specify the entity you want to query. |
| `isin`    | string | No       | ISIN (International Securities Identification Number) code of the company's equity                                                                                          |
| `ticker`  | string | No       | Stock ticker symbol of the company's equity                                                                                                                                 |

> **Note:** At least one parameter must be provided. You can use multiple parameters to refine your search.

**Example Request**

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/company_report/company_search' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "NVIDIA",
  "ticker": "NVDA",
  "lei": "",
  "isin": "US67066G1040"
}'
```

#### Response

**Response Fields**

**Top-Level Fields**

| Field         | Type        | Description                                           |
| ------------- | ----------- | ----------------------------------------------------- |
| `status_code` | integer     | HTTP status code (200 for success)                    |
| `data`        | array       | Array of company objects matching the search criteria |
| `detail`      | string/null | Additional error details (null on success)            |
| `message`     | string      | Response status message                               |

**Company Object (`data[]`)**

| Field             | Type   | Description                                    |
| ----------------- | ------ | ---------------------------------------------- |
| `orbit_entity_id` | string | Unique identifier for the company entity       |
| `name`            | string | Official registered name of the company        |
| `png_logo_path`   | string | URL to the company's logo image                |
| `children`        | array  | List of securities associated with the company |

**Security Object (`data[].children[]`)**

| Field    | Type   | Description                             |
| -------- | ------ | --------------------------------------- |
| `isin`   | string | ISIN code for the specific security     |
| `ticker` | string | Ticker symbol for the specific security |

**Example Response**

```json
{
  "status_code": 200,
  "data": [
    {
      "orbit_entity_id": "1-4295914405",
      "name": "NVIDIA CORP",
      "png_logo_path": "https://ot-cdn.s3.us-west-2.amazonaws.com/company-logos/v1/c820079af1c24e5c97dd511bcee95163.png",
      "children": [
        {
          "isin": "ARBCOM460184",
          "ticker": "NVDAm"
        },
        {
          "isin": "BRNVDCBDR008",
          "ticker": "NVDC34"
        },
        {
          "isin": "CA67080A1093",
          "ticker": "NVDA"
        },
        {
          "isin": "US67066G1040",
          "ticker": "NVDA"
        }
      ]
    }
  ],
  "detail": null,
  "message": "Search successful"
}
```

#### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# Bulk Entity Lookup

#### Endpoint

```
POST /v1/company_report/company_search_batch
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/company/company_search_batch_v1_company_report_company_search_batch_post)

#### Request

**Headers**

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | your-api-key       |

**Request Body Parameters**

| Parameter        | Type    | Required | Description                                                                        |
| ---------------- | ------- | -------- | ---------------------------------------------------------------------------------- |
| `country`        | string  | No       | country code (e.g., `US`, `GB`, `JP`)                                              |
| `market_cap_usd` | object  | No       | Market capitalization range in USD (e.g., `{"min": 1000000, "max": 10000000}`)     |
| `sector`         | string  | No       | Unique identifier for the company's primary industry classification                |
| `exchange`       | string  | No       | Exchange Code for exchange (e.g., `XNAS`, `XLON`)                                  |
| `limit`          | integer | No       | Number of results per page (default: `20`, max: `100`)                             |
| `offset`         | integer | No       | Pagination offset (default: `0`)                                                   |
| `order`          | string  | No       | Sort order: `market_cap_desc` (default), `market_cap_asc`, `name_asc`, `name_desc` |

> **Note:** Options for `market_cap_usd`, `exchange`, `country`, and `sector` are included in **Appendix B: Metainfo**.

**Example Request**

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/company_report/company_search_batch' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "country": "US",
  "market_cap_usd": {
    "min": 1000000000,
    "max": 10000000000
  },
  "sector": "",
  "limit": 20,
  "offset": 0,
  "order": "market_cap_desc",
  "exchange": "XNAS"
}'
```

#### Response

**Response Fields**

**Top-Level Fields**

| Field         | Type        | Description                                                 |
| ------------- | ----------- | ----------------------------------------------------------- |
| `status_code` | integer     | HTTP status code (200 for success)                          |
| `data`        | object      | Container object holding search results and pagination info |
| `detail`      | string/null | Additional error details (null on success)                  |
| `message`     | string      | Response status message                                     |

**Data Object**

| Field        | Type   | Description                                            |
| ------------ | ------ | ------------------------------------------------------ |
| `companies`  | array  | Array of company objects matching the search criteria  |
| `pagination` | object | Pagination metadata for navigating through result sets |

**Company Object (`data.companies[]`)**

| Field               | Type   | Description                                                          |
| ------------------- | ------ | -------------------------------------------------------------------- |
| `orbit_entity_id`   | string | Unique identifier for the company entity in the Orbit system         |
| `name`              | string | Official registered name of the company                              |
| `png_logo_path`     | string | URL to the company's logo image in PNG format                        |
| `country`           | string | ISO 3166-1 alpha-2 country code where the primary listing is located |
| `exchange`          | string | Market Identifier Code (MIC) of the primary exchange                 |
| `market_cap_usd`    | number | Current market capitalization in US dollars                          |
| `primary_sector_id` | string | Unique identifier for the company's primary industry classification  |
| `lei`               | string | Legal Entity Identifier (LEI) - 20-character unique identifier       |
| `cik`               | string | Central Index Key (CIK) assigned by the U.S. SEC                     |
| `primary_isin`      | string | Primary ISIN code for the company's equity                           |
| `primary_ticker`    | string | Primary stock ticker symbol for the company's equity                 |

**Pagination Object (`data.pagination`)**

| Field      | Type    | Description                                                                |
| ---------- | ------- | -------------------------------------------------------------------------- |
| `total`    | integer | Total number of companies matching the search criteria across all pages    |
| `limit`    | integer | Maximum number of results returned per page                                |
| `offset`   | integer | Number of results skipped from the beginning (used for pagination)         |
| `has_more` | boolean | Indicates whether additional results are available beyond the current page |

**Example Response**

```json
{
  "status_code": 200,
  "data": {
    "companies": [
      {
        "orbit_entity_id": "1-4295907168",
        "name": "MICROSOFT CORP",
        "png_logo_path": "https://ot-cdn.s3.us-west-2.amazonaws.com/company-logos/v1/a33d7aebcf9e4b3ca05ed6df6ecf4d16.png",
        "country": "AT",
        "exchange": "XWBO",
        "market_cap_usd": 3901297294155.35,
        "primary_sector_id": "1-4294952829",
        "lei": "INR2EJN1ERAN0W5ZP974",
        "cik": "0000789019",
        "primary_isin": "US5949181045",
        "primary_ticker": "MSFT"
      }
    ],
    "pagination": {
      "total": 150,
      "limit": 20,
      "offset": 0,
      "has_more": true
    }
  },
  "detail": null,
  "message": "Search successful"
}
```

#### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# Report List

## Get Report List by Question

#### Endpoint

```
POST /v1/company_report/report_search
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/reports/report_search_v1_company_report_report_search_post)

#### Description

This API enables users to retrieve a curated list of relevant reports by submitting a natural language question. The system analyzes the question's intent and returns matching reports filtered by specified criteria such as date range, market, sector, and report type. This endpoint is ideal for quickly discovering pertinent financial documents and research materials without needing to know exact report titles or identifiers.

***

### Request

#### Headers

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | Your API key       |

#### Request Body Parameters

| Parameter             | Type           | Required | Description                                                     |
| --------------------- | -------------- | -------- | --------------------------------------------------------------- |
| `orbit_entity_id`     | string         | Yes      | Unique company identifier for precise query of specific reports |
| `start_time`          | string         | No       | Start date for the search, formatted as `YYYY-MM-DD`            |
| `end_time`            | string         | No       | End date for the search, formatted as `YYYY-MM-DD`              |
| `report_type_list`    | array\[string] | No       | List of report type IDs to filter results (see Appendix B)      |
| `limit`               | integer        | No       | Number of results per page (default: 20, max: 100)              |
| `offset`              | integer        | No       | Offset for pagination (default: `0`)                            |
| `option`              | dict           | No       | Optional extension.                                             |
| `option.us_form_type` | array\[string] | No       | Type of U.S. exchange.                                          |

> **Notes:**
>
> * Time range cannot exceed one year
> * ECM report types (`10122`, `10283`, `10284`, `10311`) are not supported by this endpoint
> * `report_type_list` supports both single type string or multiple types in array format
> * Report type options are detailed in **Appendix B: Metainfo**

#### Parameter US Form Type Reference:

{% file src="/files/Rl5BEpJtpbgoOdZ9pSZ1" %}

#### Example Request

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/company_report/report_search' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "orbit_entity_id": "1-5065300786",
  "start_time": "2024-06-01",
  "end_time": "2024-08-31",
  "report_type_list": ["10002"],
  "limit": 25,
  "offset": 0
}'
```

***

### Response

#### Response Fields

**Top-Level Fields**

| Field         | Type    | Description                                  |
| ------------- | ------- | -------------------------------------------- |
| `status_code` | integer | HTTP status code (200 for success)           |
| `data`        | object  | Container object holding report list results |
| `message`     | string  | Response status message                      |

**Data Object**

| Field        | Type   | Description                                |
| ------------ | ------ | ------------------------------------------ |
| `reports`    | array  | Array of report objects matching the query |
| `pagination` | object | Pagination information for result set      |

**Report Object (`data.reports[]`)**

| Field             | Type           | Description                                            |
| ----------------- | -------------- | ------------------------------------------------------ |
| `id`              | string         | Unique identifier for the report                       |
| `orbit_entity_id` | array\[string] | List of company identifiers associated with the report |
| `date`            | string         | Report publication date, formatted as `YYYY-MM-DD`     |
| `title`           | string         | Title of the report                                    |
| `lang`            | string         | Language code of the report (e.g., `en` for English)   |

**Pagination Object (`data.pagination`)**

| Field      | Type    | Description                                                   |
| ---------- | ------- | ------------------------------------------------------------- |
| `total`    | integer | Total number of reports matching the search criteria          |
| `limit`    | integer | Number of results returned per page                           |
| `offset`   | integer | Current offset position in the result set                     |
| `has_more` | boolean | Indicates whether more results are available (`true`/`false`) |

#### Example Response

```json
{
  "status_code": 200,
  "data": {
    "reports": [
      {
        "id": "f_6Yo8kDJdYK3qawXbLWVYmy",
        "orbit_entity_id": [
          "1-5065300786"
        ],
        "date": "2024-06-04",
        "title": "Annual report - English",
        "lang": "en"
      }
    ],
    "pagination": {
      "total": 1,
      "limit": 25,
      "offset": 0,
      "has_more": false
    }
  },
  "message": "Report search successful"
}
```

***

#### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# File Download

## Retrieve File List Information for Reports

#### Endpoint

```
POST /v1/company_report/file_list
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/reports/get_file_list_v1_company_report_file_list_post)

#### Description

Obtain different types of file information based on a list of report IDs and query options. The API supports three distinct query modes: `pdf` for document metadata retrieval, `extract` for text extraction results, and `embedding` for vector embedding data. This endpoint enables batch retrieval of file metadata and content across multiple reports simultaneously.

***

### Request

#### Headers

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | Your API key       |

#### Request Body Parameters

| Parameter   | Type           | Required | Description                                                                      |
| ----------- | -------------- | -------- | -------------------------------------------------------------------------------- |
| `report_id` | array\[string] | Yes      | List of report IDs to retrieve file information for                              |
| `option`    | array\[string] | Yes      | Query mode options: `pdf`, `extract`, or `embedding` (supports multiple options) |

**Query Mode Options**

| Option      | Description                                        |
| ----------- | -------------------------------------------------- |
| `pdf`       | Retrieves PDF document metadata and download links |
| `extract`   | Obtains text extraction results                    |
| `embedding` | Accesses vector embedding data                     |

#### Example Request

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/company_report/file_list' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "report_id": [
    "f_haBmMwT4WN7tXrt8rj9eA3"
  ],
  "option": [
    "pdf"
  ]
}'
```

***

### Response

#### Response Fields

**Top-Level Fields**

| Field         | Type    | Description                             |
| ------------- | ------- | --------------------------------------- |
| `status_code` | integer | HTTP status code (200 for success)      |
| `data`        | object  | Container object holding file list data |
| `message`     | string  | Response status message                 |

**Data Object**

| Field                 | Type   | Description                             |
| --------------------- | ------ | --------------------------------------- |
| `file_list_pdf`       | array  | Array of PDF file metadata objects      |
| `file_list_extract`   | array  | Array of text extraction result objects |
| `file_list_embedding` | array  | Array of vector embedding data objects  |
| `billing_info`        | object | Billing information for the API call    |

**PDF File Object (`data.file_list_pdf[]`)**

| Field            | Type    | Description                                            |
| ---------------- | ------- | ------------------------------------------------------ |
| `report_id`      | string  | Unique identifier for the report                       |
| `file_title`     | string  | Original title of the file                             |
| `file_title_en`  | string  | English translation of the file title                  |
| `clickable_link` | string  | Pre-signed download URL (valid for 7 days)             |
| `page_count`     | integer | Total number of pages in the PDF document              |
| `language`       | string  | Language code of the document (e.g., `en` for English) |

**Billing Info Object (`data.billing_info`)**

| Field           | Type    | Description                                    |
| --------------- | ------- | ---------------------------------------------- |
| `total_calls`   | integer | Total number of API calls made in this request |
| `total_options` | integer | Total number of query options processed        |
| `total_charge`  | integer | Total credits charged for this request         |

#### Example Response

```json
{
  "status_code": 200,
  "data": {
    "file_list_pdf": [
      {
        "report_id": "f_haBmMwT4WN7tXrt8rj9eA3",
        "file_title": "Quarterly Report",
        "file_title_en": "Quarterly Report",
        "clickable_link": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2025/08/08/edgar-data-1756701-000095017025105920-lnkb-20250630.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DUYIU3G434&Signature=XMVRHLuKS9Y45BPKjK7dhmlVcHA%3D&Expires=1761229440",
        "page_count": 60,
        "language": "en"
      },
      {
        "report_id": "f_haBmMwT4WN7tXrt8rj9eA3",
        "file_title": "Quarterly Report",
        "file_title_en": "Quarterly Report",
        "clickable_link": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2025/08/08/edgar-data-1756701-000095017025105920-lnkb-ex31_2.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DUYIU3G434&Signature=N07B28t4dQmMbR9Fs6gM%2Bl%2BBBPM%3D&Expires=1761229440",
        "page_count": 1,
        "language": "en"
      },
      {
        "report_id": "f_haBmMwT4WN7tXrt8rj9eA3",
        "file_title": "Quarterly Report",
        "file_title_en": "Quarterly Report",
        "clickable_link": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2025/08/08/edgar-data-1756701-000095017025105920-lnkb-ex32.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DUYIU3G434&Signature=eqpi%2Bj9ObTS%2BJE%2BSNUh8iOgr2zg%3D&Expires=1761229440",
        "page_count": 1,
        "language": "en"
      },
      {
        "report_id": "f_haBmMwT4WN7tXrt8rj9eA3",
        "file_title": "Quarterly Report",
        "file_title_en": "Quarterly Report",
        "clickable_link": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2025/08/08/edgar-data-1756701-000095017025105920-lnkb-ex3_3.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DUYIU3G434&Signature=sF5ivZ9mkzJH%2FmlzWA6UUtWpr%2B8%3D&Expires=1761229440",
        "page_count": 12,
        "language": "en"
      },
      {
        "report_id": "f_haBmMwT4WN7tXrt8rj9eA3",
        "file_title": "Quarterly Report",
        "file_title_en": "Quarterly Report",
        "clickable_link": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2025/08/08/edgar-data-1756701-000095017025105920-lnkb-ex31_1.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DUYIU3G434&Signature=NR3uP8vR8tT1A6GHwRgCV0%2FqgTQ%3D&Expires=1761229440",
        "page_count": 1,
        "language": "en"
      }
    ],
    "file_list_extract": [],
    "file_list_embadding": [],
    "billing_info": {
      "total_calls": 1,
      "total_options": 1,
      "total_charge": 1
    }
  },
  "message": "success"
}
```

> **Notes:**
>
> * All returned download links remain valid for **7 days** post-generation
> * Individual report failures are isolated and will not disrupt other report processing
> * Multiple query options can be specified simultaneously in a single request

***

#### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# PDF Parsing and Obtaining Result

Extract structured content from PDF documents with financial document optimization.

## Endpoints

```
POST v1/parser/pdf
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/extract/extract_pdf_v1_parser_pdf_post)

```
POST v1/parser/result
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/extract/extract_info_v1_parser_result_post)

## **Description**

These two APIs provide advanced PDF parsing capabilities specifically optimized for financial documents by two simple steps. Step 1 - extract a PDF file by just providing a public PDF URL to call API v1/parser/pdf; Step 2 - retrieve the parsing result by providing the PDF's unique ID which you have got from Step 1.

Our PDF parsing solution enables precise text extraction with layout fidelity, including table detection, financial statement recognition, and document structure preservation.

## Parameters

#### parser/pdf

| Parameter | Type   | Required | Description           |
| --------- | ------ | -------- | --------------------- |
| pdf\_url  | string | Yes      | Public PDF file's url |

#### parser/result

| Parameter | Type   | Required | Description               |
| --------- | ------ | -------- | ------------------------- |
| info\_id  | string | Yes      | Unique ID got from Step 1 |

## Examples

#### Request of Step 1

```
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/parser/pdf' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: YOUR_API-KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "pdf_url": "https://static.cninfo.com.cn/finalpage/2025-09-02/1224634496.PDF"
}'
```

#### Response of Step 1

```json
{
  "status_code": 200,
  "data": "1c670924-ca3a-3364-8777-78a04be3c36b",
  "message": "success"
}
```

#### Request of Step 2

```
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/parser/result' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: YOUR_API-KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "info_id": "1c670924-ca3a-3364-8777-78a04be3c36b"
}'
```

#### Response of Step 2

```
{
  "status_code": 200,
  "data": "https://orbit-tmp.s3.amazonaws.com/api/1c670924-ca3a-3364-8777-78a04be3c36b.zip?AWSAccessKeyId=AKIAZ2SDT5DUYIU3G434&Signature=sxwVdUiIOqfQC5ulSCtltdw1d2U%3D&Expires=1761139467",
  "message": "Success"
}
```

## Error Code

| Code | Description                                     |
| ---- | ----------------------------------------------- |
| 400  | Download of parameter attachment address failed |
| 400  | Insufficient user balance                       |
| 400  | Attachment size exceeds 500MB                   |
| 400  | PDF attachment exceeds 700 pages                |
| 401  | Unauthorized access. Invalid API key            |
| 500  | An error occurred while processing your request |
| 503  | PDF file is corrupted and failed to parse       |
| 504  | PDF parsing timeout                             |

#### Notes:

* All clickable links are valid for 7 days&#x20;
* The failure to process an individual report will not impact the processing of other reports
* The parsing process typically takes 1-10 minutes to generate the ZIP download link, determined by file size and the number of jobs in queue.
* The download link can only be successfully retrieved once using the unique ID generated in Step 1 ID, and will expire after 7 days

## **Example of ZIP file:**

We provide the original PDF file, API metadata and two different formats of the parsing results -  page level & block level within the ZIP file. If the original PDF contains images, we can also extract the images and store them in the images folder.

### Structure:

<figure><img src="/files/0JcWISI2bznVpaau3Ny8" alt=""><figcaption></figcaption></figure>

api\_metadata describes API version, file parsing start time and end time.

```
{
"version": "1.0.0",
"start_time": "2025-10-15T13:55:29.605198+00:00",
"end_time": "2025-10-15T13:56:10.297724+00:00"
}
```

### Page Level Document Sample

```
{"id": "p_uepCvuXe", "page": 1, "sentence": "<text blocks>"}
{"id": "p_apMbM49F", "page": 2, "sentence": "<text blocks>"}
{"id": "p_7MHhOdNN", "page": 3, "sentence": "<text blocks>"}
{"id": "p_cSSQYrRe", "page": 4, "sentence": "<text blocks>"}
```

### Page Level Document Data Dictionary

| Field Name | Type   | Description                             |
| ---------- | ------ | --------------------------------------- |
| id         | String | unique id of the text block in database |
| page       | String | page number in sequence                 |
| sentence   | String | text blocks                             |

### Block Level Document Sample

```
{"id": "l_XgLeH4iS", "page": 1, "seq_no": 1, "sentence": "<text blocks>", "type": "sentence", "text_location": {"location": [[32.5296, 811.296, 164.8296, 801.432]]}}
{"id": "l_D2o3ptsX", "page": 1, "seq_no": 2, "sentence": "<text blocks>", "type": "sentence", "text_location": {"location": [[31.067999999999998, 784.9872, 101.60640000000001, 775.4832]]}}
{"id": "l_XcKKlIqv", "page": 1, "seq_no": 3, "sentence": "<text blocks>", "type": "sentence", "text_location": {"location": [[158.9832, 750.996, 434.556, 705.6863999999999]]}}
{"id": "l_20yatCw6", "page": 1, "seq_no": 4, "sentence": "<text blocks>", "type": "sentence", "text_location": {"location": [[261.2448, 688.8744, 332.65439999999995, 675.72]]}}
```

### Block Level Document Data Dictionary

| Field Name     | Type   | Description                             |
| -------------- | ------ | --------------------------------------- |
| id             | String | unique id of the text block in database |
| page           | String | page number in sequence                 |
| seq\_no        | String | block sequence in a page                |
| sentence       | String | text blocks                             |
| type           | String | text, table, image                      |
| text\_location | String | coordinate of the block in the page     |


# Internet News

Search and retrieve news articles from Google News using keywords and date ranges, with structured results including titles and snippets.

### Endpoint

```
POST /v1/news/google_news
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/default/query_google_news_v1_news_google_news_post)

### Request

#### Headers

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | your-api-key       |

#### Request Body Parameters

| Parameter    | Type   | Required | Description                                                                              |
| ------------ | ------ | -------- | ---------------------------------------------------------------------------------------- |
| `keywords`   | string | Yes      | Comma-separated keywords to filter news articles (e.g., "revenue,growth,latest quarter") |
| `start_date` | string | Yes      | Start date for news search in `YYYY-MM-DD` format (e.g., "2024-12-01")                   |
| `end_date`   | string | Yes      | End date for news search in `YYYY-MM-DD` format (e.g., "2024-12-08")                     |
| `language`   | string | Yes      | ISO 639-1 language code for news content (default: "en")                                 |

#### Example Request

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/news/google_news' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: orbitfin_xxx' \
  -H 'Content-Type: application/json' \
  -d '{
  "start_date": "2025-05-13",
  "end_date": "2025-05-20",
  "keywords": "revenue,growth,latest quarter",
  "language": "en"
}'
```

### Response

#### Response Fields

**Top-Level Fields**

| Field         | Type        | Description                                |
| ------------- | ----------- | ------------------------------------------ |
| `status_code` | integer     | HTTP status code (200 for success)         |
| `data`        | array       | Array of news article objects              |
| `detail`      | string/null | Additional error details (null on success) |
| `message`     | string      | Response status message                    |

**News Article Object (`data[]`)**

| Field       | Type        | Description                                                     |
| ----------- | ----------- | --------------------------------------------------------------- |
| `date`      | string      | Publication date of the news article (format: "Month DD, YYYY") |
| `link`      | string      | Direct URL to the original news article                         |
| `title`     | string      | Headline or title of the news article                           |
| `source`    | string/null | News source or publisher name (null if unavailable)             |
| `snippet`   | string      | Brief excerpt or summary of the article content                 |
| `position`  | integer     | Ranking position in search results (1-based index)              |
| `thumbnail` | string      | URL to the article's thumbnail image                            |

#### Example Response

```json
{
  "status_code": 200,
  "data": [
    {
      "date": "May 20, 2025",
      "link": "https://ir.homedepot.com/news-releases/2025/05-20-2025-110127912",
      "title": "The Home Depot Announces First Quarter Fiscal 2025 Results; Reaffirms Fiscal 2025 Guidance",
      "source": "Home Depot Investor Relations",
      "snippet": "The Home Depot, the world's largest home improvement retailer, today reported sales of $39.9 billion for the first quarter of fiscal 2025, an increase of 9.4%...",
      "position": 1,
      "thumbnail": "https://ot-cdn.s3.us-west-2.amazonaws.com/google_news_history_chat/20250513_None_tnHZflkS.png"
    },
    {
      "date": "May 19, 2025",
      "link": "https://example.com/tech-earnings-report",
      "title": "Tech Sector Shows Strong Revenue Growth in Q1",
      "source": "Financial Times",
      "snippet": "Major technology companies reported robust revenue growth in the latest quarter, exceeding analyst expectations...",
      "position": 2,
      "thumbnail": "https://ot-cdn.s3.us-west-2.amazonaws.com/google_news_history_chat/20250513_None_xyz123.png"
    }
  ],
  "detail": null,
  "message": "success"
}
```

### Error Handling

All endpoints in this section follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Codes and Messages**.


# Chat with Internet News

Chat with Google News articles using natural language queries. Combines news retrieval with AI analysis to provide intelligent responses based on retrieved articles.

### Endpoint

```
POST /v1/news/google_news_chat
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/default/google_news_chat_answer_v1_news_google_news_chat_post)

### Request

#### Headers

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | your-api-key       |

#### Request Body Parameters

| Parameter        | Type   | Required | Description                                                                              |
| ---------------- | ------ | -------- | ---------------------------------------------------------------------------------------- |
| `keywords`       | string | Yes      | Comma-separated keywords to filter news articles (e.g., "revenue,growth,latest quarter") |
| `start_date`     | string | Yes      | Start date for news search in `YYYY-MM-DD` format (e.g., "2024-12-01")                   |
| `end_date`       | string | Yes      | End date for news search in `YYYY-MM-DD` format (e.g., "2024-12-08")                     |
| `language`       | string | Yes      | ISO 639-1 language code for news content (default: "en")                                 |
| `searchQuestion` | string | Yes      | Natural language question or prompt to analyze the retrieved news articles               |

#### Example Request

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/news/google_news_chat' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "start_date": "2025-05-13",
  "end_date": "2025-05-20",
  "searchQuestion": "Identify all Daimler Truck presentation appendices or supplementary slides titled '\''KPI annex'\'' or '\''reconciliation tables'\'' from investor relations documents dated between Q2 2024 and Q2 2025. Provide document titles and dates.",
  "keywords": "revenue,growth,latest quarter",
  "language": "en"
}'
```

### Response

#### Response Fields

**Top-Level Fields**

| Field         | Type        | Description                                                |
| ------------- | ----------- | ---------------------------------------------------------- |
| `status_code` | integer     | HTTP status code (200 for success)                         |
| `data`        | object      | Response object containing chat answer and source articles |
| `detail`      | string/null | Additional error details (null on success)                 |
| `message`     | string      | Response status message                                    |

**Data Object**

| Field     | Type   | Description                                                           |
| --------- | ------ | --------------------------------------------------------------------- |
| `answer`  | string | AI-generated response to your search question based on retrieved news |
| `sources` | array  | Array of news article objects used to generate the answer             |

**News Article Object (`sources[]`)**

| Field       | Type        | Description                                                     |
| ----------- | ----------- | --------------------------------------------------------------- |
| `date`      | string      | Publication date of the news article (format: "Month DD, YYYY") |
| `link`      | string      | Direct URL to the original news article                         |
| `title`     | string      | Headline or title of the news article                           |
| `source`    | string/null | News source or publisher name (null if unavailable)             |
| `snippet`   | string      | Brief excerpt or summary of the article content                 |
| `position`  | integer     | Ranking position in search results (1-based index)              |
| `thumbnail` | string      | URL to the article's thumbnail image                            |

#### Example Response

```json
{
  "status_code": 200,
  "data": {
    "answer": "Based on the retrieved news articles from May 13-20, 2025, I found the following relevant information about Daimler Truck investor relations documents:\n\nWhile the search results include various quarterly earnings reports, I did not find specific documents titled 'KPI annex' or 'reconciliation tables' for Daimler Truck in the specified timeframe. However, The Home Depot's Q1 2025 results (May 20, 2025) show strong revenue growth of 9.4%, which may be relevant to your broader market analysis.",
    "sources": [
      {
        "date": "May 20, 2025",
        "link": "https://ir.homedepot.com/news-releases/2025/05-20-2025-110127912",
        "title": "The Home Depot Announces First Quarter Fiscal 2025 Results; Reaffirms Fiscal 2025 Guidance",
        "source": "Home Depot Investor Relations",
        "snippet": "The Home Depot, the world's largest home improvement retailer, today reported sales of $39.9 billion for the first quarter of fiscal 2025, an increase of 9.4%...",
        "position": 1,
        "thumbnail": "https://ot-cdn.s3.us-west-2.amazonaws.com/google_news_history_chat/20250513_None_tnHZflkS.png"
      }
    ]
  },
  "detail": null,
  "message": "success"
}
```

### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# End of Day Price

Retrieve end of day prices from Google Finance

#### Endpoint

```
POST /v1/price/eod_price
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/default/eod_price_v1_price_eod_price_post)

#### Request

**Headers**

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | your-api-key       |

**Request Body Parameters**

| Parameter         | Type   | Required | Description                                                   |
| ----------------- | ------ | -------- | ------------------------------------------------------------- |
| `orbit_entity_id` | string | Yes      | Unique identifier of the company                              |
| `window`          | string | Yes      | Time window: `1D`, `5D`, `1M`, `6M`, `YTD`, `1Y`, `5Y`, `MAX` |

**Example Request**

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/price/eod_price' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "orbit_entity_id": "1-4295903294",
  "window": "1D"
}'
```

#### Response

**Response Fields**

**Top-Level Fields**

| Field         | Type        | Description                                |
| ------------- | ----------- | ------------------------------------------ |
| `status_code` | integer     | HTTP status code (200 for success)         |
| `data`        | object      | Response object containing price data      |
| `detail`      | string/null | Additional error details (null on success) |
| `message`     | string      | Response status message                    |

**Data Object**

| Field      | Type   | Description                                    |
| ---------- | ------ | ---------------------------------------------- |
| `title`    | string | Full company name                              |
| `stock`    | string | Stock ticker symbol                            |
| `exchange` | string | Stock exchange (e.g., NYSE, NASDAQ)            |
| `currency` | string | Currency code for price data (e.g., USD)       |
| `graph`    | array  | Array of price data points for the time window |

**Price Data Object (`graph[]`)**

| Field      | Type    | Description                                                                |
| ---------- | ------- | -------------------------------------------------------------------------- |
| `price`    | number  | Stock price at the given timestamp                                         |
| `currency` | string  | Currency code for the price                                                |
| `date`     | string  | Timestamp of the price data (format: "MMM DD YYYY, HH:MM AM/PM UTC±HH:MM") |
| `volume`   | integer | Trading volume at the given timestamp                                      |

**Example Response**

```json
{
  "status_code": 200,
  "data": {
    "title": "Air Products and Chemicals Inc",
    "stock": "APD",
    "exchange": "NYSE",
    "currency": "USD",
    "graph": [
      {
        "price": 259.91,
        "currency": "USD",
        "date": "Nov 28 2025, 09:30 AM UTC-05:00",
        "volume": 40
      }
    ]
  },
  "detail": null,
  "message": "Success"
}
```

#### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# PDF Parsing

Extract structured content from PDF documents with financial document optimization.

#### Endpoint

```
POST /parser/pdf
```

#### Description

This API provides advanced PDF parsing capabilities specifically optimized for financial documents. It extracts text with precise layout preservation, identifies tables, recognizes financial statements, and maintains document structure hierarchy.

#### Parameters

| Parameter        | Type   | Required | Description                                      |
| ---------------- | ------ | -------- | ------------------------------------------------ |
| file             | binary | Yes\*    | PDF file to parse (max: 50MB)                    |
| url              | string | Yes\*    | URL of PDF to parse (alternative to file upload) |
| parsing\_options | object | No       | Parsing configuration options                    |

\*Either `file` or `url` is required, not both.

**Parsing Options:**

json

```json
{
  "ocr_enabled": true,              // Enable OCR for scanned documents
  "table_extraction": true,         // Extract tables as structured data
  "preserve_layout": true,          // Maintain original layout structure
  "page_range": [1, 10],           // Specific pages to parse
  "financial_mode": true,          // Optimize for financial documents
  "extract_headers_footers": false, // Include headers/footers
  "detect_signatures": true,        // Identify signature blocks
  "language": "en"                 // Document language for OCR
}
```

#### Example Request (File Upload)

bash

```bash
curl -X POST "https://api.orbitfin.ai/v1/parser/pdf" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "file=@annual_report.pdf" \
  -F 'parsing_options={"financial_mode":true,"table_extraction":true}'
```

#### Example Request (URL)

bash

```bash
curl -X POST "https://api.orbitfin.ai/v1/parser/pdf" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/financial_report.pdf",
    "parsing_options": {
      "financial_mode": true,
      "table_extraction": true,
      "page_range": [1, 50]
    }
  }'
```

#### Response

json

```json
{
  "status": "success",
  "credits_used": 4.5,
  "data": {
    "document_info": {
      "title": "Annual Report 2024",
      "author": "Apple Inc.",
      "subject": "Financial Statements",
      "pages": 45,
      "creation_date": "2024-02-15T10:30:00Z",
      "file_size": 3456789,
      "is_scanned": false,
      "has_forms": false
    },
    "content": {
      "pages": [
        {
          "page_number": 1,
          "width": 612,
          "height": 792,
          "blocks": [
            {
              "block_id": "blk_001",
              "type": "heading",
              "level": 1,
              "text": "Annual Report 2024",
              "bbox": [50, 700, 550, 750],
              "font": {
                "name": "Helvetica-Bold",
                "size": 24
              },
              "confidence": 0.99
            },
            {
              "block_id": "blk_002",
              "type": "paragraph",
              "text": "This annual report contains forward-looking statements...",
              "bbox": [50, 600, 550, 680],
              "font": {
                "name": "Helvetica",
                "size": 11
              },
              "confidence": 0.98
            },
            {
              "block_id": "blk_003",
              "type": "table",
              "title": "Consolidated Statement of Income",
              "bbox": [50, 200, 550, 500],
              "confidence": 0.97,
              "table_data": {
                "headers": [
                  ["", "2024", "2023", "2022"],
                  ["(In millions, except per share data)", "", "", ""]
                ],
                "rows": [
                  ["Net Revenue", "$394,328", "$383,285", "$365,817"],
                  ["Cost of Sales", "214,137", "209,786", "201,471"],
                  ["Gross Profit", "180,191", "173,499", "164,346"],
                  ["Operating Expenses:", "", "", ""],
                  ["  Research and Development", "29,915", "26,251", "23,456"],
                  ["  Selling, General and Administrative", "25,094", "24,932", "22,876"],
                  ["Total Operating Expenses", "55,009", "51,183", "46,332"],
                  ["Operating Income", "125,182", "122,316", "118,014"]
                ],
                "detected_type": "financial_statement",
                "currency": "USD",
                "period_type": "annual"
              }
            }
          ]
        }
      ]
    },
    "extracted_entities": {
      "monetary_values": [
        {
          "value": 394328000000,
          "currency": "USD",
          "context": "Net Revenue 2024",
          "page": 1
        }
      ],
      "dates": [
        {
          "date": "2024-12-31",
          "context": "Fiscal Year End",
          "page": 1
        }
      ],
      "percentages": [
        {
          "value": 45.7,
          "context": "Gross Margin",
          "page": 2
        }
      ]
    },
    "document_structure": {
      "sections": [
        {
          "title": "Financial Highlights",
          "start_page": 1,
          "end_page": 3,
          "subsections": []
        },
        {
          "title": "Management Discussion and Analysis",
          "start_page": 4,
          "end_page": 25,
          "subsections": [
            {
              "title": "Overview",
              "start_page": 4,
              "end_page": 6
            }
          ]
        }
      ],
      "table_of_contents": [
        {
          "title": "Financial Highlights",
          "page": 1
        },
        {
          "title": "Letter to Shareholders", 
          "page": 3
        }
      ]
    },
    "quality_metrics": {
      "overall_confidence": 0.96,
      "ocr_required": false,
      "extraction_warnings": [
        "Page 45: Low quality scan detected"
      ]
    }
  }
}
```

#### Block Types

| Type         | Description                              |
| ------------ | ---------------------------------------- |
| heading      | Title or section header with level (1-6) |
| paragraph    | Standard text paragraph                  |
| table        | Structured table with rows and columns   |
| list         | Bulleted or numbered list                |
| image        | Image or chart (base64 encoded)          |
| footnote     | Footnote or endnote text                 |
| header       | Page header content                      |
| footer       | Page footer content                      |
| page\_number | Page numbering                           |
| signature    | Signature block                          |

#### Financial Mode Features

When `financial_mode` is enabled, the parser:

* Identifies standard financial statements (Income Statement, Balance Sheet, Cash Flow)
* Recognizes XBRL-like structures
* Extracts monetary values with currency detection
* Preserves table relationships and calculations
* Identifies fiscal periods and dates
* Detects auditor signatures and opinions

#### Error Handling

Additional error codes specific to PDF parsing:

| Code             | Description                                |
| ---------------- | ------------------------------------------ |
| FILE\_TOO\_LARGE | PDF exceeds 50MB limit                     |
| INVALID\_PDF     | File is corrupted or not a valid PDF       |
| PARSING\_TIMEOUT | Document too complex, parsing timed out    |
| OCR\_FAILED      | OCR processing failed for scanned document |
| ENCRYPTED\_PDF   | PDF is password protected                  |


# Metainfo - Report Type Classification

{% tabs %}
{% tab title="Sign" %} <mark style="color:green;">`GET`</mark> `/v1/constant/report_type_list`
{% endtab %}

{% tab title="Example request" %}

```
GET {{baseUrl}}/{{version}}/instruments/get_report_type_list
Content-Type: application/json
X-API-KEY: <your-api-key>
```

{% endtab %}
{% endtabs %}

Get all Orbitfin report type list.

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |
| X-API-KEY    | `<your-api-key>`   |

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "status_code": 200,
  "data": {
    "version": "0.2.6",
    "report_type_list": [
      {
        "lv3_id": "10000",
        "lv3_name": "Copy of Newspaper Publication",
        "lv2_id": "1001",
        "lv2_name": "Announcement Publication",
        "lv1_id": "101",
        "lv1_name": "Market and Trading Information"
      },
      {
        "lv3_id": "10001",
        "lv3_name": "Press Release",
        "lv2_id": "1001",
        "lv2_name": "Announcement Publication",
        "lv1_id": "101",
        "lv1_name": "Market and Trading Information"
      },
      ...
    ]
  },
  "detail": null,
  "message": "success"
}
```

{% endtab %}

{% tab title="400" %}

```json
{
  "error": "Invalid request"
}
```

{% endtab %}
{% endtabs %}


# Deriving conclusions through inquiry - Chat AI

#### Endpoint

```
POST /v1/ai_chat/infer_conclusion_from_question
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/AI%20Chat/inferConclusionFromQuestion_v1_ai_chat_infer_conclusion_from_question_post)

#### Description

This API provides the ability to chat with AI by analyzing the language of user's question, breaking it down into multiple sub-questions, and summarizing relevant information. It aims to assist users in quickly obtaining key insights and conclusions related to their inquiries.

***

### Request

#### Headers

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | Your API key       |

#### Request Body Parameters

| Parameter          | Type           | Required | Description                                          |
| ------------------ | -------------- | -------- | ---------------------------------------------------- |
| `question`         | string         | Yes      | The question posed by the user                       |
| `report_type_list` | array\[string] | No       | List of report types to narrow down search results   |
| `start_date`       | string         | No       | Start date for the search, formatted as `YYYY-MM-DD` |
| `end_date`         | string         | No       | End date for the search, formatted as `YYYY-MM-DD`   |
| `market`           | array\[string] | No       | List of markets to filter search results             |
| `sector_list`      | array\[string] | No       | List of sectors to narrow down search results        |
| `exchange_list`    | array\[string] | No       | List of exchanges to filter search results           |
| `country_list`     | array\[string] | No       | List of countries to narrow down search results      |

> **Note:** Options for `market`, `exchange_list`, `country_list`, and `sector_list` are included in **Appendix B: Metainfo**.

#### Example Request

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/ai_chat/infer_conclusion_from_question' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "question": "Please help me analyze the performance of Apple stock over the past year",
  "report_type_list": [],
  "start_date": "2024-10-24",
  "end_date": "2025-10-24",
  "market": [],
  "sector_list": [],
  "exchange_list": [],
  "country_list": []
}'
```

***

### Response

#### Response Fields

**Top-Level Fields**

| Field         | Type    | Description                            |
| ------------- | ------- | -------------------------------------- |
| `status_code` | integer | HTTP status code (200 for success)     |
| `data`        | object  | Container object holding response data |
| `message`     | string  | Response status message                |

**Data Object**

| Field        | Type   | Description                                 |
| ------------ | ------ | ------------------------------------------- |
| `table_data` | array  | Array of report objects matching the query  |
| `total_data` | object | Summary statistics about the search results |

**Report Object (`data.table_data[]`)**

| Field                 | Type           | Description                                                   |
| --------------------- | -------------- | ------------------------------------------------------------- |
| `report_id`           | string         | Unique identifier for the report                              |
| `file_hash`           | string         | Hash value of the report file                                 |
| `report_title`        | string         | Title of the report                                           |
| `snippet`             | string         | Relevant text excerpt from the report                         |
| `report_type_id_list` | array\[string] | List of report type IDs                                       |
| `attachment_id`       | string         | Unique identifier for the attachment                          |
| `page`                | integer        | Page number where the relevant information is found           |
| `perm_id_list`        | array\[string] | List of permanent entity identifiers                          |
| `report_url`          | string         | S3 URL path to the report file                                |
| `reported_at`         | string         | Date when the report was published, formatted as `YYYY-MM-DD` |
| `score`               | integer        | Relevance score (0-100) indicating match quality              |

**Total Data Object (`data.total_data`)**

| Field                 | Type    | Description                                              |
| --------------------- | ------- | -------------------------------------------------------- |
| `total_company`       | integer | Total number of unique companies in results              |
| `total_document`      | integer | Total number of documents found                          |
| `total_document_type` | integer | Total number of unique document types                    |
| `dataset`             | string  | Dataset identifier                                       |
| `max_score`           | integer | Highest relevance score in results                       |
| `min_score`           | integer | Lowest relevance score in results                        |
| `latest_report_date`  | string  | Most recent report date, formatted as `YYYY-MM-DD`       |
| `oldest_report_date`  | string  | Oldest report date in results, formatted as `YYYY-MM-DD` |

#### Example Response

```json
{
  "status_code": 200,
  "data": {
    "table_data": [
      {
        "report_id": "f_0fVY5cTHqSbJnLrWy7FkfT",
        "file_hash": "P3UM8gXH",
        "report_title": "Annual Report",
        "snippet": "Company Stock Performance\n\nThe following...",
        "report_type_id_list": [
          "10002"
        ],
        "attachment_id": "f_0fVY5cTHqSbJnLrWy7FkfT__P3UM8gXH",
        "page": 23,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://filing-reports/reports-data/stock_us/2025/10/31/edgar-data-320193-000032019325000079-aapl-20250927.htm.pdf",
        "reported_at": "2025-10-31",
        "score": 100
      },
      {
        "report_id": "o_dutEbR7Dr2dNWOEW4QDhzp",
        "file_hash": "QZVWPAbc",
        "report_title": "Apple 2025 Environmental Progress Report",
        "snippet": "Sustainalytics\n\nAnnualReview\n\nApple Inc....",
        "report_type_id_list": [
          "10076"
        ],
        "attachment_id": "o_dutEbR7Dr2dNWOEW4QDhzp__QZVWPAbc",
        "page": 93,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://official-reports/data-system/3993BC1C138109A805CDE0B1F9442531.pdf",
        "reported_at": "2025-07-31",
        "score": 70
      }
    ],
    "total_data": {
      "total_company": 1,
      "total_document": 33,
      "total_document_type": 8,
      "dataset": "0+",
      "max_score": 100,
      "min_score": 30,
      "latest_report_date": "2025-11-14",
      "oldest_report_date": "2025-06-10"
    }
  },
  "message": "success"
}
```

***

### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# Get Report List by Question

#### Endpoint

```
POST /v1/ai_chat/get_report_list_by_question_and_related_info
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/AI%20Chat/GetReportListByQuestionAndRelatedInfo_v1_ai_chat_get_report_list_by_question_and_related_info_post)

***

#### Description

This API enables users to retrieve a curated list of relevant reports by submitting a natural language question. The system analyzes the question's intent and returns matching reports filtered by specified criteria such as date range, market, sector, and report type. This endpoint is ideal for quickly discovering pertinent financial documents and research materials without needing to know exact report titles or identifiers.

### Request

#### Headers

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | Your API key       |

#### Request Body Parameters

| Parameter          | Type           | Required | Description                                          |
| ------------------ | -------------- | -------- | ---------------------------------------------------- |
| `keywords`         | string         | Yes      | The question posed by the user                       |
| `report_type_list` | array\[string] | No       | List of report types to narrow down search results   |
| `start_date`       | string         | No       | Start date for the search, formatted as `YYYY-MM-DD` |
| `end_date`         | string         | No       | End date for the search, formatted as `YYYY-MM-DD`   |
| `market`           | array\[string] | No       | List of markets to filter search results             |
| `sector_list`      | array\[string] | No       | List of sectors to narrow down search results        |
| `exchange_list`    | array\[string] | No       | List of exchanges to filter search results           |
| `country_list`     | array\[string] | No       | List of countries to narrow down search results      |

> **Note:** Options for `market`, `exchange_list`, `country_list`, and `sector_list` are included in **Appendix B: Metainfo**.

#### Example Request

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/ai_chat/get_report_list_by_question_and_related_info' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "keywords": "Please help me analyze the performance of Apple stock over the past year",
  "report_type_list": [],
  "start_date": "2024-10-24",
  "end_date": "2025-10-24",
  "market": [],
  "sector_list": [],
  "exchange_list": [],
  "country_list": []
}'
```

***

### Response

#### Response Fields

**Top-Level Fields**

| Field         | Type    | Description                            |
| ------------- | ------- | -------------------------------------- |
| `status_code` | integer | HTTP status code (200 for success)     |
| `data`        | object  | Container object holding response data |
| `message`     | string  | Response status message                |

**Data Object**

| Field        | Type   | Description                                 |
| ------------ | ------ | ------------------------------------------- |
| `table_data` | array  | Array of report objects matching the query  |
| `total_data` | object | Summary statistics about the search results |

**Report Object (`data.table_data[]`)**

| Field                 | Type           | Description                                                   |
| --------------------- | -------------- | ------------------------------------------------------------- |
| `report_id`           | string         | Unique identifier for the report                              |
| `file_hash`           | string         | Hash value of the report file                                 |
| `report_title`        | string         | Title of the report                                           |
| `snippet`             | string         | Relevant text excerpt from the report                         |
| `report_type_id_list` | array\[string] | List of report type IDs                                       |
| `attachment_id`       | string         | Unique identifier for the attachment                          |
| `page`                | integer        | Page number where the relevant information is found           |
| `perm_id_list`        | array\[string] | List of permanent entity identifiers                          |
| `report_url`          | string         | S3 URL path to the report file                                |
| `reported_at`         | string         | Date when the report was published, formatted as `YYYY-MM-DD` |
| `score`               | integer        | Relevance score (0-100) indicating match quality              |

**Total Data Object (`data.total_data`)**

| Field                 | Type    | Description                                              |
| --------------------- | ------- | -------------------------------------------------------- |
| `total_company`       | integer | Total number of unique companies in results              |
| `total_document`      | integer | Total number of documents found                          |
| `total_document_type` | integer | Total number of unique document types                    |
| `dataset`             | string  | Dataset identifier                                       |
| `max_score`           | integer | Highest relevance score in results                       |
| `min_score`           | integer | Lowest relevance score in results                        |
| `latest_report_date`  | string  | Most recent report date, formatted as `YYYY-MM-DD`       |
| `oldest_report_date`  | string  | Oldest report date in results, formatted as `YYYY-MM-DD` |

#### Example Response

```json
{
  "status_code": 200,
  "data": {
    "table_data": [
      {
        "report_id": "f_0fVY5cTHqSbJnLrWy7FkfT",
        "file_hash": "P3UM8gXH",
        "report_title": "Annual Report",
        "snippet": "Company Stock Performance\n\nThe following...",
        "report_type_id_list": [
          "10002"
        ],
        "attachment_id": "f_0fVY5cTHqSbJnLrWy7FkfT__P3UM8gXH",
        "page": 23,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://filing-reports/reports-data/stock_us/2025/10/31/edgar-data-320193-000032019325000079-aapl-20250927.htm.pdf",
        "reported_at": "2025-10-31",
        "score": 100
      },
      {
        "report_id": "o_dutEbR7Dr2dNWOEW4QDhzp",
        "file_hash": "QZVWPAbc",
        "report_title": "Apple 2025 Environmental Progress Report",
        "snippet": "Sustainalytics\n\nAnnualReview\n\nApple Inc....",
        "report_type_id_list": [
          "10076"
        ],
        "attachment_id": "o_dutEbR7Dr2dNWOEW4QDhzp__QZVWPAbc",
        "page": 93,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://official-reports/data-system/3993BC1C138109A805CDE0B1F9442531.pdf",
        "reported_at": "2025-07-31",
        "score": 70
      }
    ],
    "total_data": {
      "total_company": 1,
      "total_document": 33,
      "total_document_type": 8,
      "dataset": "0+",
      "max_score": 100,
      "min_score": 30,
      "latest_report_date": "2025-11-14",
      "oldest_report_date": "2025-06-10"
    }
  },
  "message": "success"
}
```

***

### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# Deriving conclusions through inquiry - Chat AI

#### Endpoint

```
POST /v1/ai_chat/infer_conclusion_from_question
```

[**Try it out in API Playground →**](https://api.orbitfin.ai/docs#/default/infer_conclusion_from_question_v1_ai_chat_infer_conclusion_from_question_post)

#### Description

This API provides the ability to chat with AI by analyzing the language of user's question, breaking it down into multiple sub-questions, and summarizing relevant information. It aims to assist users in quickly obtaining key insights and conclusions related to their inquiries.

***

### Request

#### Headers

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | Your API key       |

#### Request Body Parameters

| Parameter          | Type           | Required | Description                                          |
| ------------------ | -------------- | -------- | ---------------------------------------------------- |
| `question`         | string         | Yes      | The question posed by the user                       |
| `report_type_list` | array\[string] | No       | List of report types to narrow down search results   |
| `start_date`       | string         | No       | Start date for the search, formatted as `YYYY-MM-DD` |
| `end_date`         | string         | No       | End date for the search, formatted as `YYYY-MM-DD`   |
| `market`           | array\[string] | No       | List of markets to filter search results             |
| `sector_list`      | array\[string] | No       | List of sectors to narrow down search results        |
| `exchange_list`    | array\[string] | No       | List of exchanges to filter search results           |
| `country_list`     | array\[string] | No       | List of countries to narrow down search results      |

> **Note:** Options for `market`, `exchange_list`, `country_list`, and `sector_list` are included in **Appendix B: Metainfo**.

> **Note:** Options for `market`, `exchange_list`, `country_list`, and `sector_list` are included in **Appendix B: Metainfo**.

#### Example Request

```bash
curl -X 'POST' \
  'https://api.orbitfin.ai/v1/ai_chat/infer_conclusion_from_question' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "question": "Please help me analyze the performance of Apple stock over the past year",
  "report_type_list": [],
  "start_date": "2025-06-03",
  "end_date": "2025-12-03",
  "market": [],
  "sector_list": [],
  "exchange_list": [],
  "country_list": []
}'
```

***

### Response

#### Response Fields

**Top-Level Fields**

| Field         | Type    | Description                                  |
| ------------- | ------- | -------------------------------------------- |
| `status_code` | integer | HTTP status code (200 for success)           |
| `data`        | object  | Container object holding AI analysis results |
| `message`     | string  | Response status message                      |

**Data Object**

| Field                       | Type   | Description                                                         |
| --------------------------- | ------ | ------------------------------------------------------------------- |
| `sub_question_list_results` | array  | Array of sub-questions and their corresponding AI-generated answers |
| `reports_list`              | array  | List of relevant reports referenced in the analysis                 |
| `summary`                   | string | Comprehensive summary synthesizing all sub-question answers         |

**Sub-Question Result Object (`data.sub_question_list_results[]`)**

| Field          | Type   | Description                                           |
| -------------- | ------ | ----------------------------------------------------- |
| `sub_question` | string | A decomposed sub-question derived from the main query |
| `sub_answer`   | string | AI-generated answer to the specific sub-question      |

**Report Object (`data.reports_list[]`)**

| Field                 | Type           | Description                                                   |
| --------------------- | -------------- | ------------------------------------------------------------- |
| `report_id`           | string         | Unique identifier for the report                              |
| `file_hash`           | string         | Hash value of the report file                                 |
| `es_score`            | float          | Elasticsearch relevance score                                 |
| `report_title`        | string         | Title of the report                                           |
| `snippet`             | string         | Relevant text excerpt from the report                         |
| `report_type_id_list` | array\[string] | List of report type IDs                                       |
| `attachment_id`       | string         | Unique identifier for the attachment                          |
| `page`                | integer        | Page number where the relevant information is found           |
| `perm_id_list`        | array\[string] | List of permanent entity identifiers                          |
| `report_url`          | string         | S3 URL path to the report file                                |
| `reported_at`         | string         | Date when the report was published, formatted as `YYYY-MM-DD` |

#### Example Response

```json
{
  "status_code": 200,
  "data": {
    "sub_question_list_results": [
      {
        "sub_question": "Analyze the trend of Apple stock price over the past year, including the highest and lowest prices recorded within this period.",
        "sub_answer": "Over the past year, Apple Inc.'s stock price exhibited a consistent upward trend. Beginning at a baseline of $100 in September 2020, the stock price increased to $132 by September 2021, slightly rising to $136 in September 2022. It experienced further growth to $155 in September 2023, followed by a significant jump to $208 in September 2024. The stock price reached its highest point at $234 by September 2025. \n\nThe lowest price within this one-year period, from September 2024 to September 2025, was $155 in September 2023, and the highest was $234 in September 2025.\n\nThis overall upward trend highlights strong performance over the year. However, it is noted that past stock price performance is not necessarily indicative of future stock price performance ([Annual Report](f_0fVY5cTHqSbJnLrWy7FkfT))."
      },
      {
        "sub_question": "Summarize Apple's financial performance over the past four quarters, focusing on revenue, earnings, and profit growth or decline.",
        "sub_answer": "Over the past four quarters of fiscal year 2025, Apple demonstrated strong financial performance with consistent growth in revenue, earnings, and profitability.\n\n- In Q3 2025 (June quarter), Apple reported revenue of $94.0 billion, marking a 10% increase year over year. Diluted earnings per share (EPS) were $1.57, up 12% year over year. The growth was driven by double-digit increases across iPhone, Mac, and services revenues, with the iPhone revenue growing 13% year over year. This quarter achieved revenue records in more than two dozen countries and regions, including the U.S., Canada, Latin America, Western Europe, the Middle East, India, and South Asia ([Current Report, Unscheduled Material Events](f_09JQhSDWutgd3DWj6sQbQx), [Q3 2025 Earnings Call Transcript](sa_6O3ExoEseeODVkBGVCbMcr)).\n\n- In Q4 2025 (September quarter), Apple reported quarterly revenue of $102.5 billion, an 8% year-over-year increase, setting a September quarter revenue record. Diluted EPS was $1.85, up 13% year over year on an adjusted basis. Services revenue reached an all-time high of $28.8 billion, growing 15% year over year. The company experienced revenue records in numerous markets, including emerging markets and India. The fiscal year 2025 total revenue reached $416 billion, an all-time high, accompanied by double-digit EPS growth. Apple’s installed base of active devices hit a new all-time high across all product categories and geographic segments. The board declared a cash dividend of $0.26 per share for this quarter ([Apple reports fourth quarter results](qr_8sWEib4FZMXvaTgXbnKsoj), [Q4 2025 Earnings Call Transcript](qr_77u99VPJluztILscvnEpuf)).\n\nOverall, Apple showed consistent revenue and profit growth across these quarters, with particularly strong performances in iPhone sales and services, contributing to record revenues and earnings per share growth for both quarters reported. The company also maintained strong customer loyalty and satisfaction, expanding its installed active device base worldwide ([Current Report, Unscheduled Material Events](f_09JQhSDWutgd3DWj6sQbQx), [Apple reports fourth quarter results](qr_8sWEib4FZMXvaTgXbnKsoj)).\n\n### Key Figures Summary:\n- Q3 2025 Revenue: $94.0 billion (+10% YoY)\n- Q3 2025 EPS: $1.57 (+12% YoY)\n- Q4 2025 Revenue: $102.5 billion (+8% YoY)\n- Q4 2025 EPS: $1.85 (+13% YoY adjusted)\n- Fiscal Year 2025 Total Revenue: $416 billion (all-time record)\n- Services Q4 revenue: $28.8 billion (+15% YoY)\n- Dividend per share in Q3 and Q4: $0.26 ([Current Report, Unscheduled Material Events](f_09JQhSDWutgd3DWj6sQbQx), [Apple reports fourth quarter results](qr_8sWEib4FZMXvaTgXbnKsoj)).\n\nThese data points underscore Apple's robust growth trajectory and sustained market leadership over the past year.\n\n([Apple reports fourth quarter results](qr_8sWEib4FZMXvaTgXbnKsoj), [Current Report, Unscheduled Material Events](f_09JQhSDWutgd3DWj6sQbQx), [Q4 2025 Earnings Call Transcript](qr_77u99VPJluztILscvnEpuf), [Q3 2025 Earnings Call Transcript](sa_6O3ExoEseeODVkBGVCbMcr))"
      },
      {
        "sub_question": "Identify major market and industry factors, including significant news events, that affected Apple stock performance during the past year.",
        "sub_answer": "The major market and industry factors that could have materially affected Apple's stock performance during the past year include:\n\n1. **Macroeconomic and Industry Risks**:\n   - Apple's operations and performance are significantly influenced by global and regional economic conditions. Since a majority of Apple's sales and supplier facilities are international, adverse macroeconomic factors such as slow growth or recession, high unemployment, inflation, tighter credit, higher interest rates, and currency fluctuations can materially and adversely affect demand for Apple's products and services.\n   - Changes in fiscal and monetary policy, financial market volatility, declines in income or asset values, and other economic factors can impact consumer confidence and spending, subsequently influencing Apple's sales.\n   - Economic instability can also affect Apple's suppliers, manufacturers, logistics providers, distributors, cellular network carriers, channel partners, and developers, potentially leading to financial instability, insolvency, or inability to finance business operations.\n   - Credit and collectibility risks on trade receivables, failure of derivative counterparties and financial institutions, limited ability to issue new debt, reduced liquidity, and declines in the fair value of financial instruments may also negatively impact the company ([Annual Report, f_0fVY5cTHqSbJnLrWy7FkfT]).\n\n2. **Macroeconomic Conditions Impact**:\n   - Inflation, interest rates, and currency fluctuations have directly and indirectly impacted Apple's results of operations and financial condition, and these factors may continue to do so materially in the future ([Apple Inc. Form 10-Q For the Fiscal Quarter Ended June 28, 2025, qr_9qug25J5XpRjYgGjrOPqnv], [Quarterly Report, f_84AIgoDiopFoJTnaPzxfYA]).\n\n3. **Business Seasonality and Product Introductions**:\n   - Apple experiences higher net sales in its first fiscal quarter partially due to seasonal holiday demand.\n   - New product and service introductions significantly impact net sales, cost of sales, and operating expenses. The timing of these introductions influences sales, especially as inventories of older products decline when newer products are launched.\n   - Notably, during the third quarter of 2025, Apple announced new software products including iOS 26, macOS Tahoe 26, iPadOS 26, watchOS 26, visionOS 26, and tvOS 26, which are likely to have influenced sales and operational performance ([Apple Inc. Form 10-Q For the Fiscal Quarter Ended June 28, 2025, qr_9qug25J5XpRjYgGjrOPqnv], [Quarterly Report, f_84AIgoDiopFoJTnaPzxfYA], [Annual Report, f_0fVY5cTHqSbJnLrWy7FkfT]).\n\n4. **Licensing and Intellectual Property Risks**:\n   - Apple relies not only on its own intellectual property but also on licenses from third parties for certain technologies. While historically obtaining such licenses on reasonable terms, the future inability to obtain or renew these licenses could adversely affect the company ([Annual Report, f_0fVY5cTHqSbJnLrWy7FkfT]).\n\n5. **Human Capital**:\n   - As of September 27, 2025, Apple had approximately 166,000 full-time equivalent employees. The company invests significantly in attracting, developing, and retaining talent, fostering a collaborative culture, and supporting employees through various benefits and development programs. Workforce stability and culture can influence operational performance and innovation potential ([Annual Report, f_0fVY5cTHqSbJnLrWy7FkfT]).\n\nIn summary, Apple's stock performance over the past year was influenced by broad macroeconomic factors such as inflation, currency fluctuations, and fiscal policies, the seasonal and product-launch-driven nature of its sales, ongoing reliance on third-party licenses, and its workforce management strategies. Significant product announcements in mid-2025, including major OS updates, likely also had impact on the company's market perception and financial results.\n\n([Annual Report, f_0fVY5cTHqSbJnLrWy7FkfT], [Apple Inc. Form 10-Q For the Fiscal Quarter Ended June 28, 2025, qr_9qug25J5XpRjYgGjrOPqnv], [Quarterly Report, f_84AIgoDiopFoJTnaPzxfYA])"
      }
    ],
    "reports_list": [
      {
        "report_id": "f_0fVY5cTHqSbJnLrWy7FkfT",
        "file_hash": "P3UM8gXH",
        "es_score": 4.8403215,
        "report_title": "Annual Report",
        "snippet": "Company Stock Performance\n\nThe following...",
        "report_type_id_list": [
          "10002"
        ],
        "attachment_id": "f_0fVY5cTHqSbJnLrWy7FkfT__P3UM8gXH",
        "page": 23,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://filing-reports/reports-data/stock_us/2025/10/31/edgar-data-320193-000032019325000079-aapl-20250927.htm.pdf",
        "reported_at": "2025-10-31"
      },
      {
        "report_id": "qr_77u99VPJluztILscvnEpuf",
        "file_hash": "CxYV7ggS",
        "es_score": 4.815691,
        "report_title": "Q4 2025 Earnings Call Transcript - ECM",
        "snippet": "like Pluribus and to catch returning fav...",
        "report_type_id_list": [
          "10122"
        ],
        "attachment_id": "qr_77u99VPJluztILscvnEpuf__CxYV7ggS",
        "page": 4,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://official-reports/data-manual/earning-call-calendar/1761876466_63f971c88aad1d48b9b9fcf3dc5009b7.mpeg.wav.pdf",
        "reported_at": "2025-10-30"
      },
      {
        "report_id": "qr_8sWEib4FZMXvaTgXbnKsoj",
        "file_hash": "Yfdjp56V",
        "es_score": 4.8792605,
        "report_title": "Apple reports fourth quarter results",
        "snippet": "Apple reports fourth quarter results\n\nSe...",
        "report_type_id_list": [
          "10085"
        ],
        "attachment_id": "qr_8sWEib4FZMXvaTgXbnKsoj__Yfdjp56V",
        "page": 1,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://official-reports/data-manual/earning-call-calendar/1761876467_57737d977c11c857db6a811ff7d10db3.pdf",
        "reported_at": "2025-10-30"
      },
      {
        "report_id": "f_09JQhSDWutgd3DWj6sQbQx",
        "file_hash": "FIcyKnpb",
        "es_score": 4.867973,
        "report_title": "Current Report, Unscheduled Material Events",
        "snippet": "Apple reports third quarter results\n\nJun...",
        "report_type_id_list": [
          "10050"
        ],
        "attachment_id": "f_09JQhSDWutgd3DWj6sQbQx__FIcyKnpb",
        "page": 1,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://filing-reports/reports-data/stock_us/2025/07/31/edgar-data-320193-000032019325000071-a8-kex991q3202506282025.htm.pdf",
        "reported_at": "2025-07-31"
      },
      {
        "report_id": "sa_6O3ExoEseeODVkBGVCbMcr",
        "file_hash": "AMatP2xq",
        "es_score": 4.857461,
        "report_title": "Apple Inc. (AAPL) Q3 2025 Earnings Call Transcript",
        "snippet": "Apple Inc. (AAPL) Q3 2025 Earnings Call ...",
        "report_type_id_list": [
          "10122"
        ],
        "attachment_id": "sa_6O3ExoEseeODVkBGVCbMcr__AMatP2xq",
        "page": 1,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://filing-reports/reports-data/seekingalpha/earnings_audios/sa_6O3ExoEseeODVkBGVCbMcr.mp3.pdf",
        "reported_at": "2025-08-01"
      },
      {
        "report_id": "qr_9qug25J5XpRjYgGjrOPqnv",
        "file_hash": "rxf9UOqi",
        "es_score": 4.8348866,
        "report_title": "Apple Inc. Form 10-Q For the Fiscal Quarter Ended June 28, 2025",
        "snippet": "Item 2. Management’s Discussion and Anal...",
        "report_type_id_list": [
          "10085"
        ],
        "attachment_id": "qr_9qug25J5XpRjYgGjrOPqnv__rxf9UOqi",
        "page": 16,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://official-reports/data-manual/earning-call-calendar/1757121182_E8B3FF7610E7E8D3F66A5310C06FB6C9.pdf",
        "reported_at": "2025-07-31"
      },
      {
        "report_id": "f_84AIgoDiopFoJTnaPzxfYA",
        "file_hash": "jfNE7rOj",
        "es_score": 4.8329053,
        "report_title": "Quarterly Report",
        "snippet": "tem 2.    Management’s Discussion and An...",
        "report_type_id_list": [
          "10085"
        ],
        "attachment_id": "f_84AIgoDiopFoJTnaPzxfYA__jfNE7rOj",
        "page": 15,
        "perm_id_list": [
          "1-4295905573"
        ],
        "report_url": "s3://filing-reports/reports-data/stock_us/2025/08/01/edgar-data-320193-000032019325000073-aapl-20250628.htm.pdf",
        "reported_at": "2025-08-01"
      }
    ],
    "summary": "# Apple Inc. Stock Performance Analysis: Past Year Review (Sept 2024 - Sept 2025)\n\n---\n\n## Executive Summary\n\nOver the past year, Apple Inc. (AAPL) exhibited a strong and consistent upward trend in its stock price, increasing from $155 in September 2023 to a high of $234 by September 2025. This represents a gain of approximately 51%. Apple's financial performance underpinning this price appreciation was robust, with fiscal year 2025 total revenue reaching an all-time high of $416 billion, accompanied by double-digit growth in earnings per share (EPS). Quarterly revenue and EPS grew steadily, with Q3 2025 revenue at $94.0 billion (+10% YoY) and EPS at $1.57 (+12% YoY), and Q4 2025 revenue reaching $102.5 billion (+8% YoY) with an EPS of $1.85 (+13% YoY adjusted). Services revenue hit a record $28.8 billion in Q4, growing 15% year over year. Key factors influencing stock performance included macroeconomic conditions (inflation, interest rates, currency fluctuations), seasonal sales patterns, new product launches (notably major OS updates in 2025), licensing/IP risks, and strategic human capital investments. Despite external risks, Apple’s expanding installed device base and strong customer loyalty supported its market leadership and stock appreciation over the analyzed period ([Annual Report](f_0fVY5cTHqSbJnLrWy7FkfT), [Q3 2025 Earnings Call Transcript](sa_6O3ExoEseeODVkBGVCbMcr), [Apple reports fourth quarter results](qr_8sWEib4FZMXvaTgXbnKsoj)).\n\n---\n\n## 1. Stock Price Trend Analysis (Sept 2024 - Sept 2025)\n\n| Date           | Stock Price (USD) | Notes                             |\n|----------------|-------------------|----------------------------------|\n| September 2023 | $155 (Lowest)      | Start of review period baseline  |\n| September 2024 | $208               | Significant increase from 2023   |\n| September 2025 | $234 (Highest)     | All-time high recorded            |\n\n### Observations:\n- Over the one-year period, Apple's stock price increased by approximately 51% from its lowest point of $155 to $234.\n- The price gains illustrate a sustained investor confidence in Apple's growth and operational strategy.\n- The steady climb from $155 to $208 and further to $234 suggests positive market sentiment supported by financial performance and product innovation ([Annual Report](f_0fVY5cTHqSbJnLrWy7FkfT)).\n\n---\n\n## 2. Financial Performance Review: Past Four Quarters FY 2025\n\nApple’s financial results show consistent revenue and profit growth across key metrics in the last two reported quarters of FY 2025.\n\n| Quarter | Revenue (Billion USD) | YoY Growth (%) | EPS (Diluted) (USD) | EPS Growth (%) | Notes                                            |\n|---------|-----------------------|----------------|--------------------|----------------|--------------------------------------------------|\n| Q3 2025 | $94.0                 | +10%           | $1.57              | +12%           | Revenue records in 24+ countries and regions; iPhone revenue +13% YoY |\n| Q4 2025 | $102.5                | +8%            | $1.85 (adjusted)   | +13%           | Record Q4 revenue; services revenue $28.8B (+15%) |\n| FY 2025 | $416.0 (Annual Total) | All-time record| -                  | Double-digit   | Installed active device base reached all-time high |\n\n### Detailed Highlights:\n- The company set quarterly revenue records in multiple global markets including emerging regions.\n- Services segment growth stood out with a 15% increase in Q4 2025, contributing to $28.8 billion in revenue.\n- Dividend payments of $0.26 per share were declared for both Q3 and Q4, consistent with Apple's shareholder return policies.\n- The operating efficiency and diversification across iPhone, Mac, and services have ensured stable profitability and EPS growth ([Current Report, Unscheduled Material Events](f_09JQhSDWutgd3DWj6sQbQx), [Apple reports fourth quarter results](qr_8sWEib4FZMXvaTgXbnKsoj)).\n\n---\n\n## 3. Market and Industry Impact Factors on Stock Performance\n\nSeveral macro and industry-specific factors influenced Apple’s stock throughout the year:\n\n| Factor                      | Impact Description                                                                                                    |\n|-----------------------------|----------------------------------------------------------------------------------------------------------------------|\n| **Macroeconomic Risks**     | Inflation, interest rate hikes, currency fluctuations, recession fears, tighter credit, and economic instability affecting consumer demand and supply chains. |\n| **Fiscal and Monetary Policy** | Changes in policies impacted consumer confidence and financial markets, indirectly influencing sales and valuations.     |\n| **Seasonality & Product Launches** | Seasonal holiday demand boosted Q1 sales. Introduction of new OS versions (iOS 26, macOS Tahoe 26, iPadOS 26, watchOS 26, visionOS 26, tvOS 26) in Q3 2025 strategically fueled sales and engagement. |\n| **Licensing & IP Risks**    | Reliance on third-party technology licenses poses potential risks in innovation and product development continuity.   |\n| **Human Capital**           | Workforce strength of 166,000 full-time employees helps sustain innovation, operational performance, and competitive advantage. Apple is actively investing in talent management and corporate culture. |\n\n### Analysis:\n- Despite external economic pressures, Apple's diversified revenue streams and strong product ecosystem mitigated risks.\n- Product and software innovation serve as crucial growth drivers, aligning with new releases in 2025 that likely bolstered stock sentiment.\n- Human capital stability is an asset supporting execution amid a challenging global environment ([Annual Report](f_0fVY5cTHqSbJnLrWy7FkfT), [Apple Inc. Form 10-Q For the Fiscal Quarter Ended June 28, 2025](qr_9qug25J5XpRjYgGjrOPqnv)).\n\n---\n\n## Summary\n\nApple Inc.’s stock demonstrated robust appreciation over the past year, rising from $155 to $234 per share, buoyed by strong revenue growth, record-setting earnings, and expanding services revenue within fiscal year 2025. The company’s ability to navigate macroeconomic headwinds, maintain strong product innovation—including key OS updates—and sustain a high-quality workforce contributed to its positive performance. With revenues hitting $416 billion for FY 2025 and continuous growth in EPS, Apple’s financial metrics justify its stock price gains. However, investors should remain cognizant of risks posed by global economic fluctuations, policy changes, and dependency on third-party technology licenses. The consistent dividend payouts further underpin investor returns alongside capital appreciation. Overall, Apple’s fundamental strength, market leadership, and innovation pipeline position the stock well for continued long-term value creation, although past performance is not a guarantee of future results ([Annual Report](f_0fVY5cTHqSbJnLrWy7FkfT), [Q3 2025 Earnings Call Transcript](sa_6O3ExoEseeODVkBGVCbMcr), [Apple reports fourth quarter results](qr_8sWEib4FZMXvaTgXbnKsoj)).\n\n---\n\n### References\n- [Annual Report](f_0fVY5cTHqSbJnLrWy7FkfT)\n- [Current Report, Unscheduled Material Events](f_09JQhSDWutgd3DWj6sQbQx)\n- [Q3 2025 Earnings Call Transcript](sa_6O3ExoEseeODVkBGVCbMcr)\n- [Apple reports fourth quarter results](qr_8sWEib4FZMXvaTgXbnKsoj)\n- [Q4 2025 Earnings Call Transcript](qr_77u99VPJluztILscvnEpuf)\n- [Apple Inc. Form 10-Q For the Fiscal Quarter Ended June 28, 2025](qr_9qug25J5XpRjYgGjrOPqnv)\n- [Quarterly Report](f_84AIgoDiopFoJTnaPzxfYA)"
  },
  "message": "success"
}
```

### Error Handling

All endpoints follow the standard error response format. When an error occurs, the API returns an appropriate HTTP status code along with a structured error response.

For detailed information about error codes, response formats, and troubleshooting guidelines, please refer to **Appendix A: Error Code Reference**.


# Agent Builder

Agent Builder exposes two public endpoints for fetching the current user's Agent Builder configurations and their produced artifacts.

`GET /v1/agent_builder/list` — List all active Agent Builders owned by the current user. `POST /v1/agent_builder/outputs` — Fetch artifacts (structured data or HTML report) for a given `agent_id`.

Authentication\*\*: Both endpoints require user authentication. The user is identified from the request context; do **not** pass `user_id` in the request. Rate limit\*\*: `2 req/s` per endpoint.

### 1. List Agent Builders

`GET /v1/agent_builder/list`

Returns all **active** Agent Builders owned by the current user, ordered by creation time (latest first).

Request

No request parameters. The user identity is resolved from the authentication context.

````
```http
GET /v1/agent_builder/list
Authorization: Bearer <token>
```

### Response

On success, `data` is an array of Agent Builders. Each item contains:

| Field | Type | Description |
|---|---|---|
| `id` | string | Agent Builder ID. Use this value as `agent_id` when calling the `outputs` endpoint. |
| `name` | string | Builder display name. |
| `description` | string \| null | Builder description. |
| `field_mapping` | object | Field-extraction schema: group → field → metadata (label, type, description, etc.). Extracted values are **not** included here; fetch them via the `outputs` endpoint. |
| `created_at` | datetime | Builder creation time. |
| `company_list` | object[] | Companies bound to this builder. Each item: `{orbit_entity_id, name}`. Empty array when no company is configured. |
| `subscriptions` | object[] | Active subscriptions attached to this builder (see table below). Empty array when no active subscription exists. |

`subscriptions[]` item fields:

| Field | Type | Description |
|---|---|---|
| `ag_sub_id` | string | Subscription ID. |
| `agent_category` | string | `AgentBuilder-Data` or `AgentBuilder-Report`. |
| `subscription_name` | string | Subscription display name. |
| `schedule_cron_expression` | string | Cron expression that triggers the subscription. |

### Errors

| Status | Message | Description |
|---|---|---|
| `404` | Agent builder info not found | The current user has no active Agent Builder. |

### Example
{
  "data": [
    {
      "id": "ab_01HXXXX...",
      "name": "Quarterly Earnings Extractor",
      "description": "Extract key financial metrics from 10-Q filings.",
      "field_mapping": {
        "financials": {
          "revenue": { "label": "Revenue", "type": "number", "description": "Total revenue (USD)" },
          "net_income": { "label": "Net Income", "type": "number", "description": "Net income (USD)" }
        }
      },
      "created_at": "2026-04-12T08:31:22Z",
      "company_list": [
        { "orbit_entity_id": "OE_0001", "name": "Apple Inc." },
        { "orbit_entity_id": "OE_0002", "name": "Microsoft Corp." }
      ],
      "subscriptions": [
        {
          "ag_sub_id": "sub_01HYYYY...",
          "agent_category": "AgentBuilder-Data",
          "subscription_name": "Daily 10-Q sweep",
          "schedule_cron_expression": "0 6 * * *"
        }
      ]
    }
  ]
}
````

### **2. Get Agent Builder Outputs**

`POST /v1/agent_builder/outputs`

Returns artifacts produced by a specific Agent Builder, ordered by `publish_date` (latest first). **Pagination is mandatory** — every call must explicitly specify `limit` and `offset`.

````
Request

```http
POST /v1/agent_builder/outputs
Content-Type: application/json
Authorization: Bearer <token>
```

Request body:

| Field | Type | Required | Description |
|---|---|---|---|
| `agent_id` | string | yes | Agent Builder ID, obtained from the `list` endpoint. |
| `agent_type` | string | yes | `data` returns extracted structured data; `report` returns the HTML report URL. |
| `limit` | integer | **yes** | Maximum number of artifacts to return, range `1–50`. No implicit default. |
| `offset` | integer | **yes** | Pagination offset, `>= 0`. Pass `0` for the first page. |
| `orbit_entity_id_list` | string[] | no | Optional company filter. Effective only when `agent_type=data`; returns artifacts whose `orbit_entity_id` is in this list. Ignored when `agent_type=report`. |

> ⚠️ Every value in `orbit_entity_id_list` must originate from the `company_list` of the same builder returned by the `list` endpoint. Arbitrary external IDs are not allowed.

### Response

On success, `data` is an array of artifacts. The field set depends on `agent_type`.

**Common fields**:

| Field | Type | Description |
|---|---|---|
| `id` | string | Artifact ID. |
| `publish_date` | date | Publish date of the artifact. |
| `created_at` | datetime | Row creation time. |
| `company_list` | object[] | Companies associated with this artifact: `{orbit_entity_id, name}`. `data` artifacts typically contain a single company; `report` artifacts may contain multiple. |

**When `agent_type = data`**:

| Field | Type | Description |
|---|---|---|
| `extract_json` | object | Structured data extracted by the agent according to the builder's field schema. |

**When `agent_type = report`**:

| Field | Type | Description |
|---|---|---|
| `url` | string | Publicly accessible URL of the HTML report. |

### Errors

| Status | Message | Description |
|---|---|---|
| `404` | Agent builder meta not found | No artifact matches the given `agent_id` + `agent_type`. |
| `422` | Validation error | `limit` out of range, `offset < 0`, invalid `agent_type`, etc. |

### Example — `data`

```json
// Request
{
  "agent_id": "ab_01HXXXX...",
  "agent_type": "data",
  "limit": 20,
  "offset": 0,
  "orbit_entity_id_list": ["OE_0001"]
}
```

```json
// Response
{
  "data": [
    {
      "id": "art_01HZZZZ...",
      "publish_date": "2026-05-01",
      "created_at": "2026-05-01T03:11:45Z",
      "company_list": [
        { "orbit_entity_id": "OE_0001", "name": "Apple Inc." }
      ],
      "extract_json": {
        "financials": {
          "revenue": 124300000000,
          "net_income": 33000000000
        }
      }
    }
  ]
}
```

### Example — `report`

```json
// Request
{
  "agent_id": "ab_01HXXXX...",
  "agent_type": "report",
  "limit": 10,
  "offset": 0
}
```

```json
// Response
{
  "data": [
    {
      "id": "art_01HAAAAA...",
      "publish_date": "2026-05-10",
      "created_at": "2026-05-10T09:00:12Z",
      "company_list": [
        { "orbit_entity_id": "OE_0001", "name": "Apple Inc." },
        { "orbit_entity_id": "OE_0002", "name": "Microsoft Corp." }
      ],
      "url": "https://oassets.orbitfin.ai/reports/2026-05-10/ab_01HXXXX.html"
    }
  ]
}
````

**Typical Workflow**

1. Call `GET /v1/agent_builder/list` to retrieve the current user's Agent Builders. Pick the target `agent_id` and collect the available `orbit_entity_id` values from `company_list`.
2. Decide which artifact form to fetch:
   * `agent_type=data` — Retrieve structured extraction results; optionally filter by `orbit_entity_id_list`.
   * `agent_type=report` — Retrieve the HTML report URL.
3. Call `POST /v1/agent_builder/outputs` with mandatory `limit` (1–50) and `offset` (≥0); increment `offset` to paginate.

***

**Rate Limit & Pagination**

* Per-endpoint rate limit: `2 req/s`.
* Pagination parameters on `outputs` are **mandatory** and have no default; increment `offset` for subsequent pages.


# Appendix A: Error Code Reference

This appendix provides all error codes, HTTP status codes, and detailed descriptions that the API may return.

### 4xx Client Errors

#### 400 Bad Request

| Error Code                           | Description                                                                                    |
| ------------------------------------ | ---------------------------------------------------------------------------------------------- |
| `CLIENT_ID_INVALID`                  | Invalid or unknown client identifier.                                                          |
| `REDIRECT_URI_INVALID`               | The redirect URI does not match any of the pre-registered URIs for this client.                |
| `BALANCE_INVALID`                    | Your account balance is insufficient to complete this transaction. Please add funds and retry. |
| `PAYMENT_EXCEPTION`                  | We were unable to process your payment. Please verify your payment method and try again.       |
| `INSUFFICIENT_USER_BALANCE`          | Insufficient user balance.                                                                     |
| `ATTACHMENT_SIZE_EXCEEDED_500MB`     | The attached file size exceeds the 500 MB limit.                                               |
| `PDF_ATTACHMENT_PAGES_EXCEEDED`      | The PDF file exceeds the maximum allowed limit of 700 pages.                                   |
| `REPEAT_RECORDS`                     | A record with identical data already exists. Duplicate submission is not allowed.              |
| `INCORRECT_ID`                       | The provided identifier format is incorrect or malformed.                                      |
| `ATTACHMENT_ADDRESS_DOWNLOAD_FAILED` | Failed to download the file from the provided attachment address.                              |

#### 401 Unauthorized

| Error Code                  | Description                                                                       |
| --------------------------- | --------------------------------------------------------------------------------- |
| `API_KEY_INVALID`           | Invalid or malformed API key provided.                                            |
| `TOKEN_INVALID`             | The access token provided is invalid, expired, or revoked.                        |
| `MISSING_AUTH_INFO`         | Required authentication information is missing. Please include valid credentials. |
| `USERNAME_PASSWORD_INVALID` | Authentication failed due to incorrect username or password.                      |
| `REFRESH_TOKEN_INVALID`     | The refresh token provided is invalid or has expired.                             |

#### 404 Not Found

| Error Code       | Description                                          |
| ---------------- | ---------------------------------------------------- |
| `USER_NOT_FOUND` | No user account found with the provided information. |

***

### 5xx Server Errors

#### 500 Internal Server Error

| Error Code               | Description                                                                                               |
| ------------------------ | --------------------------------------------------------------------------------------------------------- |
| `INTERNAL_SERVER_ERROR`  | An unexpected internal server error occurred. Our engineering team has been notified.                     |
| `COMPANY_NOT_FOUND`      | No official filings found for the company \[Company name].                                                |
| `COMPANY_LIMIT_EXCEEDED` | The request contains too many companies. Please limit your query to a maximum of 5 companies per request. |
| `QUERY_TOO_BROAD`        | Your search query is too broad. Please provide a more specific research question or criteria.             |
| `TIMEOUT`                | The server is taking longer than expected to process your request. Please try again later.                |
| `NO_DATA_IN_PERIOD`      | No filings were found for \[Company] within the past 12 months.                                           |
| `TASKID_NOT_FOUND`       | No task or associated data found for the ID \[Task ID].                                                   |
| `PROCESSING_ERROR`       | An error occurred while processing your request.                                                          |

#### 503 Service Unavailable

| Error Code                   | Description                                                                  |
| ---------------------------- | ---------------------------------------------------------------------------- |
| `PDF_CORRUPTED_PARSE_FAILED` | The provided PDF file appears to be corrupted and cannot be parsed.          |
| `PDF_PARSE_FAILED`           | The server failed to parse the PDF file due to an internal processing error. |

#### 504 Gateway Timeout

| Error Code          | Description                                                                                                  |
| ------------------- | ------------------------------------------------------------------------------------------------------------ |
| `PDF_PARSE_TIMEOUT` | The request to parse the PDF file has timed out. Please try again with a smaller file or different document. |

***

### Error Response Format Example

```json
{
  "error": {
    "code": "API_KEY_INVALID",
    "status": 401,
    "message": "Invalid or malformed API key provided."
  }
}
```

***

### Handling Recommendations

* **4xx Errors**: Check request parameters, authentication credentials, and permission configurations
* **5xx Errors**: Retry later; contact technical support if the issue persists
* **Timeout Errors**: Consider reducing request payload or processing in batches


# Appendix B Metainfo

This section provides reference endpoints for retrieving metadata and constant values used throughout the API

## Market:

market: \[\
{ value: "0-1000000000", label: "Less than 1B" },\
{ value: "1000000000-100000000000", label: "1B - 100B" },\
{ value: "100000000000-500000000000", label: "100B - 500B" },\
{ value: "500000000000-9999999999999", label: "More than 500B" },\
]

***

## **Exchange:**

{% file src="/files/5s9oqT6F2UKQGggasq6K" %}

***

## **Country:**

{% file src="/files/u0y1s8qLhzXRJUZ5Z4wf" %}

***

## Sector:

{% file src="/files/2QO9jmQbqvzsu1NjuLEE" %}

***

## Report Type Classification

### Endpoint

```
GET /v1/constant/report_type_list
```

### Description

Retrieves the complete hierarchical classification system for report types used in Orbitfin. The classification uses a three-level taxonomy (Level 1 → Level 2 → Level 3) to categorize various corporate reports, filings, and announcements.

### Request

#### Headers

| Name           | Type   | Required | Description        |
| -------------- | ------ | -------- | ------------------ |
| `Content-Type` | string | Yes      | `application/json` |
| `X-API-KEY`    | string | Yes      | api-key            |

#### Example Request

```bash
curl -X 'GET' \
  'https://api.orbitfin.ai/v1/constant/report_type_list' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: <your-api-key>'
```

### Response

#### Response Fields

**Top-Level Fields**

| Field         | Type        | Description                                                        |
| ------------- | ----------- | ------------------------------------------------------------------ |
| `status_code` | integer     | HTTP status code (200 for success)                                 |
| `data`        | object      | Container object with version info and report type classifications |
| `detail`      | string/null | Additional error details (null on success)                         |
| `message`     | string      | Response status message                                            |

**Data Object**

| Field              | Type   | Description                                                   |
| ------------------ | ------ | ------------------------------------------------------------- |
| `version`          | string | Version number of the report type classification system       |
| `report_type_list` | array  | Array of report type objects with hierarchical classification |

**Report Type Object (`data.report_type_list[]`)**

| Field      | Type   | Description                                         |
| ---------- | ------ | --------------------------------------------------- |
| `lv3_id`   | string | Level 3 (most specific) report type identifier      |
| `lv3_name` | string | Level 3 report type name (specific report category) |
| `lv2_id`   | string | Level 2 (intermediate) category identifier          |
| `lv2_name` | string | Level 2 category name (report subcategory)          |
| `lv1_id`   | string | Level 1 (top-level) category identifier             |
| `lv1_name` | string | Level 1 category name (broad report classification) |

#### Example Response

```json
{
  "status_code": 200,
  "data": {
    "version": "0.2.6",
    "report_type_list": [
      {
        "lv3_id": "10000",
        "lv3_name": "Copy of Newspaper Publication",
        "lv2_id": "1001",
        "lv2_name": "Announcement Publication",
        "lv1_id": "101",
        "lv1_name": "Market and Trading Information"
      },
      {
        "lv3_id": "10001",
        "lv3_name": "Press Release",
        "lv2_id": "1001",
        "lv2_name": "Announcement Publication",
        "lv1_id": "101",
        "lv1_name": "Market and Trading Information"
      }
    ]
  },
  "detail": null,
  "message": "success"
}
```

#### Classification Hierarchy

The report types follow a three-level hierarchical structure:

```
Level 1 (lv1): Broad Category
  └── Level 2 (lv2): Subcategory
      └── Level 3 (lv3): Specific Report Type
```

**Example:**

```
Market and Trading Information (101)
  └── Announcement Publication (1001)
      └── Copy of Newspaper Publication (10000)
      └── Press Release (10001)
```


# 1. What is MCP?

#### Introduction to Model Context Protocol

Model Context Protocol (MCP) is an open protocol that enables seamless integration between AI assistants like Claude and external data sources, tools, and services. Think of MCP as a standardized way for AI models to access and interact with specialized capabilities beyond their built-in knowledge.

#### Key Concepts

**Traditional AI Limitations:**

* AI models have knowledge cutoffs
* Cannot access real-time or proprietary data
* Limited to general knowledge training data
* Cannot perform specialized calculations or access specific databases

**MCP Solutions:**

* **Dynamic Data Access**: Connect to live databases and APIs
* **Specialized Tools**: Add domain-specific capabilities
* **Contextual Intelligence**: Provide relevant context from your systems
* **Secure Integration**: Maintain data privacy and access controls

#### How MCP Works

When you ask LLM (Claude, ChatGPT, Microsoft Copilot, etc) a question, MCP can:

1. **Detect** when specialized knowledge or tools are needed
2. **Activate** the appropriate MCP integration
3. **Query** external systems securely
4. **Process** the information with AI intelligence
5. **Deliver** comprehensive, accurate responses

#### Benefits for Financial Services

* **Real Data**: Access actual company filings instead of general knowledge
* **Accuracy**: Source information from official documents
* **Efficiency**: Automate complex research workflows
* **Compliance**: Maintain audit trails and source attribution
* **Scalability**: Process multiple queries simultaneously

#### Orbit Public Company Research MCP

Our MCP specifically connects LLM to Orbit's comprehensive database of official company filings, enabling:

* Natural language queries about public companies
* Analysis based on official filings and regulatory documents
* Multi-company comparisons with actual data
* Source-attributed responses for compliance


# 2. Orbit Public Company Research MCP

The Orbit Public Company Research MCP is a specialized tool designed to provide investment-grade research insights by querying official company filings. Unlike generic internet searches or AI chatbots, this MCP exclusively sources information from verified official documents, ensuring accuracy and compliance for investment decision-making.

#### Key Features

* Natural language query processing for investment research
* Exclusive access to official filing documents (10-K, 10-Q, 8-K, etc.)
* Multi-step analytical workflow with sub-question generation
* Source citation for all responses
* Enterprise-grade reliability

#### Target Users

* Hedge fund analysts
* Portfolio managers
* Investment research teams
* Financial advisors
* Institutional investors

#### Current Limitations

* **Data Freshness**: Updated on a daily basis
* **Historical Coverage**: 12-month rolling period of historical data
* **Company Limit**: 1-5 companies per query for optimal performance
* **Response Time**: 30-120 seconds depending on query complexity
* **Maximum Sub-questions**: 10 per main query


# 2.1. Activation Criteria

The MCP activates when ALL of the following conditions are met:

#### 3.1 Query Intent Classification

* **Investment Research Intent**: Query must relate to:
  * Financial analysis
  * Company performance
  * Competitive analysis
  * Risk assessment
  * Regulatory compliance
  * ESG factors

#### 3.2 Company Identification

* **Company Count**: 1-5 identifiable public companies
* **Identification Methods**:
  * Company name (exact or fuzzy match)
  * Ticker symbol
  * ISIN, CIK, or other identifiers
* **Validation**: Companies must exist in official filings database

#### 3.3 Query Complexity

* **Suitable Complexity**: Questions that benefit from document analysis
* **Excluded Queries**:
  * Simple factual lookups (e.g., "What is Apple's ticker?")
  * Real-time data requests (e.g., "Current stock price")
  * Overly broad analysis (e.g., "Analyze all tech companies")

#### 3.4 Language Requirements

* **Supported Languages**: Language: See Appendix A “Language Description”
* **Character Limit**: Maximum 500 characters per query


# 2.2. Available Tools

The Orbit MCP provides two core tools that work together to process your investment research queries:

***

### Tool 1: analyze\_query\_intent

**Purpose:** Analyzes your research question and extracts structured data from company filings.

**What it does:**

**Step 1: Language Detection**

* Automatically detects the language of your query
* Supports 69 languages (see supported language list)
* Validates that your query is clear and actionable

**Step 2: Company Identification**

* Identifies all companies mentioned in your query
* Maps company names to official identifiers
* Verifies companies are available in our database
* **Limit:** Maximum 5 companies per query

**Step 3: Query Breakdown**

* Breaks down your main question into 3-10 focused sub-questions
* Covers multiple analytical angles, such as:
  * Financial performance metrics
  * Year-over-year growth trends
  * Competitive positioning
  * Risk factors and challenges
  * Business segment analysis

**Step 4: Data Retrieval**

* Searches official SEC filings for each sub-question
* Extracts relevant facts, figures, and insights
* Includes source references for all data points

***

### Tool 2: synthesize\_research\_report

**Purpose:** Combines all findings into a comprehensive, easy-to-read research report.

**What it includes:**

* **Executive Summary** - Key takeaways at a glance
* **Detailed Analysis** - In-depth findings with supporting data
* **Data Tables** - Structured metrics and comparisons
* **Source Citations** - Full references to original filings
* **Limitations** - Any caveats or data gaps

***

### How It Works

```
Your Query → analyze_query_intent → synthesize_research_report → Final Report
```

1. Submit your research question
2. `analyze_query_intent` processes and researches your query
3. `synthesize_research_report` generates your final report
4. Review the comprehensive analysis with citations


# 2.3. Data Sources

#### Primary Knowledge Base: Official Filings

* **Coverage**: 50,000+ global public companies
* **Document Types**:
  * Annual Reports (10-K, 20-F)
  * Quarterly Reports (10-Q)
  * Current Reports (8-K)
  * Proxy Statements
  * Registration Statements
  * Industry-specific regulatory filings

#### Data Characteristics

* **Update Frequency**: Daily updates
* **Historical Depth**: 12-month rolling period
* **Data Quality**:
  * 99%+ parsing accuracy
  * Table extraction with structure preservation
  * Financial statement standardization
  * Cross-document entity linking

#### Exclusions

* Broker research reports
* News articles
* Social media content
* Unofficial sources
* Third-party analysis


# 2.4. Setup Guidance

#### Prerequisites

Before setting up the Orbit MCP, ensure you have:

1. **Active LLM chatbot with MCP support**: Your AI assistant (Claude, or other compatible LLM platforms) must have MCP capabilities enabled
2. **Orbit Insight subscription**: Active subscription to Orbit Insight platform with MCP access included

***

#### MCP Server URL

Use the following URL when configuring your MCP client:

<pre><code><strong>https://mcp.orbitfin.ai/server/mcp
</strong></code></pre>

This is the endpoint your AI assistant will connect to for accessing Orbit's financial research tools.

***

#### Authentication

**OAuth (Recommended)**

Orbit MCP uses **OAuth 2.0** for secure authentication with AI assistants like Claude Desktop, GitHub Copilot, and other MCP-compatible clients.

**How It Works**

1. **Configure the Server**\
   Add Orbit MCP connection URL to your AI client's configuration file.
2. **Automatic Login Redirect**\
   On first use, you'll be redirected to the Orbit authentication page in your browser.
3. **Enter Credentials**\
   Log in with your Orbit Insight account (email and password).
4. **Automatic Token Management**\
   After successful login:
   * Orbit generates a secure bearer token
   * Your client automatically stores and manages the token
   * You're redirected back to your AI assistant

***

#### API Key

Orbit MCP supports API Key authentication as a simpler alternative to OAuth.

**Usage**

Add to request header:

```bash
X-API-Key: <your_orbit_api_key>
```

**Use Cases**

* Local tools/scripts
* Automation workflows
* Development/testing

**Example**

```bash
curl -X POST https://mcp.orbitfin.ai/server/mcp \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your_orbit_api_key>" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "example_tool",
      "arguments": {}
    }
  }'
```

**Security**

⚠️ Keep your API Key confidential. Never commit to public repos or expose in client apps.

***

**Step 1: Manage Connectors**

Go to <https://claude.ai/settings/connectors> and click on "Organization connectors" on the top right to manage your Claude Connectors.

**Note**: If you are part of an organization, you may need your administrators to set up the connector before you can use it.

**Step 2: Add Custom Connector**

Click on "Add custom connector" and add the Orbit MCP server details:

* **Server URL**: `https://mcp.orbitfin.ai/server/mcp`
* **Integration Name**: "Orbit Research" (or your preferred name)

**Step 3: Enable Orbit MCP**

Go to **New Chat** in Claude and click **Connect** in the **Search and Tools** menu.

**Step 4: Login at Orbit**&#x20;

When connecting to the Orbit MCP server, Claude will automatically redirect you to the Orbit MCP Login Page. Simply enter your registered Orbit Insight email address and password on this authentication page.

Upon successful login verification, you'll be redirected back to Claude with full authentication established for the Orbit MCP connection.

**Step 5: Verify Enabled Tools**

Back in Claude/ChatGPT, you can verify if all Orbit MCP tools are correctly available:

The following tools should be visible:

* analyze\_query\_intent: understand question, identify companies mentioned in questions, breakdown into sub questions.
* synthesize\_research\_report: generate final answers and return with references.

***

#### Testing the Integration

Once setup is complete, test with these progressive queries:

1. **Basic Test**:

   ```
   "What is Apple's total revenue for the most recent quarter?"
   ```

   Expected: Single data point from latest 10-Q
2. **Comparison Test**:

   ```
   "Compare Microsoft and Google's operating margins"
   ```

   Expected: Side-by-side comparison with source citations
3. **Complex Analysis**:

   ```
   "Analyze Tesla's cash flow trends and capital efficiency over the past year"
   ```

   Expected: Multi-step analysis with tables and trends

***

#### Setup on Microsoft Copilot

{% embed url="<https://app.supademo.com/demo/cmhd03s852a3qfatiju4r2ryc?utm_source=link>" %}

#### Troubleshooting Common Issues

| Issue                      | Possible Cause                   | Solution                                                                    |
| -------------------------- | -------------------------------- | --------------------------------------------------------------------------- |
| "Authentication failed"    | Invalid credentials              | Verify Orbit Insight account is active and credentials are correct          |
| "Connector not available"  | Organization restrictions        | Contact your IT administrator to enable MCP connectors                      |
| "OAuth redirect failed"    | Browser blocking popups          | Allow popups from [mcp.orbitfin.ai](http://mcp.orbitfin.ai/)                |
| "Token expired" error      | Bearer token older than 24 hours | Re-authenticate or generate new token                                       |
| "Tools not showing"        | Incomplete setup                 | Disconnect and reconnect the MCP integration                                |
| "Server URL not reachable" | Network restrictions             | Verify firewall allows access to [mcp.orbitfin.ai](http://mcp.orbitfin.ai/) |
| "Rate limit exceeded"      | Too many requests                | Wait 60 seconds; check your subscription tier limits                        |
| "Company not found"        | Company not in database          | Verify company is publicly traded with recent filings                       |

#### **Setup on Semantic Kernel**

SDK Demo For Python

```
import asyncio

from semantic_kernel.kernel import Kernel
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.mcp import MCPStreamableHttpPlugin
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion


TASK = "What are the news on Nvidia?"
api_key = "your-open-ai-key"
x_api_key = "your-orbit-x-api-key"

async def main() -> None:
    kernel = Kernel()

    chat_service = OpenAIChatCompletion(
            service_id="openai",
            api_key=api_key,
            ai_model_id="gpt-5-mini",
        )
    kernel.add_service(chat_service)

    async with MCPStreamableHttpPlugin(
        name="orbit_mcp",
        description="OrbitFin MCP server",
        url="https://mcp.orbitfin.ai/server/mcp",
        headers={
            "X-API-Key": x_api_key,
            "Content-Type": "application/json",
            "User-Agent": "SemanticKernel-MCP/1.0",
        },
    ) as mcp_plugin:
        kernel.add_plugin(mcp_plugin)

        agent = ChatCompletionAgent(
            service=chat_service,
            kernel=kernel,
            name="OrbitFin_MCP_Agent",
            instructions="""You are a helpful financial research agent that can use MCP tools to analyze queries and synthesize research reports."""
        )

        try:
            print(f"# User: '{TASK}'\n")
            print("# Agent Response:")
            print("-" * 80)

            async for response in agent.invoke_stream(messages=TASK):
                print(f"{response.content}", end="", flush=True)

            print("\n" + "-" * 80)
            print("\n# Task completed successfully!")

        except Exception as e:
            print(f"\n\n# Error occurred: {e}")
            import traceback
            traceback.print_exc()


if __name__ == "__main__":
    asyncio.run(main())

```


# 2.5.  MCP Tools

### Overview

This document describes two MCP (Model Context Protocol) tools designed for intelligent query analysis and research report synthesis. These tools work together to process user queries, break them down into meaningful sub-questions, and generate comprehensive research reports.

***

### Tool 1: Analyze Query Intent\[analyze\_query\_intent]

#### Description

The **Analyze Query Intent** tool processes natural language queries to extract structured information. It identifies the language, recognizes relevant company entities, and decomposes the query into three valuable sub-questions for deeper analysis.

#### Functionality

* **Language Detection**: Automatically identifies the language of the input query
* **Entity Recognition**: Extracts and identifies company entities with their permanent IDs
* **Query Decomposition**: Breaks down the original query into three focused sub-questions, each with:
  * Unique identifier
  * Topic classification
  * Relevant keywords
  * ChatGPT-optimized prompt
  * Search engine query string

#### Parameters

**Request**

```json
{
  "query": "What are the news on Nvidia?"
}
```

**Parameter Details:**

* `query` (string, required): The user's natural language question or query

**Response**

```json
{
  "language": "en",
  "entity_id_list": [
    {
      "perm_id": "1-4295914405",
      "name": "NVIDIA CORP"
    }
  ],
  "sub_question_list": [
    {
      "id": "1",
      "topic": "Recent Earnings",
      "keywords": "Nvidia, recent earnings, revenue, profit, 2025 Q4",
      "chatgpt_prompt": "Summarize Nvidia's most recent quarterly earnings report including revenue, profit, and any notable financial metrics as of December 2025.",
      "search_engine_query": "Nvidia recent earnings 2025 Q4"
    },
    {
      "id": "2",
      "topic": "Product Launches",
      "keywords": "Nvidia, product launch, new GPU, AI chips, December 2025",
      "chatgpt_prompt": "Detail any product launches or announcements made by Nvidia in December 2025, focusing on new GPUs, AI chips, or other technology innovations.",
      "search_engine_query": "Nvidia product launch December 2025"
    },
    {
      "id": "3",
      "topic": "Market and Industry News",
      "keywords": "Nvidia, market news, partnerships, regulations, competition, 2025",
      "chatgpt_prompt": "Describe recent significant news involving Nvidia in the market such as partnerships, regulatory issues, or competitive developments up to December 2025.",
      "search_engine_query": "Nvidia market news partnerships competition 2025"
    }
  ]
}
```

**Response Fields:**

* `language` (string): Detected language code (e.g., "en" for English)
* `entity_id_list` (array): List of identified company entities
  * `perm_id` (string): Permanent identifier for the company
  * `name` (string): Official company name
* `sub_question_list` (array): Three decomposed sub-questions
  * `id` (string): Unique identifier for the sub-question
  * `topic` (string): Topic category
  * `keywords` (string): Comma-separated relevant keywords
  * `chatgpt_prompt` (string): Optimized prompt for AI analysis
  * `search_engine_query` (string): Search query string

***

### Tool 2: Synthesize Research Report\[synthesize\_research\_report]

#### Description

The **Synthesize Research Report** tool takes the structured output from the Analyze Query Intent tool and generates a comprehensive research report. It analyzes different sources for each sub-question, produces individual reports, and then synthesizes a final consolidated report based on the original query.

#### Functionality

* **Multi-Question Analysis**: Processes each sub-question independently
* **Source Integration**: Analyzes multiple data sources and reports
* **Report Synthesis**: Combines findings from all sub-questions into a cohesive final report
* **Reference Management**: Maintains proper citations and source references

#### Parameters

**Request**

```json
{
  "language": "en",
  "entity_id_list": [
    {
      "name": "NVIDIA CORP",
      "perm_id": "1-4295914405"
    }
  ],
  "sub_question_list": [
    {
      "id": "1",
      "topic": "Recent Earnings",
      "keywords": "Nvidia, recent earnings, revenue, profit, 2025 Q4",
      "chatgpt_prompt": "Summarize Nvidia's most recent quarterly earnings report including revenue, profit, and any notable financial metrics as of December 2025.",
      "search_engine_query": "Nvidia recent earnings 2025 Q4"
    },
    {
      "id": "2",
      "topic": "Product Launches",
      "keywords": "Nvidia, product launch, new GPU, AI chips, December 2025",
      "chatgpt_prompt": "Detail any product launches or announcements made by Nvidia in December 2025, focusing on new GPUs, AI chips, or other technology innovations.",
      "search_engine_query": "Nvidia product launch December 2025"
    },
    {
      "id": "3",
      "topic": "Market and Industry News",
      "keywords": "Nvidia, market news, partnerships, regulations, competition, 2025",
      "chatgpt_prompt": "Describe recent significant news involving Nvidia in the market such as partnerships, regulatory issues, or competitive developments up to December 2025.",
      "search_engine_query": "Nvidia market news partnerships competition 2025"
    }
  ]
}
```

**Parameter Details:**

* `language` (string, required): Language code for the report output
* `entity_id_list` (array, required): Company entities to research
  * `name` (string): Company name
  * `perm_id` (string): Permanent company identifier
* `sub_question_list` (array, required): List of sub-questions to analyze (typically 3)
  * `id` (string): Sub-question identifier
  * `topic` (string): Topic category
  * `keywords` (string): Research keywords
  * `chatgpt_prompt` (string): Analysis prompt
  * `search_engine_query` (string): Search query

**Response**

The response is a comprehensive Markdown-formatted research report with the following structure:

```markdown
# Reference Text

## [Sub-question 1: Topic]

[Detailed analysis and findings for the first sub-question, including:]
- Key financial metrics and data points
- Relevant dates and timeframes
- Specific numbers and percentages
- Source citations with links

--

## [Sub-question 2: Topic]

[Detailed analysis and findings for the second sub-question, including:]
- Product announcements and launches
- Technical specifications
- Partnership details
- Source citations with links

--

## [Sub-question 3: Topic]

[Detailed analysis and findings for the third sub-question, including:]
- Market developments
- Regulatory information
- Competitive landscape
- Source citations with links

--

[Final synthesis statement ensuring complete report generation]
```

Complete Exampl&#x65;**:**

```
{
  "params": {
    "sub_question_list": [
      {
        "id": "1",
        "topic": "Recent Nvidia News",
        "keywords": "Nvidia, recent news, announcements, 2025",
        "chatgpt_prompt": "Provide a summary of the most recent news and announcements related to Nvidia as of December 4, 2025, including any major product launches, partnerships, or corporate developments.",
        "search_engine_query": "Nvidia recent news 2025"
      },
      {
        "id": "2",
        "topic": "Nvidia Financial Performance",
        "keywords": "Nvidia, quarterly earnings, revenue, profit, 2025 Q3",
        "chatgpt_prompt": "Provide detailed information on Nvidia's financial performance in the latest quarter, including revenue, profit, and any notable financial trends or forecasts as of the third quarter of 2025.",
        "search_engine_query": "Nvidia Q3 2025 earnings report"
      },
      {
        "id": "3",
        "topic": "Nvidia Market Impact",
        "keywords": "Nvidia, stock price, market reaction, analyst ratings, 2025",
        "chatgpt_prompt": "Analyze the market impact of recent news on Nvidia's stock price and how analysts have rated the company in late 2025, including any significant changes in valuation or investment outlook.",
        "search_engine_query": "Nvidia stock reaction and analyst ratings 2025"
      }
    ],
    "entity_id_list": [
      {
        "perm_id": "1-4295914405",
        "name": "NVIDIA CORP"
      }
    ],
    "language": "en"
  },
  "response": {
    "content": [
      {
        "type": "text",
        "text": "# Reference Text\n\n## Provide a summary of the most recent news and announcements related to Nvidia as of December 4, 2025, including any major product launches, partnerships, or corporate developments.\n\nAs of December 4, 2025, the most recent publicly available information about NVIDIA includes:\n\n1. Annual Stockholder Meeting held on June 25, 2025, which likely covered corporate governance, financial results, and future outlook for the company ([Annual Stockholder Meeting June 25, 2025](https://insight.orbitfin.ai/search/chat-pdf/o_42DvdEWeiQKFTEhFnfZZ2g/official-reports?path=data-manual/ocollector/reports/rpt_1752797767095_344546.pdf)).\n\n2. Shareholder outreach activities reported in December 2024 indicate ongoing communication efforts with investors, although specific details on new announcements were not provided in the referenced document ([Shareholder Outreach December 2024](https://insight.orbitfin.ai/search/chat-pdf/o_bRVHgrXOYLPOxao9BECdZn/official-reports?path=data-manual/ocollector/reports/rpt_1752799967781_380752_21ab4f50cc3139cfe512071f4daf157b_20250718.pdf)).\n\n3. Financial results for the fourth quarter and fiscal year 2025 were announced, affirming the company's commitment to business growth and innovation. However, the document does not specify detailed figures or highlight any new product launches or partnerships as of that report ([NVIDIA Announces Financial Results for Fourth Quarter and Fiscal 2025](https://insight.orbitfin.ai/search/chat-pdf/qr_aqKPlCky4jfcXsIJnWiWpQ/official-reports?path=data-manual/earning-call-calendar/1757683627_14FF9CF9030A54F9526F2318BC9A5332.pdf)).\n\n4. An investor presentation for Q3 FY26 in November 2025 was also available but did not explicitly mention any major new product launches, partnerships, or corporate developments in the summarized content ([Investor Presentation Q3 FY26 November 2025](https://insight.orbitfin.ai/search/chat-pdf/qr_d7avOetgBU9VqpOKfZazIy/official-reports?path=data-manual/earning-call-calendar/1763601728_50b5cc78bc248e5d0d7b87bbe727766b.pdf)).\n\nIn summary, as of early December 2025, NVIDIA's currently available public communications focus on shareholder relations and financial reporting without specific announcements of major new product launches, partnerships, or corporate developments. Further updates may be available after the Q3 FY26 investor presentations or in forthcoming quarterly disclosures.\n\n--\n\n## Provide detailed information on Nvidia's financial performance in the latest quarter, including revenue, profit, and any notable financial trends or forecasts as of the third quarter of 2025.\n\nAs of the third quarter of fiscal 2026, NVIDIA reported record financial performance with the following key highlights:\n\n1. Revenue:\n- Total revenue reached $57.0 billion, marking a 22% increase from the previous quarter (Q2) and a 62% rise compared to the same quarter a year ago.\n- Data Center revenue set a record at $51.2 billion, up 25% from Q2 and up 66% year-over-year.\n- Gross margins were strong, with GAAP gross margin at 73.4% and non-GAAP gross margin at 73.6%.\n\n2. Earnings:\n- The company reported GAAP and non-GAAP earnings per diluted share of $1.30 each.\n\n3. Financial Trends and Comments:\n- NVIDIA's CEO Jensen Huang highlighted exceptional sales of their Blackwell architecture GPUs and noted that cloud GPUs are sold out, indicating strong demand linked to accelerating AI compute needs for training and inference.\n- NVIDIA described the current market environment as a “virtuous cycle of AI” with expansion across industries and geographies.\n- During the first nine months of fiscal 2026, NVIDIA returned $37.0 billion to shareholders through share repurchases and dividends, with $62.2 billion remaining under the share repurchase authorization.\n- The next quarterly dividend of $0.01 per share was scheduled for December 26, 2025.\n\n4. Recent Historical Context:\n- For comparison, in Q4 fiscal 2025, NVIDIA recorded $39.3 billion in revenue (up 12% from Q3 and up 78% from a year ago), demonstrating rapid growth into fiscal 2026.\n- In Q3 fiscal 2025, revenue was $35.1 billion with an earnings per diluted share of $0.78, underscoring the strong revenue and profit acceleration by Q3 fiscal 2026.\n\nOverall, NVIDIA exhibited remarkable growth in revenue and profitability in Q3 fiscal 2026, driven primarily by data center demand and AI-related product sales, particularly their Blackwell GPUs. The company maintains strong margins, continues robust capital return to shareholders, and sees ongoing high demand in the AI ecosystem ([NVIDIA Announces Financial Results for Third Quarter Fiscal 2026](https://insight.orbitfin.ai/search/chat-pdf/qr_9GU6i4YF8pTJdPidOwzuE9/official-reports?path=data-manual/earning-call-calendar/1763601728_aa0c995e074b23d9bccb6e30cd26116d.pdf), [NVIDIA Announces Financial Results for Fourth Quarter and Fiscal 2025](https://insight.orbitfin.ai/search/chat-pdf/qr_aqKPlCky4jfcXsIJnWiWpQ/official-reports?path=data-manual/earning-call-calendar/1757683627_14FF9CF9030A54F9526F2318BC9A5332.pdf), [CFO Commentary on Third Quarter Fiscal 2025 Results](https://insight.orbitfin.ai/search/chat-pdf/o_bMU5Psew9sA3vciZXRP78U/official-reports?path=data-manual/ocollector/reports/rpt_1752743534900_52212_345797dfe08af0ca4151a0fb49f5e60d_20250717.pdf)).\n\n--\n\n## Analyze the market impact of recent news on Nvidia's stock price and how analysts have rated the company in late 2025, including any significant changes in valuation or investment outlook.\n\nIn late 2025, Nvidia Corporation's stock continued to demonstrate substantial growth and strong market performance, reflecting positive sentiment and optimistic outlooks from investors and analysts.\n\n1. Stock Price Performance:\nAccording to the Annual Report as of January 26, 2025, an initial investment of $100 in Nvidia stock on January 26, 2020, had escalated dramatically to $2,287.06 by early 2025. This represents over a 22-fold increase in value over five years, surpassing major benchmarks such as the S&P 500 (which rose to $200.32) and the Nasdaq 100 (which increased to $248.12) during the same period. The stock price climb indicates strong investor confidence and robust financial performance by Nvidia ([Annual Report](https://insight.orbitfin.ai/search/chat-pdf/f_7GLlCHoHQAhuLKPzy95GCq/filing-reports?path=reports-data/stock_us/2025/02/26/edgar-data-1045810-000104581025000023-nvda-20250126.htm.pdf)).\n\n2. Recent Quarterly Presentations:\nThe Investor Presentations for Q2 FY26 (September 2025) and Q3 FY26 (November 2025) showcase Nvidia’s ongoing financial health and strategic initiatives. While specific stock price reactions are not detailed in these documents, the reports typically provide guidance, revenue projections, and key product developments that influence analyst ratings and valuation metrics. The continued release of such presentations indicates transparency and reassures investors regarding Nvidia's future growth potential ([Investor Presentation Q2 FY26](https://insight.orbitfin.ai/search/chat-pdf/qr_fzPBuESbCHugeuYPrEWZne/official-reports?path=data-manual/earning-call-calendar/1756973427_2DFB11A4C7A080BD9163D5026721DCF1.pdf), [Investor Presentation Q3 FY26](https://insight.orbitfin.ai/search/chat-pdf/qr_d7avOetgBU9VqpOKfZazIy/official-reports?path=data-manual/earning-call-calendar/1763601728_50b5cc78bc248e5d0d7b87bbe727766b.pdf)).\n\n3. Analyst Ratings and Investment Outlook:\nWhile specific analyst ratings from late 2025 are not provided in the documents, the significant stock price appreciation and frequent corporate communications imply a positive investment outlook. The company’s stock performance outpacing market indices by a large margin suggests analyst confidence and favorable valuation adjustments. Furthermore, the upcoming Annual Stockholder Meeting on June 25, 2025, typically includes forward-looking statements and strategic discussions that can impact market perception positively ([Annual Stockholder Meeting June 25, 2025](https://insight.orbitfin.ai/search/chat-pdf/o_42DvdEWeiQKFTEhFnfZZ2g/official-reports?path=data-manual/ocollector/reports/rpt_1752797767095_344546.pdf)).\n\nSummary:\nOverall, Nvidia's stock price has experienced remarkable growth through 2025, driven by strong business fundamentals and positive market sentiment. The company's valuation significantly outperformed major indices, and continued investor presentations underscore robust future prospects. Although direct analyst ratings are not explicitly cited, the data reflects an optimistic investment outlook with likely favorable upgrades by market analysts in late 2025.\n\nReferences:\n- [Annual Report NVIDIA Corporation Jan 2025](https://insight.orbitfin.ai/search/chat-pdf/f_7GLlCHoHQAhuLKPzy95GCq/filing-reports?path=reports-data/stock_us/2025/02/26/edgar-data-1045810-000104581025000023-nvda-20250126.htm.pdf)\n- [Investor Presentation Q2 FY26 September 2025 NVIDIA](https://insight.orbitfin.ai/search/chat-pdf/qr_fzPBuESbCHugeuYPrEWZne/official-reports?path=data-manual/earning-call-calendar/1756973427_2DFB11A4C7A080BD9163D5026721DCF1.pdf)\n- [Investor Presentation Q3 FY26 November 2025 NVIDIA](https://insight.orbitfin.ai/search/chat-pdf/qr_d7avOetgBU9VqpOKfZazIy/official-reports?path=data-manual/earning-call-calendar/1763601728_50b5cc78bc248e5d0d7b87bbe727766b.pdf)\n- [Annual Stockholder Meeting June 25, 2025 NVIDIA](https://insight.orbitfin.ai/search/chat-pdf/o_42DvdEWeiQKFTEhFnfZZ2g/official-reports?path=data-manual/ocollector/reports/rpt_1752797767095_344546.pdf)\n\n--\n\nEnsure the subsequent verbatim report generation without any laziness, simulation, or omission of content. I will now generate the final Markdown report with references: "
      }
    ],
    "isError": false
  }
}
```

***

### Workflow Integration

These two tools are designed to work in tandem:

1. **Step 1**: User submits a query to **Analyze Query Intent**
2. **Step 2**: The tool returns structured data with language, entities, and sub-questions
3. **Step 3**: The output from Step 2 is passed as input to **Synthesize Research Report**
4. **Step 4**: A comprehensive research report is generated and returned

#### Example Workflow

```
User Query: "What are the news on Nvidia?"
    ↓
[Analyze Query Intent]
    ↓
Structured Output: {language, entity_id_list, sub_question_list}
    ↓
[Synthesize Research Report]
    ↓
Final Report: Comprehensive Markdown document with analysis and citations
```

***


# 2.6. Usage Examples

#### Example 1: Single Company Analysis

**Query**: "What are the main risk factors for Tesla according to their latest 10-K?"

**MCP Activation**: ✓ (Single company, investment research focus, official document request)

**Expected Response**: Detailed analysis of risk factors from Tesla's most recent 10-K filing with specific citations

#### Example 2: Peer Comparison

**Query**: "Compare the gross margins of Nike and Adidas over the past 2 quarters"

**MCP Activation**: ✓ (2 companies, financial metric comparison, suitable scope)

**Expected Response**: Comparative analysis with tables showing gross margins from recent quarterly filings

#### Example 3: Multi-Language Query

**Query**: "比较苹果和微软的研发支出" (Chinese: Compare Apple and Microsoft's R\&D spending)

**MCP Activation**: ✓ (Supports all languages, 2 companies, clear research intent)

**Expected Response**: Analysis in the query language with data from official filings

#### Example 4: Too Many Companies

**Query**: "Analyze the debt levels of all FAANG stocks plus Tesla, Nvidia, and AMD"

**MCP Activation**: ✗ (8 companies exceeds limit of 5)

**Expected Response**: Error message suggesting to limit query to 5 companies

#### Example 5: Non-Research Query

**Query**: "What's the current stock price of Apple?"

**MCP Activation**: ✗ (Real-time data request, not document-based research)


# 2.7. Error Handling

#### Common Error Codes

<table><thead><tr><th width="227">Error Code</th><th>Description</th><th>User Message</th><th>Resolution</th></tr></thead><tbody><tr><td>COMPANY_LIMIT_EXCEEDED</td><td>>5 companies in query</td><td>"Please limit your query to 5 or fewer companies for optimal analysis"</td><td>Refine query to focus on key companies</td></tr><tr><td>COMPANY_NOT_FOUND</td><td>Company not in database</td><td>"Could not find official filings for [Company]"</td><td>Verify company is publicly traded</td></tr><tr><td>TIMEOUT</td><td>Processing exceeded limit</td><td>"Query is taking longer than expected"</td><td>Retry or simplify query</td></tr></tbody></table>

#### Best Pract

#### Best Practices for Error Prevention

* Start with 2-3 companies for comparisons
* Specify clear timeframes when relevant
* Use exact company names or tickers
* Break complex queries into multiple simpler ones


# 2.8. Best Practices

#### Query Optimization

1. **Be Specific**: Include specific metrics and timeframes
   * Good: "Compare Apple and Microsoft's operating margins for Q3 2024"
   * Avoid: "How are Apple and Microsoft doing?"
2. **Use Identifiers**: Include tickers when possible
   * Good: "Analyze AAPL's capital allocation strategy"
   * Okay: "Analyze Apple's capital allocation strategy"
3. **Optimal Company Count**: 2-3 companies for best results
   * Detailed analysis possible
   * Meaningful comparisons
   * Faster processing
4. **Specify Document Types**: When relevant
   * "According to Tesla's latest 10-Q..."
   * "Based on proxy statements..."

#### Response Interpretation

1. **Check Citations**: Always review source documents cited
2. **Understand Timing**: Note filing dates for context
3. **Consider Limitations**: 12-month data window constraint
4. **Cross-Reference**: Validate critical data points

#### Workflow Efficiency

1. **Start Narrow**: Begin with focused queries, then expand
2. **Use Sub-Queries**: Break complex questions into parts
3. **Save Key Findings**: Document important insights
4. **Build Knowledge**: Each query informs the next

#### Common Use Cases

1. **Earnings Analysis**: Pre/post earnings call research
2. **Peer Benchmarking**: Competitive positioning
3. **Risk Assessment**: Systematic risk factor analysis
4. **Trend Identification**: Multi-period comparisons


# 2.1 Orbit MCP Setup

### 1. Overview <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--1-overview-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--1-overview-0"></a>

Orbit exposes two access channels, both of which require authentication:

* **MCP (Model Context Protocol) Server** — for AI agents and LLM clients such as Claude, ChatGPT, and Cursor.

To support both machine-to-machine integrations and end-user delegated access, Orbit supports **two authentication methods**:

<table><thead><tr><th>Method</th><th>Channels</th><th>Typical Use Cases</th><th data-hidden></th></tr></thead><tbody><tr><td><strong>OAuth 2.0 / 2.1</strong></td><td>REST API, MCP (remote HTTP)</td><td>Third-party app integrations, end-user delegated access, AI agent remote tool calls</td><td></td></tr></tbody></table>

### 2. Base URLs & Interactive References <a href="#heading-f20e82ae-0d17-4395-8fc6-21abfe6b1b51--20-base-urls-interactive-references-0" id="heading-f20e82ae-0d17-4395-8fc6-21abfe6b1b51--20-base-urls-interactive-references-0"></a>

Before issuing any request, make sure you are calling the correct endpoint. Orbit exposes two independent services, each with its own base URL and interactive documentation:

| Service        | Base URL                             | Interactive Reference                                                       | Description                                                                                                                        |
| -------------- | ------------------------------------ | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **MCP Server** | `https://mcp.orbitfin.ai/server/mcp` | `https://mcp.orbitfin.ai/docs` [<sup>2</sup>](https://mcp.orbitfin.ai/docs) | Streamable HTTP MCP endpoint for LLM clients (Claude Code, ChatGPT, Cursor, …) following the Model Context Protocol specification. |

**Quick Reference**

**MCP Server**

```
<HTTP>
Endpoint:         https://mcp.orbitfin.ai/server/mcp
Transport:        Streamable HTTP (MCP spec)
Docs:             https://mcp.orbitfin.ai/docs
Auth (API Key):   X-API-KEY: <your-api-key>
Auth (OAuth):     Authorization: Bearer <access_token>   ← see §3
```

**Minimal Smoke Tests**

Verify your key works against each surface in under 10 seconds.

**MCP Server — connect via JSON config**

```
{
  "mcpServers": {
    "orbit": {
      "url": "https://mcp.orbitfin.ai/server/mcp",
      "headers": {
        "X-API-KEY": "<your-api-key>"
      }
    }
  }
}
```

For the full list of MCP tools, resources, and prompt templates exposed by the server, browse the interactive catalog at `https://mcp.orbitfin.ai/docs` [<sup>2</sup>](https://mcp.orbitfin.ai/docs).

**Unified Billing Across Both Surfaces**

API Key usage on either surface draws from the **same credit pool** on your Orbit account:

Universal Currency: Same credits work for both APIs and MCP · APIs: Direct programmatic access charges credits per operation · MCP: Natural language queries consume credits based on complexity · Shared Pool: API and MCP usage draws from the same credit balance

. There is no need to provision separate quotas — a single API key (or a single OAuth-authenticated user, see §3) is billed uniformly.

<br>

### 3. Method 1: API Key Authentication <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--2-method-1-api-key-authentication-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--2-method-1-api-key-authentication-0"></a>

1. Sign in to the Orbit Console\[<https://insight.orbitfin.ai/>] → **Settings → API Keys**.

<figure><img src="/files/Q2qQEI3se4Oq8e2XVL7h" alt=""><figcaption></figcaption></figure>

2. Click **Create API Key**, give it a name, and save.

#### 3.2 Using API Key with MCP <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--23-using-api-key-with-mcp-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--23-using-api-key-with-mcp-0"></a>

For local stdio MCP clients or trusted environments:

**\<JSON>**

```
{
  "mcpServers": {
    "orbit": {
      "url": "https://mcp.orbitfin.ai/server/mcp",
      "headers": {
        "X-API-KEY": "<your-api-key>"
      }
    }
  }
}
```

#### 3.3 Security Best Practices <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--24-security-best-practices-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--24-security-best-practices-0"></a>

API keys are long-lived credentials that do not carry user identity, which makes per-user authorization difficult and creates significant risk if leaked into logs or version control; audit trails can only record what an API key did, not which user.

Therefore:

* **Never** embed API keys in frontend code.
* **Never** commit them to Git.
* **Rotate** keys regularly.
* Follow the **principle of least privilege** when assigning scopes (where supported).

### 4. Method 2: OAuth 2.0 Authentication (Recommended for MCP & Third-Party Apps) <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--3-method-2-oauth-20-authentication-recommended-for-mcp" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--3-method-2-oauth-20-authentication-recommended-for-mcp"></a>

#### 4.1 When to Use OAuth 2.0 <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--31-when-to-use-oauth-20-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--31-when-to-use-oauth-20-0"></a>

* Third-party SaaS applications integrating with Orbit.
* AI agents / LLM clients calling Orbit tools via remote MCP.
* Any scenario that requires **end-user identity** rather than application identity, with a complete audit trail.

#### 4.2 Calling the MCP with an Access Token <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--33-calling-the-api-with-an-access-token-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--33-calling-the-api-with-an-access-token-0"></a>

**\<JSON>**

```
{
  "mcpServers": {
    "orbit": {
      "url": "https://mcp.orbitfin.ai/server/mcp",
      "headers": {
        "Authorization": "Bearer <access_token>"
      }
    }
  }
}
```

#### 4.3 OAuth Configuration for the Remote MCP Server <a href="#heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--34-oauth-configuration-for-the-remote-mcp-server-0" id="heading-17e4230e-4444-4c7c-bcc1-f83210b378ef--34-oauth-configuration-for-the-remote-mcp-server-0"></a>

When integrating with MCP-aware clients (Claude Desktop, ChatGPT, etc.), Orbit's MCP Server exposes the standard discovery endpoints:

* [`https://mcp.orbitfin.ai/.well-known/oauth-protected-resource`](https://mcp.orbitfin.ai/.well-known/oauth-authorization-server) — Resource metadata

On first connect, the client automatically discovers these endpoints and initiates the OAuth flow.

After the OAuth flow completes, the client attaches the obtained access token via the `Authorization: Bearer …` header on subsequent MCP requests. The server must treat the token as untrusted and perform full resource-server validation: signature verification, issuer/audience checks, expiration, replay protection, and scope enforcement.

#### 4.4 Connecting Orbit MCP in Claude Code & ChatGPT <a href="#heading-a084401b-d733-4c25-b6ad-16800c464428--36-connecting-orbit-mcp-in-claude-code-chatgpt-0" id="heading-a084401b-d733-4c25-b6ad-16800c464428--36-connecting-orbit-mcp-in-claude-code-chatgpt-0"></a>

Thanks to OAuth 2.0 + DCR, end users **do not need to manually create an API key or paste any token**. The entire setup is just three steps:

**▶ Claude Code**

1. Open **Claude Code → Settings → Connectors → Add Custom Connector**.
2. Fill in the form:
   * **Name**: any name you like, e.g. `Orbit`
   * **Remote MCP server URL**: <https://mcp.orbitfin.ai/server/mcp>
3. Click **Add**. Claude Code will automatically:
   * Discover Orbit's `.well-known` OAuth metadata,
   * Register itself via Dynamic Client Registration,
   * Open a browser window to the Orbit Insight login page.
4. Enter your **Insight platform username and password** to authorize.
5. Done ✅ — the Orbit tools are now available inside Claude Code.

> Example configuration (as shown in the screenshot):
>
> ```
> <TEXT>Name:                OrbitRemote MCP server URL: 
> https://mcp.orbitfin.ai/.well-known/oauth-protected-resource
> ```

**▶ ChatGPT**

1. Open **ChatGPT → Settings → Connectors → Create**(or **Add custom connector** in the Developer Mode panel).
2. Fill in:
   * **Name**: `Orbit` (or any name you prefer)
   * **MCP Server URL**: <https://mcp.orbitfin.ai/server/mcp>
   * **Authentication**: select **OAuth**
3. Click **Create / Connect**. ChatGPT will redirect you to the Orbit Insight login page.
4. Sign in with your **Insight platform username and password** to grant access.
5. Done ✅ — Orbit tools appear in ChatGPT's tool list and can be invoked in conversations.

**Why it's this simple**

* Orbit's MCP server publishes OAuth discovery metadata at\
  `https://mcp.orbitfin.ai/.well-known/oauth-protected-resource`
* Clients (Claude Code / ChatGPT) auto-register via **Dynamic Client Registration**, so no `client_id` / `client_secret` setup is required by the user.
* The user only authenticates **once** with their existing Insight account; refresh tokens keep the session alive.

<figure><img src="/files/H3zWPgYkA5ZyHbKBVqkO" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/adMXgX5oxfk44zOZ7c6z" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/pWBDoZc2Mj9kwB9cXGQP" alt=""><figcaption></figcaption></figure>


# 2.2 Orbit MCP Tools

Enterprise-grade agentic chat service built on MCP, available in Insight's Agentic Chat.

The Orbit Enterprise Agentic Chat Tool MCP is an enterprise-grade agentic conversational service built upon the Model Context Protocol (MCP). It seamlessly integrates with internal AI assistants, research terminals, and automated workflows, delivering multi-turn contextual reasoning, enterprise data source invocation, tool-chain orchestration, and structured output.

**Purpose-built** for professional domains such as investment research, compliance, risk management, and advisory services, the service is currently deployed within the **Agentic Chat** module of the Insight platform.

We are continuously expanding our portfolio of professional tools. The current stable releases are shown below — please refer to the table for the latest changes.

<table><thead><tr><th width="192.796875">Tool Name</th><th width="244.47265625">Description</th><th width="91.95703125">Credit</th><th>Notes</th><th>Former Name</th></tr></thead><tbody><tr><td>Company Search</td><td>Query company info via ISIN / Ticker / LEI / Name to obtain orbit_entity_id,<br>required as a prerequisite for all other tools</td><td>1</td><td></td><td></td></tr><tr><td>Get Filings Data</td><td>Internal proprietary vector search across 308 document types (filings,<br>announcements, ESG reports, etc.). Returns AI-generated summaries, evidence citations, and URL</td><td>1</td><td><p></p><p>Max 1-year date range per call; up to 10 years of historical data; typical response time 30–120s</p></td><td></td></tr><tr><td>News Sentiment Tracker</td><td>AI-powered daily news sentiment tracker — generates sentiment scores (0–100),<br>classifies positive/negative events, identifies competitors, risk factors, and provides<br>buy/hold/sell signals</td><td>1</td><td>Max 31-day range per call; up to 3 years of historical data</td><td>Bot News Tracker</td></tr><tr><td>Get Stock Price</td><td>Retrieves end-of-day (EOD) stock price data with flexible time windows: 1D / 5D /<br>1M / 6M / YTD / 1Y / 5Y / MAX</td><td>0.5</td><td></td><td>Get Eod Price</td></tr><tr><td>Financial News Search</td><td>Searches Google News for financial and business coverage with multi-keyword<br>filtering, date range, and multi-language support</td><td>0.5</td><td></td><td>Google News</td></tr></tbody></table>

**Note:** Enterprise subscribers enjoy Agentic Chat at no cost. Additional charges apply based on task complexity, billed by **tool usage × invocation count**.


# 2.3 Orbit Agent Builder Tools

BuilderTools

### Agent Builder Workflow Tools&#x20;

*This feature is currently free for a limited time.*

You can read "User Guide" to understand the usage workflow of this tool.

> The Agent Builder project offers a relatively large number of general-purpose tools and supports both creating and using them. For this reason, we provide a dedicated URL to make it easier to combine and use these tools. The URL is as follows:

<https://mcp.orbitfin.ai/agentbuilder/mcp><br>

<table><thead><tr><th width="194.1484375">Tool Name</th><th width="244.72265625">Description</th><th width="96.1015625">Credit</th><th>Note</th></tr></thead><tbody><tr><td>Portfolio List</td><td>Read-only, lists the user's existing portfolios as analysis targets</td><td>Free</td><td>Default limit 20, max 50; portfolios managed elsewhere</td></tr><tr><td>Ag Workflow Status</td><td>Read-only snapshot of the current Agent Builder workflow state</td><td>Free</td><td>Pure status check, never mutates draft/agent</td></tr><tr><td>Ag Continue</td><td>Read-only advisory navigator suggesting the next tool for vague user<br>requests</td><td>Free</td><td>Never executes the suggested action itself</td></tr><tr><td>Ag Config Build</td><td>Creates a brand-new Agent draft from a natural-language requirement</td><td>Free</td><td>Blocked if an active draft already exists</td></tr><tr><td>Ag Config Load</td><td>Read-only, reviews the current active draft</td><td>Free</td><td>Returns human-readable config; hides raw ids</td></tr><tr><td>Ag Config Discard</td><td>Discards the current draft</td><td>Free</td><td>Only for explicit user request; doesn't delete saved Agents</td></tr><tr><td>Ag Config Set Target</td><td>Sets/replaces the draft's target company</td><td>Free</td><td>ids must come from a prior company_search result</td></tr><tr><td>Ag Config Edit</td><td>Edits the draft's data sources / time window / cadence / extraction<br>fields</td><td>Free</td><td>Only editable before Agent creation starts</td></tr><tr><td>Ag Generate Start</td><td>Starts creating an Agent from the approved draft</td><td>Free</td><td>Marks creation "started", not "finished"</td></tr><tr><td>Ag Generate Status</td><td>Read-only, checks whether Agent creation has finished</td><td>Free</td><td>agent_ref resolves by name/company if id unknown</td></tr><tr><td>Ag Analyze List</td><td>Read-only, lists saved Agents for the user to choose from</td><td>Free</td><td>Default limit 3, max 20</td></tr><tr><td>Ag Analyze Start</td><td>Starts a final analysis run for a chosen saved Agent</td><td>Free</td><td>force=false dedupes recent runs by default</td></tr><tr><td>Ag Analyze Result</td><td>Read-only, checks analysis progress or fetches report/structured<br>results</td><td>Free</td><td>Default limit 5, offset 0</td></tr><tr><td>Ag Agent List</td><td><p>Lists the current user's active saved Agent Builder Agents from the database,</p><p>so the user can choose one to run analysis</p></td><td>Free</td><td>Default limit 50, max 100;</td></tr></tbody></table>

### User Guide

> Audience: end users creating a "persistent tracking Agent" through a Copilot / Claude / ChatGPT conversation. You don't need to know any tool names or parameters — just talk to your assistant in plain language.

### 1. What this feature does

Agent Builder helps you create a "persistent tracking" analysis assistant (an Agent). Describe, in one sentence, which company/portfolio you want to track and what you care about, and your assistant (Copilot / Claude / ChatGPT) will:

1. Generate a draft tracking plan (what data to track, how often to update, which metrics to watch)
2. Let you confirm or adjust that plan
3. Formally create the Agent
4. Run analysis manually, whenever you ask (scheduled auto-runs aren't supported yet — see the FAQ below)
5. Produce a report you can check any time

### 2. How to get started

Just tell your assistant what you want to track, for example:

* "Build me an assistant tracking Apple's cash flow health"
* "I want a weekly update on NVIDIA's competitiveness in AI chips"
* "Set up a monthly risk tracker for my 'Semiconductors' portfolio"

Your assistant will show you a draft plan that includes:

* Tracking target (a company, or an existing portfolio)
* Data sources (filings, news, stock price, etc.)
* Update frequency (daily / weekly / monthly / on demand — currently just recorded in the plan and doesn't trigger auto-runs yet, see the FAQ below)
* Specific metrics to watch

### 3. Reviewing and adjusting the plan

Once the draft is shown, you can:

* **Approve it as-is**: "Looks good, create it" / "That works"
* **Ask for changes**: "Change the cadence to weekly" / "Add ESG tracking" / "Switch to the portfolio instead of a single company"
* **Start over**: "Never mind, let's redo this"

Once you approve and the Agent is created, the plan can no longer be edited — if you need a different setup later, you'll create a new Agent.

### 4. Creating and running

After you approve the plan:

* Your assistant will say it's "creating" — you can ask "is it ready yet?" anytime
* Once creation is done, say "run the analysis" to start a run
* If you have multiple saved assistants, you can refer to one by name ("the NVIDIA one I set up before") or ask it to "list the assistants I've built"

### 5. Viewing results

Once analysis is done, just ask "is the result ready?" or "show me the report" and your assistant will give you:

* A viewable analysis report
* Or a structured summary of the key data

If the analysis is still running, it will tell you roughly how far along it is.

### 6. FAQ

**Q: Can one assistant track multiple companies?** Yes — if you choose a portfolio instead of a single company, the assistant tracks every company in it.

**Q: I want to change the tracking frequency after creation — can I?** No, the configuration is locked once the Agent is created. You'll need to build a new one for a different setup.

**Q: Does the assistant run automatically on a schedule?** Not yet — every analysis run currently has to be triggered manually by asking "run the analysis." The frequency you set in the plan is only recorded for reference and doesn't auto-trigger anything right now. Scheduled auto-runs need to be configured separately on the Insight platform. This is intentional: there isn't yet a visible run-history view here, so if auto-scheduling were enabled by default, a run could keep consuming credits without anyone noticing.

**Q: I can't remember which assistants I've already built — what do I do?** Just ask "what assistants have I built?" and it'll list them for you to choose from.

### Tool Reference (Internal / Developer Doc)

> Audience: prompt engineers / client developers integrating this MCP — not end users.
>
> These tools are currently free/promotional (no billing).

### 1. Workflow state model

Draft → Agent (after creation) → Analysis run are three progressive states; tools are grouped by\
which state they operate on.

### 2. Tool list (grouped by workflow stage)

#### 2.1 Navigation / status (read-only)

| Tool Name                               | When to use                                                                                                          |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ag\_workflow\_status Ag Workflow Status | Low-level lookup when you need to know exactly which state the workflow is in                                        |
| ag\_continue Ag Continue                | When the user gives a vague instruction ("continue", "OK", "what now"), ask this first for the recommended next tool |

#### 2.2 Draft management

| Tool Name                                    | When to use                                                                 |
| -------------------------------------------- | --------------------------------------------------------------------------- |
| ag\_config\_build Ag Config Build            | Create a brand-new draft from scratch (no active draft exists)              |
| ag\_config\_load Ag Config Load              | Review the current draft's full configuration                               |
| ag\_config\_set\_target Ag Config Set Target | Change only the draft's target company                                      |
| ag\_config\_edit Ag Config Edit              | Change the draft's data sources / time window / cadence / extraction fields |
| ag\_config\_discard Ag Config Discard        | The user explicitly wants to abandon the current draft                      |

#### 2.3 Agent creation

| Tool Name                               | When to use                                                        |
| --------------------------------------- | ------------------------------------------------------------------ |
| ag\_generate\_start Ag Generate Start   | User approved the draft — formally start Agent creation            |
| ag\_generate\_status Ag Generate Status | Check whether creation has finished ("ready" vs. "still creating") |

#### 2.4 Selecting a target / saved Agent

| Tool Name                         | When to use                                               |
| --------------------------------- | --------------------------------------------------------- |
| ag\_analyze\_list Ag Analyze List | List the user's saved Agents for selection                |
| portfolio\_list Portfolio List    | List the user's existing portfolios as an analysis target |

#### 2.5 Run analysis / fetch results

| Tool Name                             | When to use                                                   |
| ------------------------------------- | ------------------------------------------------------------- |
| ag\_analyze\_start Ag Analyze Start   | Start an analysis run for an already-created Agent            |
| ag\_analyze\_result Ag Analyze Result | Check run progress, or fetch the report URL / structured data |

### 3. Typical conversation flow (happy path, with actual tool calls)

```
User: "Build me an Agent tracking NVIDIA's competitiveness in AI chips"
  → ag_config_build(requirement=..., orbit_entity_ids=None)
      (if the entity_id is unknown, resolve it via company_search first)

Assistant shows the draft. User: "Change the cadence to weekly"
  → ag_config_edit(ag_id=..., schedule="Weekly")

User: "Looks good, create it"
  → ag_generate_start()

Assistant: "Creating — checking status shortly"
  → ag_generate_status()  (poll until ready)

User: "Run the analysis"
  → ag_analyze_start(ag_id=...)

User: "Is the result ready?"
  → ag_analyze_result(ag_id=..., agent_type="report")
```

Whenever the user's instruction is vague ("continue", "what now", "check progress"), call `ag_continue` first for the recommended next step instead of guessing.

### 4. Key constraints / notes

* **Never expose internal ids to the user**: `ag_id`, `dag_run_id`, etc. are tool-to-tool arguments only — always refer to the company/Agent name in user-facing replies.
* **A draft is only editable before Agent creation starts**: once `ag_generate_start` succeeds, the config is frozen and `ag_config_edit` no longer applies.
* **Target company ids must come from a company\_search result**: never pass a guessed name/ticker directly to `ag_config_set_target` / `ag_config_build`.
* **Dedup by default**: `ag_analyze_start` defaults to `force=False`, which skips re-triggering if a recent run already exists — only pass `force=True` when the user explicitly asks to re-run.
* **Fuzzy reference resolution**: several tools accept `agent_ref` (a natural-language reference, e.g. "the NVIDIA one"). If resolution fails or matches multiple candidates, the tool returns a "needs user selection" response — never guess on the model's behalf.


# Claude Usage Examples

Claude

**Common Examples:**

### **1.Extract results from month-over-month (sequential) analysis**

<figure><img src="/files/HA9c40E1T3IX72xT4cyG" alt=""><figcaption></figcaption></figure>

### **2.Analyze an already-created agent**

<figure><img src="/files/qFRSbxSUfDmnugm8kx9L" alt=""><figcaption></figcaption></figure>

### **3.Create an agent from uploaded attachment content**

<figure><img src="/files/nDvZonOzpdOm7VyW8rav" alt=""><figcaption></figcaption></figure>

### **4.Create an agent from a description**

<figure><img src="/files/AWIx8IdbungLCuTmxtwk" alt=""><figcaption></figcaption></figure>


# GPT Usage Examples

GPT

***

**Common Examples:**

### **1.Extract results from month-over-month (sequential) analysis**

<figure><img src="/files/YpfGfFHxQtTVSgrUIbR5" alt=""><figcaption></figcaption></figure>

### **2.Analyze an already-created agent**

<figure><img src="/files/XkJVfltCJOg3udHL3ZcN" alt=""><figcaption></figcaption></figure>

### **3.Create an agent from uploaded attachment content**

<figure><img src="/files/wHQmTYQNq7b3q1UleJ0y" alt=""><figcaption></figcaption></figure>

### **4.Create an agent from a description**

<figure><img src="/files/C3kUkM2qiDsA5706O04l" alt=""><figcaption></figcaption></figure>


# Cherry Studio Usage Examples

* **We recommend using Cherry Studio, with the following prompt:**

```
You are an assistant for Agent Builder workflows.

Agent Builder is a tool-driven workflow. You must not answer Agent Builder state, creation, running, progress, result, draft, or saved-Agent questions from memory, assumptions, or conversation text alone.

If the user request is related to Agent Builder in any way, you must use the relevant MCP tool before making any factual claim.

A response that claims an Agent was created, checked, started, running, ready, completed, listed, or has results without a relevant MCP tool call in the current turn is invalid.

Available MCP Tools

1. company_search
Use this to find a company and obtain its orbit_entity_id.
Use it only when the company target has not already been resolved in the current Agent-building flow.
Do not call it again just because the user clarified analysis scope, fields, data sources, cadence, or approval.

2. ag_workflow_status
Use this to inspect the current Agent Builder workflow state.
It helps identify whether there is an active draft, whether creation is in progress, whether an Agent is ready, or whether the user must choose among saved Agents.
This is a navigation/status helper, not a replacement for creation-status or analysis-result tools.

3. ag_continue
Use this when the user’s intent is vague, short, or context-dependent, such as “ok”, “continue”, “start”, “check”, “run it”, “what now”, or “go ahead”.
It suggests the next tool, but it does not perform the action itself.
After using it, call the actual recommended MCP tool when an action or factual state check is required.

4. ag_config_build
Use this only to create a brand-new Agent draft from the user’s requirements.
Do not use it when an active draft already exists.
Do not use it after the user has already reviewed a draft and says to create it.
Do not use it to check status, run analysis, or view results.

5. ag_config_load
Use this to review the current active draft.
Use it before editing when needed.
Do not use it merely to confirm a draft the user has already seen and approved.

6. ag_config_edit
Use this to modify the current draft before Agent creation starts.
Use it for data sources, time window, collection cadence, or analysis fields.
Do not use it to create the Agent, run analysis, or view results.

7. ag_config_set_target
Use this to set or replace the company target on the current draft.
The company target must come from company_search or a previously resolved orbit_entity_id in the same flow.
Do not guess IDs.

8. ag_config_discard
Use this only when the user explicitly wants to abandon the current draft.
Never discard automatically.
If a draft blocks new creation, tell the user they can continue, create it, edit it, or discard it.

9. ag_generate_start
Use this when the user approves the current draft and wants to create the Agent.
This starts Agent creation. It does not mean creation is complete.
After this tool succeeds, use ag_generate_status when the user asks whether it is ready.

10. ag_generate_status
Use this to check whether Agent creation is complete.
This is the authoritative tool for creation status.
If the user refers to an Agent by name, company, scope, or phrase, pass agent_ref when ag_id is unavailable.
If the tool returns ambiguous_agent or agent_not_found, ask the user to choose. Never guess.

11. ag_analyze_list
Use this to list recent saved Agents when the user asks what Agents they have or wants to choose one.
Do not use this as the final source of truth for creation readiness.
If readiness matters, call ag_generate_status.

12. ag_analyze_start
Use this to start analysis for a ready Agent.
Use ag_id when known, or agent_ref when the user clearly names the intended Agent.
If the selected Agent is not ready or selection is ambiguous, do not claim analysis started.

13. ag_analyze_result
Use this to check analysis progress or fetch completed analysis results.
Use this after analysis starts, or whenever the user asks about report readiness, progress, generated report, final output, or structured result.
Use agent_ref when the user names the intended Agent but ag_id is unavailable.

Required Workflow

Creating a new Agent:
1. If company target is needed and not resolved, call company_search.
2. Call ag_config_build to create a draft.
3. Show the draft naturally and ask whether to create the Agent.
4. If the user approves, call ag_generate_start.
5. Do not say the Agent is ready yet.
6. When the user asks whether it is ready, call ag_generate_status.

Editing a draft:
1. Call ag_config_load if current draft details are needed.
2. Call ag_config_edit for changes.
3. Ask whether to create the Agent from the updated draft.
4. If approved, call ag_generate_start.

Handling an active draft:
1. If an active draft exists, do not create another draft.
2. Tell the user there is already a draft.
3. Offer to continue editing it, create the Agent from it, or discard it.
4. Only call ag_config_discard if the user explicitly asks to abandon it.

Checking creation status:
1. Call ag_generate_status.
2. If the user named an Agent/company/scope and ag_id is not known, pass agent_ref.
3. If multiple Agents match, ask the user to choose.
4. Only report the status supported by the MCP result.

Running analysis:
1. Confirm the intended Agent.
2. Use ag_generate_status if readiness is uncertain.
3. Call ag_analyze_start only for a ready Agent.
4. Do not say analysis started unless ag_analyze_start supports it.

Checking analysis progress or results:
1. Call ag_analyze_result.
2. If the user named an Agent/company/scope and ag_id is not known, pass agent_ref.
3. If results are ready, show the report/data naturally.
4. If not ready, say it is still preparing or not started according to the MCP result.

Hard Rules

- You must call an MCP tool for every Agent Builder factual state claim.
- Never say “I checked”, “I created”, “I started”, “it is ready”, “it is running”, “the report is done”, or “you have these Agents” unless the relevant MCP tool was actually called in the current turn.
- Never pretend a tool call happened.
- Never fabricate tool results.
- Never rely on conversation memory for current Agent Builder state.
- Never default to the first recent Agent when multiple Agents exist.
- Never infer readiness from a saved list alone.
- Never treat a draft as a created Agent.
- Never treat “Agent creation started” as “Agent creation complete”.
- Never treat “analysis started” as “results ready”.
- If the tool result is ambiguous, ask the user to choose.
- If the tool fails or is unavailable, say the state could not be verified. Do not guess.
- If you realize you did not call the required tool, do not apologize and then claim a result. Call the tool first.

Internal Fields Are Never User-Facing

Never expose, quote, or paraphrase internal fields such as:
_proof, _proof.verified, _state, _internal, ag_id, dag_run_id, has_result, run_triggered, already_triggered, agent_generated, creation_status, phase, status, database status, Redis, Airflow, DAG, backend job, or implementation details.

Use internal fields only to decide what is true.
Then explain the result in natural user language.

Bad:
“The analysis is complete, verified by _proof.verified=true and has_result=true.”

Good:
“The NVIDIA analysis report is ready. Here is the report: [link]”

User-Facing Style

- Be concise, natural, and direct.
- Speak in the user’s language.
- Do not use mechanical labels like “next:”.
- Do not mention tool names unless the user explicitly asks.
- Do not say “trigger generation”, “DAG”, “Airflow”, “DB”, “Redis”, or “backend job”.
- Prefer product wording:
  - “create the Agent”
  - “check creation status”
  - “start analysis”
  - “view results”
  - “the report is ready”
- If the user must choose, show a short numbered list with Agent names and simple descriptions only.
```

<figure><img src="/files/MhUo6MBOOn5YwsA4Gf8a" alt=""><figcaption></figcaption></figure>

Open Agent\_Builder\_System.md, copy the prompt, and paste it into the tool as shown below.

<figure><img src="/files/qe9K0l6RmhUVXvkABjm1" alt=""><figcaption></figcaption></figure>

Open MCP and connect the tool.

<figure><img src="/files/9BgO8eIyFsIty1CEKT2Z" alt=""><figcaption></figcaption></figure>

Start the conversation as shown in the image below.

<figure><img src="/files/TvXWGwr2Zf6T4jvQJNC1" alt=""><figcaption></figcaption></figure>


# 2.3 MCP Best Practice

## Evaluation & Onboarding Guide

### Getting research value from Orbit MCP

Orbit MCP gives any modern AI assistant (Claude, ChatGPT, Copilot, Gemini) a direct conversational line into Orbit's knowledge base: 70M+ financial documents, 55,000+ public companies, and 10 years of history. Every answer is grounded in real filings, transcripts, and news, with citations back to the source documents. Used like a quick search, it returns quick answers. Used like a research analyst you can brief and delegate to, it returns grounded, analyst-grade work in minutes. This guide is how you reach the second outcome.

***

### 1. Where MCP fits in the stack

Orbit is a stack, not a single product, and MCP is one surface into it. Choosing the right surface for the job is the single biggest determinant of whether Orbit becomes a nice-to-have or a must-have in your workflow.

| Surface                | Reach                             | For it when                                                                                                   |
| ---------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Orbit Insight**      | Full SaaS research UI             | Structured, repeatable research across many companies, with saved workspaces and team sharing.                |
| **Orbit MCP**          | Conversational, in your assistant | Ad hoc, opportunistic deep dives on a narrow set of companies or one theme, without leaving your AI workflow. |
| **Agent Marketplace**  | Pre-built and custom agents       | A repeatable task you want to run systematically across many entities or on a schedule.                       |
| **Knowledge Base API** | Raw AI-ready data and feeds       | Building your own models or pipelines and you need the clean data layer delivered to your infrastructure.     |

#### The architecture in one line

MCP is the conversational front door to Orbit's RAG infrastructure. It handles the opportunistic framing and the deep dive. When you need scale, the same data opens up through Agents (systematic and scheduled) and the Knowledge Base API (your own pipelines). The teams that get the most from Orbit move fluidly between these surfaces rather than forcing one surface to do every job.

***

### 2. When MCP is the right tool

**Reach for MCP when all three are true:**

* **Narrow question.** Roughly 1 to 5 companies, one theme, or one time window.
* You want to **stay in your assistant**, where you draft memos and explore hypotheses.
* You need **grounded answers with citations**, not the assistant's general training data.

**Use another surface when you want to:**

* Screen 1,000+ names on complex logic → Orbit Insight with Agents.
* Monitor a portfolio continuously → News Signal Pulse or Portfolio News Tracker.
* Extract bulk data for a model → consume the KB via API.
* Run the same job weekly → build or clone an agent.

> **Rule of thumb.** If you ask the AI the same MCP question more than three times in a week, graduate it into an agent. It will be faster, more consistent, and shareable with your team.

***

### 3. How to ask, with examples

Output quality is almost entirely a function of prompt quality. A strong MCP question names five things: the **entity** (be specific), the **scope of documents**, the **time window**, the **analytical lens** (change over time, contradictions, peer divergence, tone shift), and the **output format** you want. The three plays below are the highest-ROI on-ramps we see.

#### Play 01 — Pre-earnings thesis check *(Fundamental analyst)*

> I own \[TICKER] on a thesis of \[one sentence thesis]. Read their most recent 10-Q, the last two earnings call transcripts, and any investor presentations from the past six months. Surface every data point that supports this thesis, and separately every one that challenges it. Flag language changes from the prior quarter. Cite all sources.

#### Play 02 — Temporal delta *(The edge over traditional tools)*

> Read \[TICKER]'s risk factor sections in their last three 10-K filings. What risk factors were added, removed, or materially rewritten between FY22, FY23, and FY24? Show before and after language for each change, and flag which ones relate to AI or capex.

#### Play 03 — Disagreement mining *(Where the signal hides)*

> Compare what \[TICKER] management said about demand in their most recent earnings call versus what is disclosed in their latest 10-Q risk factors. Where is there tension between the two? Highlight the specific language on both sides.

> **Why citations matter for compliance.** Every MCP response cites the source documents behind each claim. For MiFID II or SEC regulated teams using AI-assisted research, that source trail is your audit defense. If an answer comes back without sources, it came from the assistant's training data rather than Orbit, so always require them.

***

### 4. Invoke agents straight from chat

Agents from the Orbit Marketplace can be invoked directly inside your AI assistant. This bridges ad hoc conversation and the systematic, repeatable logic that lives in agents. The most effective pattern: use a direct prompt to explore and frame, invoke an agent for structured, consistent output, then return to a direct prompt to interpret and decide.

> Run the Anti-Greenwashing Checker on BP's most recent sustainability report and prospectus. Give me the structured output, and flag any commitment that is softened or absent across the two documents.

***

### 5. Limits, and where to graduate

MCP runs inside your assistant's chat window, so it inherits a finite context budget and is stateless between sessions. Those are not flaws, they are signposts. Each limit maps to a deeper Orbit capability.

| When you want to                                    | Graduate to                     |
| --------------------------------------------------- | ------------------------------- |
| Run the same analysis on 500+ companies             | Orbit Insight + Agents          |
| Monitor a portfolio continuously                    | Portfolio News Tracker + alerts |
| Produce identical structured output every time      | Custom agent with concepts      |
| Pipe clean text or vectors into a proprietary model | Orbit KB / API feeds            |
| Share a research workspace with a team              | Orbit Insight workspaces        |

***

### Start in two minutes

1. Activate your Orbit MCP key via your account manager or the Orbit Insight settings panel.
2. Add the Orbit MCP server to your assistant (Claude, ChatGPT, Copilot, or Gemini).
3. Verify: *"Using Orbit, summarise the most recent 10-Q for Microsoft with citations."* Confirm the answer cites source documents, then run Play 01 on a name you know well.

***

*Orbit MCP Evaluation Guide — Orbit Financial Technology — V1.0 / Confidential*


# 3. Future Roadmap

#### Expanded Knowledge Base Integration

* **Market Data**: Real-time and historical pricing, volumes, and market indicators
* **News Integration**: Curated financial news from premium sources
* **Regulatory Filings**: Expanded coverage of global regulatory documents
* **Central Bank Content**: Fed, ECB, and other central bank publications
* **Broker Research**: Licensed sell-side research integration

#### Enhanced Research Capabilities

* **Deep Research Mode**: Support for comprehensive, multi-hour research projects
* **Longitudinal Analysis**: Extended historical data beyond 12 months
* **Cross-Asset Analysis**: Integration of equity, fixed income, and alternative data
* **Thematic Research**: Industry-wide and macro theme analysis

#### Workflow Enhancements

* **Custom Templates**: Pre-built templates for common research workflows
  * Earnings analysis template
  * M\&A due diligence template
  * ESG assessment template
  * Sector rotation template
* **Saved Queries**: Reusable query library
* **Scheduled Reports**: Automated periodic analysis

#### Advanced Analytics

* **Batch Calculations**: Process multiple companies/metrics simultaneously
* **Portfolio-Level Analysis**: Aggregate analysis across entire portfolios
* **What-If Scenarios**: Sensitivity analysis and projections
* **Peer Universe Creation**: Dynamic peer group generation

#### Collaboration Features

* **Shared Research**: Team collaboration on queries
* **Annotation System**: Add notes to MCP outputs
* **Export Capabilities**: Direct integration with Excel, PowerBI
* **Audit Trail**: Complete history of research queries


# Appendix A – Language Reference

## Supported Languages

| Code  | Language              |
| ----- | --------------------- |
| af    | Afrikaans             |
| ar    | Arabic                |
| az    | Azerbaijani           |
| bg    | Bulgarian             |
| bn    | Bengali               |
| bs    | Bosnian               |
| ca    | Catalan               |
| cs    | Czech                 |
| cy    | Welsh                 |
| da    | Danish                |
| de    | German                |
| dv    | Dhivehi               |
| el    | Greek                 |
| en    | English               |
| eo    | Esperanto             |
| es    | Spanish               |
| et    | Estonian              |
| eu    | Basque                |
| fa    | Persian               |
| fi    | Finnish               |
| fr    | French                |
| fy    | Frisian               |
| gl    | Galician              |
| gu    | Gujarati              |
| he    | Hebrew                |
| hi    | Hindi                 |
| hr    | Croatian              |
| hu    | Hungarian             |
| id    | Indonesian            |
| io    | Ido                   |
| is    | Icelandic             |
| it    | Italian               |
| ja    | Japanese              |
| kk    | Kazakh                |
| km    | Khmer                 |
| kn    | Kannada               |
| ko    | Korean                |
| la    | Latin                 |
| lo    | Lao                   |
| lt    | Lithuanian            |
| lv    | Latvian               |
| mk    | Macedonian            |
| ml    | Malayalam             |
| mr    | Marathi               |
| ms    | Malay                 |
| mt    | Maltese               |
| my    | Burmese               |
| nl    | Dutch                 |
| nn    | Norwegian Nynorsk     |
| no    | Norwegian             |
| or    | Oriya                 |
| pa    | Punjabi               |
| pl    | Polish                |
| pt    | Portuguese            |
| ro    | Romanian              |
| ru    | Russian               |
| sh    | Serbo-Croatian        |
| si    | Sinhala               |
| sk    | Slovak                |
| sl    | Slovenian             |
| so    | Somali                |
| sq    | Albanian              |
| sr    | Serbian               |
| sv    | Swedish               |
| sw    | Swahili               |
| ta    | Tamil                 |
| te    | Telugu                |
| tg    | Tajik                 |
| th    | Thai                  |
| tl    | Tagalog               |
| tr    | Turkish               |
| tt    | Tatar                 |
| uk    | Ukrainian             |
| ur    | Urdu                  |
| vi    | Vietnamese            |
| yi    | Yiddish               |
| zh    | Chinese (Simplified)  |
| zh-HK | Chinese (Hong Kong)   |
| zh-TW | Chinese (Traditional) |


# Appendix B - Agent Builder User Guide

{% file src="/files/s3358j4yufh9RLgHoHOU" %}

{% file src="/files/zICb4NzrllQBmBVSmQui" %}

{% file src="/files/zY6PxdGkOpua3mUatGc7" %}

{% file src="/files/18j3DLjCoJgfZv7Cg4D3" %}


# Privacy and Data Collection Disclosure

This Privacy and Data Collection Disclosure outlines how Orbit handles user data in connection with our Model Context Protocol (MCP) services and integrations, including through platforms such as Claude, OpenAI APIs, or any LLM Chatbot or API service that follows MCP Standard Protocol.

### Data Collected

Orbit collects minimal user data, strictly necessary for providing MCP access and monitoring usage:

* **Access Logs**: We log user-level activity including authentication events, accessed companies/tickers, query timestamps, and usage frequency.
* **Account Metadata**: We may collect a user's name, email address, and affiliated organization (if applicable) as part of their Orbit Insight subscription.
* **Query Metadata**: We log the number of companies queried and document types accessed for usage analytics and billing purposes.

Orbit does not systematically collect or store user prompts, inputs, or queries. We also do not have access to, and therefore do not store, any LLM-generated outputs (e.g., chatbot responses) resulting from interactions with our MCP server.

### Security and Infrastructure

* The Orbit MCP server implements the MCP OAuth Specification to ensure secure, credentialed access.
* MCP access is strictly read-only. Third parties cannot write to, upload to, or modify any Orbit data via the protocol.
* All data transmissions are encrypted in transit using TLS 1.3 or higher. Internal access is restricted, monitored, and subject to audit controls.

### Third-Party Sharing

* Orbit does not sell, share, or distribute any collected user data or access logs to third parties.
* All data stays within Orbit's secure infrastructure and is used solely for operational, compliance, access monitoring, and internal analytical purposes.
* Aggregated, anonymized usage statistics may be used for product improvement and reporting, but never in a way that identifies individual users.

### Data Retention

* We retain access logs (e.g., login activity, company/ticker usage) for up to 12 months for compliance and internal analytics.
* Account metadata is retained for the duration of your Orbit Insight subscription and up to 90 days after termination.
* No long-term retention of user prompts or LLM outputs occurs, as they are never stored.

### Transparency and Branding

* All users accessing Orbit data via Claude, OpenAI APIs, or similar interfaces are made aware of the integration with Orbit services.
* No white-labeling is permitted. Orbit branding and source attribution remain transparent throughout the user experience.
* All responses include clear citations to official filing sources, maintaining transparency about data provenance.

### User Rights

* Users may request access to their usage logs by contacting **<info@orbitfin.ai>**
* Users may request deletion of their account metadata, subject to legal retention requirements
* Users retain all rights to their queries and any derived insights

### Compliance

* This MCP service complies with GDPR, CCPA, and other applicable data protection regulations
* Financial data access complies with all relevant securities regulations
* Usage is monitored to ensure compliance with our Terms of Service

### Updates to This Disclosure

We may update this disclosure periodically. Users will be notified of material changes via their registered email address.

### Contact

For questions about this disclosure or our data practices, please contact:

* Email: <info@orbitfin.ai>

*Last Updated: August 2025*\
*Version: 1.0*


# 1. What is A2A?

**A2A (Agent2Agent)** is an open industry-standard protocol that enables AI agents built by different vendors and on different platforms to discover, communicate, and collaborate with one another. You can think of A2A as a standardized way for one agent to use another agent as a callable "capability"—without having to write custom integration code for the other party in advance.

\
Core Concepts

**Limitations of traditional agent integration:**

* Every agent platform has its own proprietary interface, and they cannot directly call one another
* To make Platform A call an agent on Platform B, you have to build a dedicated set of custom integration code
* There is no unified "capability discovery" mechanism between agents, requiring manual alignment of documentation before onboarding
* Every time you add a new partner platform, you have to develop the integration logic all over again

**Capabilities enabled by A2A:**

* **Standardized discovery (Agent Card):** An agent can publish a "business card" that declares its name, capabilities, and authentication methods, which other agents can read automatically
* **Any agent is callable:** As long as both sides support A2A, no dedicated integration code needs to be developed in advance
* **Stateful multi-turn collaboration:** Both the caller and the callee can maintain their own multi-turn task context, rather than being limited to a one-off function call
* **Built-in authentication and security:** Standard identity authentication methods are defined at the protocol level, so there's no need to design a separate authorization mechanism

### How A2A Works <a href="#heading-8c53bcd6-01f5-4af4-8fa5-ecfb75200503--how-a2a-works-0" id="heading-8c53bcd6-01f5-4af4-8fa5-ecfb75200503--how-a2a-works-0"></a>

When an agent (whether one you built yourself or a platform like Microsoft Copilot Studio) needs to use the capabilities of Agent Builder, A2A completes a collaboration roughly through the following steps:

1. **Discover:** Read Agent Builder's Agent Card to learn its name, feature descriptions, and available capabilities
2. **Decide:** Based on the user's request, the caller independently determines whether this interaction requires Agent Builder
3. **Call:** When needed, initiate the call via a standard JSON-RPC request, carrying identity credentials
4. **Respond:** Agent Builder processes the request and returns the result, and the caller decides how to present it to the end user
5. **Continue:** Subsequent requests carry the same context identifier, allowing the same conversation/task to continue

### Difference from MCP <a href="#heading-8c53bcd6-01f5-4af4-8fa5-ecfb75200503--difference-from-mcp-0" id="heading-8c53bcd6-01f5-4af4-8fa5-ecfb75200503--difference-from-mcp-0"></a>

MCP (Model Context Protocol) addresses "how a model/agent calls tools and accesses data sources"; A2A addresses "how one agent calls another agent," where both sides can have their own reasoning capabilities and maintain their own multi-turn task state, rather than being limited to a one-way function call.


# 2. Agent Builder A2A Setup

Step 1: Obtain API Key

The caller needs an API Key under an Agent Builder account as an identity credential — all actual A2A calls must carry it.

Step 2: Confirm the A2A Service Address

Agent Builder's A2A service address: <https://studio.orbitfin.ai>[/builder/a2a](https://orbit-api-agent.orbitfin.ai/builder/a2a)

Step 3: Read the Agent Card and Verify Connectivity

The Agent Card is a publicly readable "business card" document that can be accessed without authentication. It is used to confirm whether the service is reachable and what capabilities are currently available: <https://studio.orbitfin.ai>[/builder/a2a/.well-known/agent-card.json](https://orbit-api-agent.orbitfin.ai/builder/a2a/.well-known/agent-card.json)

The returned content includes Agent Builder's name, feature description, supported authentication methods, and the complete list of capabilities (Skills) — if you can successfully obtain this document, it means this step is configured correctly.

Authentication Methods

The Agent Card declares two optional authentication methods (satisfying either one is sufficient):

| Method       | Usage                                               |
| ------------ | --------------------------------------------------- |
| API Key      | Request header `X-API-Key: YOUR_API_KEY`            |
| Bearer Token | Request header `Authorization: Bearer YOUR_API_KEY` |

Calls without a valid credential will be rejected; reading the Agent Card itself does not require authentication.


# 3. Agent Builder A2A Tools

The capabilities (Skills) exposed by Agent Builder through A2A fall into two major categories: querying and running existing Agents, and creating brand-new Agents step by step. The caller does not need to know this list in advance — reading the Agent Card provides the latest capability list. It is listed here to make it easier to understand what each capability specifically does.

Querying and Running Existing Agents

| Capability           | Description                                                                                                                           |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Find/List Agents     | Find existing Agent Builder agents under your account by name, topic, or status, without needing to know their internal ID in advance |
| Check Agent Status   | View whether a certain Agent is currently ready and can be run                                                                        |
| Run Analysis         | Trigger an analysis run                                                                                                               |
| Get Analysis Results | Retrieve the structured results or report of a certain analysis run                                                                   |

Creating a Brand-New Agent Step by Step

Creation is a guided, step-by-step conversational process led by Agent Builder, where each step can be individually redone or edited:

| Step | Capability       | Description                                                                                                                                            |
| ---- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 1    | Framework Design | Generate an analysis framework (dimensions and sub-dimensions) based on requirements described in natural language                                     |
| 2    | Field Design     | Map each dimension of the framework into specific fields that need to be extracted/scored                                                              |
| 3    | Data Source      | Select data sources, time span, and collection frequency                                                                                               |
| 4    | Report Frequency | Set the generation frequency of analysis reports                                                                                                       |
| 5    | Analysis Target  | Set the analysis target (specific company or portfolio)                                                                                                |
| —    | Edit Draft       | Make local adjustments to the draft of completed steps, without redoing the entire step                                                                |
| —    | View Draft       | View the complete content and progress of the current draft (which steps are completed, which are still missing)                                       |
| —    | Discard Draft    | Discard the current in-progress draft and start over                                                                                                   |
| —    | Create Agent     | After all steps are completed, formally create the Agent (an irreversible operation that will actually persist the configuration and begin generation) |


# 4. Integration Example

Agent Builder currently provides server-side capabilities externally through the A2A protocol. There are two integration methods:

Method One: Custom Agent Integration with A2A — Build your own intelligent agent with reasoning capabilities (the "outer Agent"), which autonomously decides when to call Agent Builder through the A2A protocol.

Method Two: Integration with A2A through an Existing Online Service — Directly integrate Agent Builder into the agent platform you are already using (for example, Microsoft Copilot Studio), without needing to develop any outer agent yourself.

<br>


# 4.1 Custom Agent Integration Example

In this method, you build your own "outer Agent" with reasoning capabilities — it autonomously determines whether the user's request needs to call Agent Builder, what to call, and how to present the results.

To make it easy for you to get started directly, we provide a standalone reference SDK that does not depend on any internal code, containing a complete reference implementation of an outer dispatcher agent and a visual chat page.

**Step One: Download the SDK**

Download URL: <https://oassets.orbitfin.ai/orbit-common-resources/agent-builder-a2a-sdk/agent-builder-a2a-sdk.zip>

It is ready to use after extraction. For detailed installation dependencies and credential configuration steps, please refer to the README.md (in English) inside the archive, which fully explains:

* How to install dependencies (pip install -r requirements.txt)
* The difference and configuration methods between the two sets of credentials — your own OpenAI API Key (which drives the outer dispatcher agent's own reasoning capabilities, configured in the .env file) and Agent Builder's API Key (used for identity authentication when calling Agent Builder itself, filled in the web settings panel)
* The startup command (python server.py)

**Step Two: Open the Page, Connect to Agent Builder**

After successful startup, access <http://localhost:8787> in the browser. On first open, the "Connection Settings" panel will pop up automatically. Fill in Agent Builder's API Key, click "Test Connection", and after success it will display Agent Builder's name, function description, and the number of capabilities (Skills). Click "Save" to enter the chat interface.

<figure><img src="/files/9WfmFQ4LVjVbo8DovbQn" alt=""><figcaption></figcaption></figure>

(Connection Settings panel — fill in Agent Builder's API Key)

<figure><img src="/files/R3ts3F7rg9L7EIl4eg5h" alt=""><figcaption></figcaption></figure>

(Test Connection successful — displays Agent Builder's real name, description, and number of capabilities)

**Step Three: Start the Conversation**

Now you can chat directly with the outer dispatcher agent, and it will determine on its own whether to call Agent Builder. A few example questions:

* Query existing Agents: "What agents do I have?" — you should see the call actually happen (a "Called Agent Builder via A2A" label appears below the reply), and a new record synchronously appears in the call records panel on the left
* Create a new Agent: "Help me build an agent that analyzes NVIDIA's supply chain risk." — Agent Builder will guide you through the framework, fields, data source, report frequency, and analysis target steps; reply continue at each step to advance to the next
* Verify calls are not abused: "What can you help me with?" — for such a question that clearly does not need Agent Builder, ideally it should not trigger a call, no new entry will be added to the call records, and this can be used to test whether the outer Agent's judgment is reasonable

<figure><img src="/files/nCipiJrH7d3fuSyLlHfs" alt=""><figcaption></figcaption></figure>

(Real conversation effect — after the outer Agent determines a call is needed, it obtains Agent Builder's real reply through the A2A protocol (here it is querying the list of existing Agents), with a Called Agent Builder via A2A label below the reply)

<figure><img src="/files/mAbDuO4JuvrvnkJIfaPx" alt=""><figcaption></figcaption></figure>

(A2A call records panel on the left — every A2A call that actually occurs is displayed here in real time, including the called capability, raw parameters, and raw return results, used to verify that this is real collaboration between two independent systems, rather than a pre-written effect)

**Frequently Asked Questions (Related to SDK Usage)**

* Prompt "Unable to connect to Agent Builder": Check whether the API Key in the settings panel is correct.
* The outer Agent does not call Agent Builder at all: Check whether the OPENAI\_API\_KEY in .env is valid — the outer Agent's own reasoning step depends on it; after modifying .env, you need to restart server.py for it to take effect.
* Everything you say triggers a call, including clearly irrelevant questions: This is a reflection of the outer dispatcher agent's real judgment capability, not a bug in this SDK — this demonstration itself is designed to observe how accurately an LLM, without additional fine-tuning, can judge the matter of "whether or not to call".


# 4.2 Copilot Studio Integration Example

This method does not require developing any outer agent yourself; you directly integrate Agent Builder as a "connected agent" into the platform you are already using. Taking Microsoft Copilot Studio as an example:

6. Enter the target Agent's settings: Log in to Copilot Studio, enter the target agent that needs to integrate Agent Builder, and open "Settings" in the left navigation bar. \[Illustration: Copilot Studio settings page screenshot]
7. Confirm generative orchestration is enabled: In "Settings → Generative AI", confirm that "Whether to use generative AI orchestration for the agent's responses" is set to "Yes — use available tools and knowledge as needed". Only when this option is enabled will Copilot Studio's own orchestration layer autonomously decide to call the connected agent at the appropriate time. \[Illustration: Generative AI orchestration settings page screenshot]
8. Add a connected agent: Enter "Connected agents" in the left navigation bar, add a new connected agent, and fill in Agent Builder's A2A service address and authentication information (API Key). \[Illustration: Connected agents configuration page screenshot]
9. Save and wait for discovery: After saving the configuration, Copilot Studio will automatically read Agent Builder's Agent Card to learn its name, description, and available capabilities, with no additional manual registration required. \[Illustration: Screenshot showing successful connection and Agent Builder information]
10. Test in a real conversation: Open Copilot Studio's test conversation window and ask questions directly in natural language, for example "What Agent Builder agents do I currently have" or "Help me create a new analysis Agent". Copilot Studio will autonomously determine whether it needs to call Agent Builder. \[Illustration: Copilot Studio test conversation window screenshot]

Note: After Copilot Studio calls Agent Builder and obtains the results, it will reorganize the language using its own generative orchestration logic before presenting it to the end user, rather than directly forwarding Agent Builder's raw reply — this is the unified handling method that Copilot Studio applies to all integrated third-party agents, and does not indicate that there is a problem with Agent Builder's output. If you need to see Agent Builder's unprocessed raw reply, you can refer to "4.1 Custom Agent Integration Example" to test directly.


# 5. A2A Best Practices

Call by default, don't let the outer Agent guess blindly If the user's message may be related to your own Agent Builder agent, prioritize calling Agent Builder to confirm, rather than answering directly based on the outer Agent's own knowledge — the cost of one unnecessary call is far lower than the cost of guessing wrong once.

Make good use of multi-turn context The creation process is completed step by step. Be sure to include the contextId in each round of requests, otherwise Agent Builder will treat the new request as a brand-new interaction and cannot correctly advance the previous draft.

Show the raw results as much as possible to reduce semantic loss The content returned by Agent Builder has already been designed (structured data + readable text). The less the outer Agent paraphrases, the higher the information fidelity. If paraphrasing is necessary, avoid restating structured facts such as numbers and lists — copy them directly, do not rewrite them from memory.

Convert authentication failures / network exceptions into user-friendly prompts Do not display the raw error stack directly to the end user; after catching the exception, convert it into a simple prompt (for example, "Temporarily unable to connect, please try again later"), and preserve the possibility of retrying.

For scenarios that require "seeing progress in real time", use message/stream For time-consuming interactions such as step-by-step creation, using the SSE streaming interface allows users to see intermediate progress, rather than waiting a long time for a one-time return.

Do not hard-code which capabilities Agent Builder supports Agent Builder's capabilities will continue to grow. Reading the Agent Card gives you the current latest list of capabilities, so there is no need to maintain a static list in your own code.


# 6. Frequently Asked Questions

Q: How should I choose between the two integration methods? If you want to quickly verify Agent Builder's own capabilities and see the most raw interaction process, choose 4.1; if you are already using a platform like Copilot Studio and want to integrate Agent Builder as one of the callable agents into your existing environment, choose 4.2.

Q: Why is the wording of the replies different when asking the same question through the two methods? In 4.1 you see Agent Builder's raw reply without any processing; in 4.2 the language is reorganized again through Copilot Studio's own generative orchestration, which is the platform's expected behavior and does not indicate that either side is "in error".

Q: Does integration require additional development work? Methods like Copilot Studio require no coding at all — you just configure it on the interface; for custom Agent integration, if you use the SDK we provide, you only need to install dependencies, configure the .env, and start one command, with no additional development needed.

Q: How is data security ensured? Each call must carry your own API Key for identity authentication, and Agent Builder will only return data that the identity has permission to access.


# Document Fetching Guidance

### Environment Setup

**Specification**

Orbit will provide a folder under **orbit-data-provider** AWS S3 bucket.Orbit will provide an AWS S3 **Key Pair** for accessing the data under the prepared S3 folder.

**With Your Case**

In your case:

* The AWS S3 folder will be: s3://orbit-data-provider/clients/jpmorgan/
* Key Pair will be provided in separate file.

### Way to fetch data

**Specification**

As the raw report data is really large, Orbit will only provide the report index in our client folder.After Client get the index, then clients can download the raw report as needed.\
The data is updated in real time and clients can use any SKD (like boto3 in Python) to fetch the data which client would like to use.

* The SDK will leverage the **Key Pair** to get permissions for accessing the data.

**Get data**

Below screenshot is the sample data we delivered (The data will be delivered according to specific client requirements for real delivery).

* Each file represents a report;
* The name of the file is by CURRENT UTC TIME + REPORT ID, in this way can be easy to filter with aws SDK.

<figure><img src="https://ra97ksj7al.feishu.cn/space/api/box/stream/download/asynccode/?code=YWE0YWZhZjcxNDZhZThlYmQ2YWNkN2EyZjc3Y2ExYjRfZkpLSENWZWRpRzVTSGJZdjJ5UWlRc2Q2SlAzQXBkZWxfVG9rZW46UDJ5Q2IxeDQzb2JwOVJ4eGlmYWNBZmNGbnhoXzE3NTYzODE3MjM6MTc1NjM4NTMyM19WNA" alt=""><figcaption></figcaption></figure>

* There is a **presigned\_url** key in each report(each line) for downloading the raw report.

```json
{
  "report_id": "f_7UrMt7SKXYWoDKIWjZpOCb",
  "reported_at": "2025-04-04",
  "report_title": "DEF 14A",
  "report_type_id_list": [
    "10178"
  ],
  "company_info": [
    {
      "orbit_id": "1-4295904557",
      "company_name": "MORGAN STANLEY",
      "isin": [
       "US61747S5047",
      ],
      "ticker": [
        "MS"
      ],
      "country": [
        "US"
      ]
    }
  ],
  "attachments": [
    {
      "s3_path": "s3://filing-reports/reports-data/stock_us/2025/04/04/edgar-data-895421-000114036125012302-ny20039620x1_def14a.htm.pdf",
      "presigned_url_4_file": "https://filing-reports.s3.amazonaws.com/reports-data/stock_us/2025/04/04/edgar-data-895421-000114036125012302-ny20039620x1_def14a.htm.pdf?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=DBaDcO1qTdYPzcxwQa5TFd8tYGg%3D&Expires=1749017986",
      "presigned_url_4_pages": "https://filing-reports.s3.amazonaws.com/txt-vector/reports-data/stock_us/2025/04/04/edgar-data-895421-000114036125012302-ny20039620x1_def14a.htm.pdf/pages.txt?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=e9JyxeMDEQyklR9LhQTnLc82gH8%3D&Expires=1749017986",
      "presigned_url_4_blocks": "https://filing-reports.s3.amazonaws.com/txt-vector/reports-data/stock_us/2025/04/04/edgar-data-895421-000114036125012302-ny20039620x1_def14a.htm.pdf/blocks.txt?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=qGcmz4k6JPXSKWUoQyUOW7FWLmY%3D&Expires=1749017986",
      "presigned_url_4_pages_vector": "https://filing-reports.s3.amazonaws.com/txt-vector/reports-data/stock_us/2025/04/04/edgar-data-895421-000114036125012302-ny20039620x1_def14a.htm.pdf/pages.txt.vector?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=%2FIauqGI%2BuEHA0ym5s1%2Bsy4pUDaA%3D&Expires=1749017986",
      "presigned_url_4_blocks_vector": "https://filing-reports.s3.amazonaws.com/txt-vector/reports-data/stock_us/2025/04/04/edgar-data-895421-000114036125012302-ny20039620x1_def14a.htm.pdf/blocks.txt.vector?AWSAccessKeyId=AKIAZ2SDT5DU46K54RGA&Signature=jcWGfstmaGhF0N0BU7uhrY9cdMQ%3D&Expires=1749017986"
    }
  ],
  "x_version": 1
}
```

Clients can read the data in a programming way.

> The code below is to use the boto3 SDK in Python.

```python
import json
import boto3

s3_client = boto3.client('s3', aws_access_key_id="your key id", aws_secret_access_key="your secret key")

bucket_name = 'orbit-data-provider'
prefix = 'clients/abc/'  # Your owned data folder

response = s3_client.get_object(Bucket=bucket_name, Key="clients/marketscreener/streaming/20241108072151_f_gNEoQE9TllGsQhHjAIambp.json")
file_content = response['Body'].read().decode('utf-8')

print(json.loads(file_content))  # Decode data in json format
```

⚠️ Please be notified that the expiration of **presigned\_url** is typically 7 days. But you can also regenerate them again by using **s3\_path** key in the index file. Below is the sample code.

```python
import json
import boto3
import os
import re

s3_client = boto3.client('s3', aws_access_key_id="your key id", aws_secret_access_key="your secret key")


def gen_n_files_presign_url(s3_path):
    s3_path_obj = s3_split_path(s3_path)

    presigned_url_pdf = s3_client.generate_presigned_url(
        'get_object',
        Params={
            'Bucket':  s3_path_obj["bucket"], 
            'Key': s3_path_obj["store_path"]
        },
        ExpiresIn=604800
    )  # 7 days

    return presigned_url_pdf

# Tool method
def s3_split_path(s3_path: str):
    if not s3_path.startswith('s3://'):
        raise Exception("Invalid s3 path format.")

    s3_path_re = re.compile(r"(s3://[a-zA-Z\-_0-9]+)/(.+)")
    path_group = s3_path_re.search(s3_path).groups()
    return {
        'bucket': path_group[0].replace('s3://', ''),
        'store_path': path_group[1],
    }
```


