Compliance Radar
Compliance Radar tracks your registration-threshold exposure across 40+ jurisdictions and flags a country before you're required to register there. It always runs — the same tax-calculation and invoice data you send through E-Invoicing and Tax Calculations feeds it automatically, with no separate data upload. The always-free tier covers every country you sell into.
GET /v1/tax/registrations, the same endpoint you already use to manage tax registrations. Every registration row carries its own obligation status and threshold exposure.List registrations & status
Every registration — active, monitoring, or not yet registered — comes back from one call. Filter or scan the response for obligationStatus to find what needs attention.
On an Enterprise account the administrator chooses whether Compliance Radar is on. When it is off, the list carries monitoring: {"{ enabled: false, message }"}, every row has obligationStatus, threshold and currentPeriodAmount null with obligationStatusLabel "Not monitored", rows Radar created for monitoring are left out, and GET /v1/tax/obligations answers 403 solution_not_enabled with solution: "compliance_radar". Never read a not-monitored row as compliant.
curl https://api.clearvo.io/v1/tax/registrations \
-H "x-api-key: csk_live_••••••••••••"
{
"ok": true,
"registrations": [
{
"country": "DE",
"registrationStatus": "MONITORING",
"obligationStatus": "APPROACHING",
"obligationStatusLabel": "Approaching threshold",
"threshold": { "amount": 100000, "currency": "EUR" },
"currentPeriodAmount": 84200,
"estimatedExposure": 15800
},
{
"country": "IE",
"registrationStatus": "REGISTERED",
"obligationStatus": "COMPLIANT",
"obligationStatusLabel": "Compliant",
"threshold": null
}
]
}
currentPeriodAmount is your running total against the threshold; estimatedExposure is how far over you'd already be if the period closed today. Both update automatically as new tax calculations and invoices are recorded.
Response fields
| Field | Type | Description |
|---|---|---|
| country | string | ISO 3166-1 alpha-2. |
| registrationStatus | string | REGISTERED | PENDING | MONITORING | NOT_REGISTERED | DEREGISTERED (collection has ended for this registration — see collectUntilDate; the row is kept for history rather than deleted). |
| obligationStatus | string, nullable | COMPLIANT | APPROACHING | BREACH | MONITORING. Null when the country has no threshold-based obligation to track. |
| obligationStatusLabel | string, nullable | Ready-to-render display label for obligationStatus — null exactly when it is, except "Not monitored" when Compliance Radar is switched off for the account. |
| threshold.amount / threshold.currency | object, nullable | The registration threshold this country applies, in its own currency. Null once registrationStatus is REGISTERED — a threshold no longer applies. |
| currentPeriodAmount | number, nullable | Running total against the threshold for the current period. |
| estimatedExposure | number, nullable | How far over the threshold you'd already be if the period closed today. |
Auto-discovery & monitoring
You don't need to tell Clearvo which countries to watch. The first time a transaction touches a new jurisdiction, Compliance Radar creates a registrationStatus: "MONITORING" row automatically and starts tracking it against that jurisdiction's registration threshold — before you owe anything there. obligationStatus moves through four stages as exposure grows:
| Status | Meaning |
|---|---|
MONITORING | Tracked, well under threshold. No action needed. |
APPROACHING | Within the platform's early-warning band (typically 80% of threshold) — time to plan registration. |
BREACH | Threshold exceeded. Register now — see Registering a jurisdiction. |
COMPLIANT | An active REGISTERED registration exists for this jurisdiction — no threshold exposure to track. |
Registering a jurisdiction
Once a jurisdiction reaches BREACH (or you simply want to register ahead of it), turn the monitoring row into a real registration with the same endpoint:
curl https://api.clearvo.io/v1/tax/registrations \
-X POST \
-H "x-api-key: csk_live_••••••••••••" \
-H "Content-Type: application/json" \
-d '{
"country": "DE",
"scheme": "STANDARD",
"taxNumber": "DE123456789",
"collectFromDate": null
}'
Set collectFromDate to start Tax Calculations collecting for this jurisdiction in the same call, or omit it and configure collection later. Once a registration reaches registrationStatus: "REGISTERED", it's no longer part of Compliance Radar's threshold tracking — see Registrations in the Tax Calculations reference for the full field list.