Signals. Infra
Webhooks

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.

TopicFires when
datapoint.publishedA served datapoint appears for a new period, or a new series appears (first_publish: true).
datapoint.correctedA 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_updatedOnce per company and period whose datapoints changed, with datapoints_changed.
document.addedA 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.

On this page