Wednesday, October 7, 2026
Financial Answers an Agent Can Cite

Ask a language model what Apple earned in fiscal 2023 and you will get a confident number. It may be right. It may be fiscal 2022, or revenue instead of net income, or a figure from a news summary that rounded it. The answer reads the same either way, and nothing in it tells you which one you got.
A tool that returns the right number solves half of that. The other half is returning where the number came from, so the agent can say which filing it read and anyone reading the answer can check it.
What a citable figure carries
A figure an agent can stand behind needs more than a value:
- The filing. The accession number of the SEC filing the value was read from, so a reader can open the document.
- When it became public. The time the SEC accepted that filing, which is not the same as the period it covers.
- The line it came from. The XBRL concept the filer tagged, such as
us-gaap:NetIncomeLoss. - Whether the filer stated it. Some lines on a normalized statement are reported by the company and some are computed from other lines. An agent should know which it is quoting.
- The snapshot. A fingerprint of the exact data the answer was read from, so the same answer can be produced again later.
Arche returns all five with every as-of answer, over MCP as well as REST. The MCP tools call the same routes your code would, under the same API key, so an agent and a developer looking at the same company on the same date see the same figures.
Connect an agent
Arche's MCP server runs at https://api.arche.fi/mcp. With Claude Code it is one command:
claude mcp add --transport http arche https://api.arche.fi/mcp \
--header "X-Api-Key: YOUR_API_KEY"Any client that can reach a remote MCP server over HTTP with a custom header works the same way. The tool list, with each tool's input schema and the plan it needs, is published at https://api.arche.fi/mcp/manifest and needs no key, so an agent can read it before it connects.
A cited answer, step by step
Ask the agent: What did Apple earn in fiscal 2023, and where does that figure come from?
It resolves the ticker with companies_resolve, which returns Apple's CIK, 0000320193. Then it asks for the one statement the question needs, as of the day we wrote this:
{"name": "financials_get_as_of_snapshot",
"arguments": {"cik": "0000320193", "as_of": "2026-10-06",
"statement_type": "INCOME_STATEMENT",
"fiscal_year_from": 2023, "fiscal_year_to": 2023,
"fiscal_period": "FY"}}Without filters, the tool returns the most recent statement of each type and reports how many it left out. Apple's snapshot on that date holds 212 statements; this call matches one. The statement carries its filing, and each value carries the line it came from:
{"snapshot": {
"as_of_date": "2026-10-06",
"snapshot_hash": "793c32d76b87781a7a6c6280cd604aa5170b09e2cbd7726001b4a2bbafa43d0f",
"statements": [{
"statement_type": "INCOME_STATEMENT",
"fiscal_year": 2023, "fiscal_period": "FY", "filing_type": "10-K",
"accession_id": "0000320193-23-000106",
"filing_date": "2023-11-03", "accepted_at": "2023-11-02T22:08:27Z",
"normalized_payload": {
"facts": [{
"metric": "NET_INCOME", "unit": "USD", "value": "96995000000",
"period_start": "2022-09-25", "period_end": "2023-09-30",
"source_line_item": "us-gaap:NetIncomeLoss",
"value_origin": "SOURCE"}]}}]}}So the agent can answer with its source:
Apple reported net income of $96,995,000,000 for fiscal 2023, the year ended September 30, 2023. The figure comes from its 10-K, accession 0000320193-23-000106, accepted by the SEC on November 2, 2023. Apple reported it directly as us-gaap:NetIncomeLoss; it was not computed from other lines.Every part of that answer can be checked against the filing, and the reader doesn't have to trust the model for any of it.
The date matters to an agent too
Agents are often asked about the past: what an analyst could have seen before an earnings call, or what a company had disclosed by the date of a decision. Pass the agent's question date as as_of and it gets only what had been filed by then.
Ask for Apple's fiscal 2023 income statements as of November 1, 2023, and the result holds the first three quarters and no annual statement, because the 10-K had not been filed. An agent working from that snapshot can't quote full-year figures that weren't public, however sure it is of them.
A date counts filings by the day the SEC dated them. When the hour matters, pass a timestamp instead, and the boundary becomes the moment the SEC accepted each filing. Apple's 10-K was accepted at 6:08 pm Eastern on November 2 and dated November 3. As of 2023-11-02T18:30:00-04:00, it is in the snapshot.
If a company later restates, an as-of query returns the version that was on file on the date you ask about. The agent cites the filing that actually answered the question on that day, not the one that replaced it.
Tell the agent to cite
A model uses provenance only if it is told to. A few lines in the system prompt are enough:
When you state a financial figure from Arche:
- give the accession number of the filing it came from
- give the fiscal period and the date the SEC accepted the filing
- say so when value_origin is DERIVED, and name what it was computed from
- if no statement covers the period as of the date asked, say there is noneThe last line matters as much as the others. An empty answer for a period that hadn't been filed is correct, and an agent should report it rather than fill the gap from memory.
Proving the answer later
Every as-of response carries a snapshot_hash over the exact statement versions in the snapshot. A filtered call reports the hash of the whole snapshot, not of the slice it returned, so the agent's narrow answer and a full query by your code carry the same fingerprint.
To keep a record of an answer, run the query through the deterministic query endpoint, which also returns a replay token:
curl -s -X POST "https://api.arche.fi/v1/query/execute" \
-H "X-Api-Key: $ARCHE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query_type": "financials_as_of", "as_of_date": "2026-10-06",
"include_result": true, "parameters": {"cik": "0000320193"}}'The manifest it returns names the snapshot the answer was read from, the same hash the agent received:
{"replay_token": "52a586a1c54f6547…",
"query_type": "financials_as_of", "as_of_date": "2026-10-06",
"snapshot_hashes": ["793c32d76b87781a7a6c6280cd604aa5170b09e2cbd7726001b4a2bbafa43d0f"],
"status": "COMPLETED"}Months later, GET /v1/query/replay/{token} returns the original response exactly as it was served, checked against its stored hash. It also re-runs the query: recomputed_verified means the data still produces the same answer, and recomputed_diverged means something has changed since, such as a restatement, with today's result alongside the original. Either way you can show what the agent saw.
What this does not do
Provenance doesn't stop a model from misquoting what it was given. It makes a misquote detectable, because every figure points to a filing anyone can open. Arche covers SEC filers from 2009 onward. It holds what companies filed, not prices or estimates.
Try it
MCP is included on every Arche plan, including Free, which covers any 25 companies with no card. The same key works over REST and MCP. Get a free API key, or read the MCP guide.
