Tuesday, Nov. 3, 2026
Companies revise numbers they already reported. Arche tells your app when.

On November 10, 2025, Comtech Telecommunications reported net sales of $499.5 million for its fiscal year ended July 31, 2025. On October 14, 2026, its next annual report gave net sales for the same year as $300.9 million.
Nothing had been corrected. Comtech has agreed to sell most of its satellite and space business, so the new 10-K reports that business as discontinued operations and recasts the prior year to match. The net loss for fiscal 2025 is $155.3 million in both filings, and the diluted loss per share is $6.95 in both. Revenue for the year is 40% lower in the new filing, and the operating loss went from $139.1 million to $29.9 million.
If your application shows fundamentals, Comtech’s fiscal 2025 figures were already on your users’ screens. Fiscal 2026 net sales were $249.6 million, reported on the new basis. Set beside the $499.5 million first filed, that reads as a 50% decline in revenue. Against the recast $300.9 million it is 17%.
Both 2025 figures are correct as filed. What your app needs is to know that the second one exists.
A webhook when a filing changes a figure
When a filing changes figures a company has already reported, Arche records a restatement alert and sends restatement.detected to each endpoint you have registered. Comtech’s, abridged:
{
"event_type": "restatement.detected",
"cik": "0000023197",
"ticker": "CMTL",
"accession_id": "0000023197-26-000114",
"prior_accession_id": "0000023197-25-000080",
"statement_type": "INCOME_STATEMENT",
"fiscal_year": 2025,
"fiscal_period": "FY",
"accepted_at": "2026-10-14T20:50:23Z",
"facts_changed_count": 13,
"materiality_score": "CRITICAL",
"summary_metrics": [
{
"metric_code": "operating_income",
"change_type": "VALUE_REVISION",
"old_value": "-139098000",
"new_value": "-29904000",
"delta_value": "109194000"
},
{
"metric_code": "revenue",
"change_type": "VALUE_REVISION",
"old_value": "499528000",
"new_value": "300871000",
"delta_value": "-198657000"
}
],
"model_impacts": [
{
"impact_code": "diluted_eps",
"previous_value": "-6.95",
"current_value": "-6.95",
"delta_value": "0.00"
},
{
"impact_code": "net_margin",
"previous_value": "-0.3109",
"current_value": "-0.5162",
"delta_value": "-0.2053"
}
]
}The alert names both filings by accession number, so each figure traces to the document it came from. materiality_score grades the change from NONE to CRITICAL, and summary_metrics lists up to eight of the most material changes, with the old and new value of each.
model_impacts carries the effect on derived figures. Here the bottom line did not move: diluted EPS is unchanged. Net margin went from −31.1% to −51.6%, because the revenue beneath it fell. A check that compared only net income would have passed this filing.
That gives your app something to act on. A CRITICAL change can refresh the company’s page and say what changed. A LOW one can refresh quietly.
Both versions stay on the record
Arche does not overwrite the figure Comtech first filed. Ask for its fiscal 2025 income statement and you get the 10-K as filed, with revenue of $499.5 million, and the row names the filing that recast it:
{
"accession_id": "0000023197-25-000080",
"filing_type": "10-K",
"statement_date": "2025-07-31",
"is_restated": false,
"restated_by_accession_id": "0000023197-26-000114"
}So an app reading the default view can tell a figure has been superseded without waiting for a webhook. Add include_restated=true, and fiscal 2025 comes back once for each filing that reported it:
curl "https://api.arche.fi/v1/edgar/companies/0000023197/statements?statement_type=INCOME_STATEMENT&from_date=2025-07-31&to_date=2025-07-31&include_restated=true" \
-H "X-Api-Key: YOUR_API_KEY"| Filing | Accepted | Revenue | Operating income | Net income |
|---|---|---|---|---|
| 10-K, 0000023197-25-000080 | 2025-11-10 | $499,528,000 | −$139,098,000 | −$155,302,000 |
| 10-K, 0000023197-26-000114 | 2026-10-14 | $300,871,000 | −$29,904,000 | −$155,302,000 |
The later row carries is_restated: true. When your users compare fiscal 2026 with fiscal 2025, you can show both years on the same basis. And when someone asks why last month’s page showed a different number, the filing behind each is in the same response.
Receiving it
Register an HTTPS endpoint on the Webhooks page of the developer portal, or over the API. Each endpoint gets its own signing secret, starting with whsec_. Every delivery carries X-Arche-Signature: t=<unix seconds>,v1=<hex>, an HMAC-SHA256 of the timestamp, a period and the raw request body. Verify it before acting on the delivery:
import { createHmac, timingSafeEqual } from 'node:crypto'
export function verifyArcheSignature(secret: string, header: string, rawBody: Buffer): boolean {
const parts = Object.fromEntries(header.split(',').map((item) => item.trim().split('=', 2)))
const timestamp: string | undefined = parts.t
const received: string | undefined = parts.v1
if (!timestamp || !received || !/^\d+$/.test(timestamp)) return false
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false
const expected = createHmac('sha256', secret).update(`${timestamp}.`).update(rawBody).digest('hex')
const a = Buffer.from(expected)
const b = Buffer.from(received)
return a.length === b.length && timingSafeEqual(a, b)
}Reply with a 2xx within ten seconds, and do slower work, such as refreshing cached statements, afterwards. Arche makes up to three attempts. A delivery can arrive more than once or out of order, so skip any X-Arche-Dedupe-Key you have already processed and order alerts by accepted_at.
A missed delivery loses nothing. Every alert stays available from GET /v1/edgar/restatement-alerts, filtered by company, date or materiality, so a receiver that was down can catch up when it restarts:
curl "https://api.arche.fi/v1/edgar/restatement-alerts?from=2026-10-01&materiality_score=CRITICAL" \
-H "X-Api-Key: YOUR_API_KEY"A second event, statement.created, announces the first statement a company files for a new period, so the same receiver can learn about new 10-Ks and 10-Qs as well as revisions.
Try it
The restatement alerts endpoint comes with every plan, including Free. Webhooks start on the Developer plan, with three endpoints, and Growth and above have no limit. The Free plan is for building and testing; showing Arche figures to your users takes a paid plan.
Get a free API key and list the alerts for companies you follow, or read how webhooks are signed, retried and rotated.
