- 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.
monitor.notification
Sent when a monitored company changes status or details.
metadata echoes the key-value pairs you set when creating the monitor (POST /v2/monitors). Use it to map the notification back to your internal records. The field is only present when the monitor has metadata.
Change categories:
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
POST /v2/monitors/{monitorId}/test-notification. See Monitoring.
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