Sandbox (zz)
A synthetic jurisdiction for exercising every Kausate capability and testing webhook receivers against deterministic, free mock data
Overview
The Kausate Sandbox is a synthetic jurisdiction — code zz — that lets
you build and test against Kausate during development without touching a real
registry. It implements every Kausate capability against deterministic,
in‑process mock data, and its monitoring fires a webhook on every check so
you can test your webhook receiver on demand instead of waiting for a
real‑world registry change.
- No credentials, no setup — nothing to configure, no IP allow‑listing.
- Free — every sandbox SKU is zero‑credit; sandbox calls never consume credits or money, regardless of your plan.
- Deterministic — the same
kausateIdreturns the same data every time, so your assertions are stable (the one exception is the living companies described below, which evolve on purpose). - Opt‑in — the sandbox is enabled per organization. Ask us to turn it on for your org; it won't appear in your capability listing until then.
The sandbox is not a real registry. The data is fabricated and carries no accuracy guarantees — use it only to develop and test your integration.
The dataset
All sandbox companies use a kausateId of the form co_zz_…. You can discover
them with autocomplete or live search just like any other jurisdiction:
curl -H "X-API-Key: $API_KEY" \
"$BASE_URL/v2/companies/search/autocomplete?query=Sandbox&jurisdictionCode=zz"The sandbox is pre‑indexed with ~10,000 companies across three bands:
| Band | Sandbox number | What it's for |
|---|---|---|
| Roster | 000001–000005 | A handful of curated, rich edge cases (see below) |
| Bulk | 000006–010005 | ~10,000 deterministic companies for browsing, search, and pagination |
| Living | 700001–700050 | Companies whose data evolves over time — use these to drive the change‑detection monitor |
The five roster companies cover the shapes you'll want to test against:
| Company | Edge case |
|---|---|
| Sandbox Industries GmbH | a simple company — two individual shareholders, financials, documents |
| Sandbox Holding AG | a holding company |
| Sandbox Subsidiary Ltd | owned 75% by the holding + 25% by an individual → a multi‑level shareholder graph and UBO chain |
| Jane Doe Trading | a sole proprietorship — no shareholder block |
| Sandbox Defunct GmbH | an inactive / under‑external‑control company |
Every other co_zz_… id you ask for is generated deterministically on demand,
so you can hard‑code ids in tests without pre‑creating anything.
Exercising the capabilities
Every capability works against a sandbox company exactly as it does for a real
jurisdiction. Grab a kausateId from autocomplete, then call any endpoint —
for example a synchronous company report:
curl -H "X-API-Key: $API_KEY" -H "Kausate-Version: 2026-05-01" \
-X POST "$BASE_URL/v2/companies/report/sync" \
-d '{"kausateId": "co_zz_…"}'The same id works for search/live, finance, shareholder-graph, ubo,
documents/list + documents, and prefill. Use the multi‑level subsidiary
(Sandbox Subsidiary Ltd) to see a non‑trivial shareholder graph and UBO
chain.
Monitoring → a webhook on every check
The sandbox ships two monitoring sources so you can test your webhook receiver deterministically. Discover them for any sandbox company:
curl -H "X-API-Key: $API_KEY" \
"$BASE_URL/v2/monitors/sources?kausateId=co_zz_…"| Source | Behavior |
|---|---|
zz_sandbox.always_changing | Fires one generic change event every tick, for any sandbox company. Use it when you just want a steady webhook stream to test signing headers, retries, and payload shape. |
zz_sandbox.simulated | For a living company (700001–700050), each tick changes one real field, so you receive a different, realistic event_code in turn — NAME_CHANGED, COMPANY_STATUS_CHANGED, REGISTERED_ADDRESS_CHANGED, LEGAL_FORM_CHANGED, ACTIVITIES_CHANGED, and director changes. |
Create a monitor with a one‑minute cron and point it at your endpoint (or a
webhook.site URL while developing):
curl -H "X-API-Key: $API_KEY" -H "Kausate-Version: 2026-05-01" \
-X POST "$BASE_URL/v2/monitors" \
-d '{
"kausateId": "co_zz_…", // a living company for varied events
"sources": ["zz_sandbox.simulated"],
"scheduleCron": "* * * * *",
"webhookUrl": "https://your-server.com/webhooks/kausate"
}'The first tick records a baseline; every tick after that delivers a
monitor.change_detected webhook with the changed field in before / after
and the matching event_code. This lets you exercise your receiver's payload
parsing, signature verification, and retry handling without waiting for a real
registry change. See Monitoring & Webhooks for the
full webhook payload shape and delivery semantics.
Because sandbox monitors fire every minute, remember to delete the monitor when
you're done testing (DELETE /v2/monitors/{id}).
Last updated on