Monitor real-time system status at
status.topograph.co.
The speed vs. robustness trade-off
Same endpoint (POST /v2/company), different behavior by mode:
The legacy
POST /v2/onboarding route follows the same fast-path strategy but is deprecated; prefer mode: "prefill". See Data retrieval modes.
Retry strategies
Prefill mode (mode: "prefill")
Designed for real-time user flows where latency matters most.
- Timeout: Hard 10-second deadline per datapoint. Datapoints that do not finish in time fail with error code
onboarding_timeout. Any partial data that arrived before the deadline is still returned. - Retries: Minimal. We do not retry transient register errors that would delay the response significantly.
- Priority: Speed over completeness. Retry without
mode: "prefill"if you need the datapoint the slow way.
Verification mode (default POST /v2/company)
Designed for back-office processes where data completeness is critical.
- Timeout: Long. We accept that some requests might take minutes if the register is struggling
- Retries: Exponential backoff strategies. For scheduled register maintenance or temporary outages, we may retry for up to 1 hour
- Priority: Eventual success over immediate failure
Error handling
Errors come back at two levels. An HTTP error status means the request itself was refused. Once aPOST /v2/company request is accepted, a problem with one datapoint or document does not change the HTTP status: the response is still 200 or 201, and the item is marked failed in request.dataStatus with an error.code.
HTTP status codes
When a request is refused, the body’serror.code uses the same vocabulary as the item-level codes below.
Datapoint and document error codes
These appear inrequest.dataStatus on the response and in company.updated webhooks. Each failed item carries a code, a human-readable message you can show your own users, retryable, and, when retryable, retryAfterSeconds:
error.code is listed below with its fixed retryable flag and the recommended minimum wait before you resubmit. The same list is the PublicErrorCode enum in the API reference, with the same description on every value, so a generated client can switch on it. Failed items are never charged.
retryable: false means the same request returns the same answer: do not retry it, and do not alert on the codes that are a legitimate “nothing to report” (see Retrieve a company). Switch on error.code or on error.retryable, never on error.message; messages change, codes and flags are stable.
Retrying a retryable item
Five codes are retryable:service_unavailable, source_unavailable, processing_failed, request_cancelled and processing_interrupted. For those:
- A retry is a new
POST /v2/companywith the same body, or with only the failed datapoints. PollingGET /v2/company/{requestId}reads the existing result; it never re-runs a failed item. - Wait at least
retryAfterSecondsbefore the first retry. Double the delay on each further failure, add a little jitter so queued retries do not all fire together, and cap the delay at one hour. - Give up after 24 hours. Check status.topograph.co for an ongoing incident, and contact support with the
requestIdif nothing is posted there.
source_unavailable, so a quick retry rarely helps. In prefill mode the failure is fail-fast: resubmitting without mode: "prefill" is usually the better move.
HTTP 429 is different: it carries a Retry-After header, and Concurrency & Backfills explains how to retry it while keeping capacity for live traffic.
Handling “in progress” status
For the verification endpoint, data retrieval is asynchronous. You will initially receive a200 OK response with data status set to in_progress.
in_progress during that time and do not hold a concurrency slot.
Handling register instability
If you receive afailed status in your webhook payload with code: "source_unavailable":
- Prefill mode: This is usually final for that request. Ask the user to enter details manually, or resubmit without
mode: "prefill". - Verification mode: We tried for up to 1 hour and still could not reach the register, often a prolonged outage (for example weekend maintenance). Resubmit after
retryAfterSeconds, backing off as described above.
Breaking changes in a register
Registries occasionally introduce breaking changes such as new API versions, schema modifications, authentication updates, or structural changes to their data formats. These changes can temporarily disrupt data retrieval until we adapt our integration.Our response strategy
We maintain strong monitoring and agile development processes to detect and respond to registry changes quickly:- 24-hour recovery target: We aim to resolve breaking changes from registries within 24 business hours of detection
- Proactive monitoring: Our systems continuously monitor register responses and API behavior to detect anomalies early
- Rapid adaptation: When breaking changes occur, our team prioritizes fixes to restore service as quickly as possible
What this means for you
- Temporary disruptions: If a register has a breaking change, you may see more datapoints fail with
source_unavailableuntil we adapt. Note that you never pay for failed requests! - Automatic recovery: Once we’ve updated our integration, service will resume automatically, no action required on your end
- Status updates: Check status.topograph.co for real-time updates during incidents.
If you experience persistent errors for a specific country, please contact support so we can assist in the most efficient way.