Get a tax jurisdiction
The knowledge.jurisdictions.get operation: GET /api/v1/tax/knowledge/jurisdictions/{id} in the REST API and the knowledge_jurisdictions_get tool in the MCP server.
/api/v1/tax/knowledge/jurisdictions/{id}Returns one jurisdiction of the Jurisdiction Knowledge Base as loaded, by ID (HR, US-TX, EU): its
row of the coverage map (as knowledge.jurisdictions.list returns it: coverage with its research areas,
local taxNames, record statuses) with its region, plus what its
folder holds: recordsByKind (its records per kind, with status counts and the earliest nextReviewBy),
questions (each record with open questions or unsupported rules, with the file they are written in; the
e-invoicing mandates of one file share its metadata and are one row) and sources (every source of its
sources.yaml). The questions' text stays in the repository; the knowledge base loads their counts.
At a glance
- REST:
GET /api/v1/tax/knowledge/jurisdictions/{id} - MCP tool:
knowledge_jurisdictions_get - Operation ID:
knowledge.jurisdictions.get - Scope: Platform
- Permission:
tax_knowledge:read - Risk tier:
read - Dry run: Not supported
- Idempotency: Not needed (read only)
- Modes: Test and live
- Authentication: API key with the
tax_knowledge:readscope - Since: M13
Request
Path parameters
| Field | Type | Description |
|---|---|---|
id | string | The jurisdiction ID, any case: HR, us-tx, EU. |
Query parameters
This operation takes no query parameters.
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "tax_jurisdiction" | |
name | string | |
type | one of country, subdivision, union | |
parent | string | |
euMember | boolean | |
currency | string | |
timezone | string | |
coverage | object | |
coverage.level | one of L0, L1, L2, L3, L4 | |
coverage.target | one of L0, L1, L2, L3, L4 | |
coverage.tier | 1 or 2 or 3 | |
coverage.areas | object | How far each research area has got (missing, partial or complete): rates, regimes, filing, invoicing, einvoicing. Absent when the record marks none. |
coverage.areas.rates | one of missing, partial, complete | |
coverage.areas.regimes | one of missing, partial, complete | |
coverage.areas.filing | one of missing, partial, complete | |
coverage.areas.invoicing | one of missing, partial, complete | |
coverage.areas.einvoicing | one of missing, partial, complete | |
authority | object | |
authority.name | string | |
authority.url | string | |
authority.portalUrl | string | |
taxNames | array of string | Local names of the tax, e.g. ["USt", "MwSt"]. |
taxId | object | |
taxId.type | string | |
taxId.format | string | |
taxId.example | string | |
taxId.validation | object | |
taxId.validation.service | one of VIES, HMRC, CH_UID, ABN_LOOKUP, none, other | |
taxId.validation.url | string | |
meta | object | |
meta.status | one of researched, cross_checked, reviewed, verified, retired | |
meta.fixture | boolean | |
meta.confidence | one of high, medium, low | |
meta.sourceIds | array of string | |
meta.openQuestions | integer (at least 0) | |
meta.unsupportedRules | integer (at least 0) | |
meta.blockingUnsupportedRules | integer (at least 0) | |
meta.reviewedBy | string | |
meta.reviewedAt | string | |
meta.verifiedBy | string | |
meta.verifiedAt | string | |
meta.nextReviewBy | string | |
meta.knowledgeRef | object | |
meta.knowledgeRef.path | string | |
meta.knowledgeRef.commit | string | |
records | object | |
records.total | integer (at least 0) | |
records.researched | integer (at least 0) | |
records.cross_checked | integer (at least 0) | |
records.reviewed | integer (at least 0) | |
records.verified | integer (at least 0) | |
records.retired | integer (at least 0) | |
openQuestions | integer (at least 0) | |
unsupportedRules | integer (at least 0) | |
nextReviewBy | string | |
region | one of europe, americas, asia_pacific, middle_east_africa or null | The map region (a static table; a subdivision takes its country's, the EU is in Europe). |
recordsByKind | array of object | The records of the jurisdiction's folder per kind, playbooks included; kinds without records are left out. |
recordsByKind[].kind | one of jurisdiction, regime, rate, filing_spec, invoicing_rule, einvoicing_mandate, playbook | |
recordsByKind[].records | object | The kind's records by status. |
recordsByKind[].records.total | integer (at least 0) | |
recordsByKind[].records.researched | integer (at least 0) | |
recordsByKind[].records.cross_checked | integer (at least 0) | |
recordsByKind[].records.reviewed | integer (at least 0) | |
recordsByKind[].records.verified | integer (at least 0) | |
recordsByKind[].records.retired | integer (at least 0) | |
recordsByKind[].nextReviewBy | string or null | The earliest nextReviewBy of the kind's records that aren't retired; null when all are. |
questions | array of object | The folder's records with open questions or unsupported rules (playbooks share their records' metadata). |
questions[].kind | one of jurisdiction, regime, rate, filing_spec, invoicing_rule, einvoicing_mandate, playbook | |
questions[].ref | string | The record's ID or natural key (DE, DE_DOMESTIC, DE/rates.yaml#*:standard@2007-01-01), or the e-invoicing file (DE/einvoicing.yaml). |
questions[].title | string | What it is in words ("Standard rate, every other category, from 2007-01-01"). |
questions[].status | one of researched, cross_checked, reviewed, verified, retired | |
questions[].confidence | one of high, medium, low | |
questions[].openQuestions | integer (at least 0) | |
questions[].unsupportedRules | integer (at least 0) | |
questions[].blockingUnsupportedRules | integer (at least 0) | |
questions[].nextReviewBy | string | |
questions[].knowledgeRef | object | The file the questions are written in, and the commit it was compiled from. |
questions[].knowledgeRef.path | string | |
questions[].knowledgeRef.commit | string | |
sources | array of object | Every source of the folder's sources.yaml, in file order. |
sources[].id | string | |
sources[].url | string | |
sources[].title | string | |
sources[].publisher | string | |
sources[].type | string | |
sources[].retrievedAt | string | |
sources[].monitor | boolean |
Examples
Croatia
GET /api/v1/tax/knowledge/jurisdictions/HR
Authorization: Bearer or_test_…
Response (200):
{
"id": "HR",
"object": "tax_jurisdiction",
"name": "Croatia",
"type": "country",
"euMember": true,
"currency": "EUR",
"timezone": "Europe/Zagreb",
"coverage": {
"level": "L3",
"target": "L3",
"tier": 1,
"areas": {
"rates": "complete",
"regimes": "complete",
"filing": "complete",
"invoicing": "complete",
"einvoicing": "partial"
}
},
"authority": {
"name": "Porezna uprava",
"url": "https://www.porezna-uprava.hr"
},
"taxNames": ["PDV", "porez na dodanu vrijednost"],
"taxId": {
"type": "eu_vat",
"format": "^HR\\d{11}$",
"validation": {
"service": "VIES"
}
},
"meta": {
"status": "reviewed",
"fixture": false,
"confidence": "high",
"sourceIds": ["HR:S1", "HR:S4"],
"openQuestions": 0,
"unsupportedRules": 0,
"blockingUnsupportedRules": 0,
"reviewedBy": "Ana Horvat",
"reviewedAt": "2026-10-10",
"nextReviewBy": "2027-04-13",
"knowledgeRef": {
"path": "data/tax/knowledge/jurisdictions/HR/jurisdiction.yaml",
"commit": "1c14b2ec912aca347dd518b2044096f3b5d8eef1"
}
},
"records": {
"total": 14,
"researched": 2,
"cross_checked": 4,
"reviewed": 8,
"verified": 0,
"retired": 0
},
"openQuestions": 3,
"unsupportedRules": 1,
"nextReviewBy": "2027-04-13",
"region": "europe",
"recordsByKind": [
{
"kind": "jurisdiction",
"records": {
"total": 1,
"researched": 0,
"cross_checked": 0,
"reviewed": 1,
"verified": 0,
"retired": 0
},
"nextReviewBy": "2027-04-13"
},
{
"kind": "rate",
"records": {
"total": 4,
"researched": 0,
"cross_checked": 2,
"reviewed": 2,
"verified": 0,
"retired": 0
},
"nextReviewBy": "2027-04-13"
}
],
"questions": [
{
"kind": "rate",
"ref": "HR/rates.yaml#ebook:reduced@2013-01-01",
"title": "Reduced rate, ebook, from 2013-01-01",
"status": "cross_checked",
"confidence": "medium",
"openQuestions": 3,
"unsupportedRules": 1,
"blockingUnsupportedRules": 0,
"nextReviewBy": "2027-04-13",
"knowledgeRef": {
"path": "data/tax/knowledge/jurisdictions/HR/rates.yaml",
"commit": "1c14b2ec912aca347dd518b2044096f3b5d8eef1"
}
}
],
"sources": [
{
"id": "HR:S1",
"url": "https://narodne-novine.nn.hr/clanci/sluzbeni/2013_06_73_1451.html",
"title": "Value Added Tax Act (Zakon o porezu na dodanu vrijednost)",
"publisher": "Narodne novine",
"type": "law",
"retrievedAt": "2026-10-13",
"monitor": true
}
]
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
resource_not_found | 404 | No jurisdiction with this ID is loaded. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
validation_failed | 400 | The ID isn't a jurisdiction ID. | Fix the fields listed in details.issues and send the request again. |
permission_denied | 403 | Your credentials can't read tax knowledge. | Ask an organization owner or admin for a role or scope that allows this action. |
It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, dry_run_not_supported, rate_limited, internal_error.