- Data Retrieval: When company data or documents are ready (verification data).
- Monitoring: When a monitored company changes (Monitoring API).
Configuration
You configure webhooks in the Topograph Dashboard under Developers > Webhooks.Verification (Security)
You should verify every webhook to ensure it actually came from us.1. Get your signing secret
You can find your endpoint’s signing secret (starting withwhsec_) in the Dashboard.
2. Verify the signature
We include headers in every request to allow verification:svix-id: Unique message IDsvix-timestamp: Timestampsvix-signature: The signature itself
Event Types
company.updated
Sent when company data is retrieved or updated. Webhooks are sent progressively as data becomes available - you may receive multiple webhooks for the same request as different data points complete. The payload matches the response you get by calling GET /v2/company/{requestId}, plus an added type field.
| Field | Description |
|---|---|
type | Event type identifier (company.updated) |
request.requestId | Unique identifier to correlate webhooks with your original request |
request.version | Monotonic snapshot version for this requestId. A higher value is a newer snapshot. Use it to discard stale, out-of-order deliveries (see Ordering and duplicate delivery). |
request.dataStatus | Status of each data point (succeeded, in_progress, enriching, failed). enriching means the datapoint is in progress with an intermediate AI enrichment result available. |
company | Core company information |
ultimateBeneficialOwners | Array of beneficial owners (when available) |
legalRepresentatives | Array of legal representatives (when available) |
shareholders | Array of shareholders (when available) |
documents | Retrieved documents with signed download URLs |
monitor.notification
Sent when a monitored company changes status or details.
status- Company status changed (active, dissolved, etc.)address- Legal address changedownership- Shareholders or UBOs changedfinancial- Capital or financial information changedlegalRepresentatives- Legal representatives or directors changedother- Other changes detecteddisappeared- Company no longer found in register
Ordering and duplicate delivery
Webhooks for the samerequestId are not guaranteed to arrive in order, and the same event can be delivered more than once due to retries. A company.updated that fails on its first delivery is retried later and can land after a newer one that succeeded immediately. Two rules keep your data correct:
- Each payload is a full snapshot, identical to what
GET /v2/company/{requestId}returned at the time it was sent. Merge it into your store per data point. Do not blindly replace your record based on arrival order, or a latein_progressdelivery can overwrite newer data. - Use
request.versionto reject stale updates. It increases every time the snapshot changes for arequestId. Track the highestversionyou have applied perrequestIdand ignore any webhook whoseversionis lower than or equal to it. The latein_progressdelivery carries a lowerversionthan the final one, so this drops it.
request.version is scoped to a single requestId. Do not compare it across different requests.
Retry Policy
If your server returns an error (non-2xx status) or times out, we will retry delivery with exponential backoff.- First retry: Immediate
- Subsequent retries: Increasing delays (seconds, minutes, hours)
- Duration: We retry for up to 3 days