Data events
Datapoint and document events, their envelope, retries, and test events.
Four topics tell you when the data you read has changed. They are available on
Builder and above, delivered as signed webhooks, and the same events can be
pulled with GET /v1/updates if you would rather poll.
| Topic | Fires when |
|---|---|
datapoint.published | A served datapoint appears for a new period, or a new series appears (first_publish: true). |
datapoint.corrected | A served datapoint changes. correction_type is value (the number changed), tagging (the same reading moved to another series) or merging (a series was folded into another). old and new carry the value, series and source. |
company.data_updated | Once per company and period whose datapoints changed, with datapoints_changed. |
document.added | A 10-K, 10-Q, 8-K earnings exhibit, transcript or IR document for a covered company is admitted for serving. |
Events are computed from what the API actually serves, not from pipeline status: a datapoint event fires when the value a read returns has changed. Adding a company to your watch does not replay its history.
Envelope
{
"id": "evt_3a9e0c5d1b2f4a6e8c7d",
"type": "datapoint.published",
"created_at": "2026-08-05T21:15:00+00:00",
"is_test": false,
"data": {
"ticker": "ACME", "cik": "0000000001",
"series_key": "kpi:paid_subscribers",
"fiscal_period": "FY2026-Q2", "period_end": "2026-06-30",
"value": 1250000, "unit": "count",
"src_id": "src_kpi2_0123456789abcdef",
"source_url": "https://www.sec.gov/Archives/edgar/data/1/000000000126000001/ex99.htm",
"provisional": true, "first_publish": false
}
}id is stable: a redelivery, and the same event read through /v1/updates,
carry the same id, so dedupe on it. provisional: true means no periodic
filing (10-Q, 10-K, 20-F, 40-F) states the value yet; it is an earnings-day
number from the release, call or deck.
Delivery and retries
Each delivery is signed exactly as described in Security. Any 2xx acknowledges it. Anything else, or no answer within 10 seconds, is retried with backoff (30 seconds, doubling) up to 6 attempts, after which the delivery is marked failed. An account may register up to 10 endpoints.
Test events
Send a sample of any topic to an endpoint:
curl -X POST "https://api.signals.ai/v1/webhook-endpoints/$ENDPOINT_ID/test" \
-H "Authorization: Bearer $SIGNALS_KEY" \
-H "Content-Type: application/json" \
-d '{"topic": "datapoint.corrected"}'A test event carries "is_test": true and a sample flag in data, is signed
with the endpoint's secret, is not stored, and is not metered.