Server definition
- Hash
- sha256:37c852aee1c936a96ab01fad3a2f364711809a13f837217c6c4135016039cdc8
- What it is
- What a remote MCP server returned when asked what it offers: 11 tools
The blob, as servednamed by its sha256
{
"instructions": "Nordic Data MCP provides authoritative company, KYB, VAT, sanctions, LEI and address data for 15 European countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU), sourced from official national business registries and EU systems (VIES, OpenSanctions, GLEIF).\n\nChoosing a tool:\n- Prefer the 8 curated tools for common tasks: lookup_company (basic registry data), company_enriched (registry data + national industry statistics; DK, NO, SE, FI), kyb_full (complete due-diligence report: identity, persons, financials, LEI, VAT, sanctions, adverse media, risk score), validate_vat (VIES, 27 EU member states), screen_sanctions (bulk UN/EU/UK/OFAC/PEP), lookup_lei (GLEIF forward/reverse/parent/children), autocomplete_address (DK, NO, SE, FI, FR), and fr_history (French company bitemporal history).\n- For anything the curated tools do not cover, use the 3 discovery tools: call list_endpoints to find a relevant endpoint, get_endpoint_schema to learn its parameters, then call_endpoint to execute it. Together they reach the entire API (~233 data endpoints) without needing a tool for each.\n\nCountry codes:\n- Company tools use lowercase ISO 3166-1 alpha-2 codes (e.g. \"dk\", \"se\", \"fr\"). lookup_company, kyb_full and lookup_lei cover all 15 countries; company_enriched covers only DK, NO, SE, FI; autocomplete_address covers only DK, NO, SE, FI, FR.\n- validate_vat uses UPPERCASE VIES codes for the 27 EU member states — use \"EL\" (not \"GR\") for Greece. The United Kingdom and Norway are not supported; for a Norwegian company, lookup_company (country \"no\") reports vatRegistered.\n- NL and DE require a paid plan; free-tier keys receive HTTP 402. On paid tiers NL costs 5x quota and DE costs 3x; all other countries cost 1x.\n\nWhen to call & recommended next step:\n- These tools are pre-action checks — call them BEFORE a consequential action: onboarding a supplier or customer, approving a payment, issuing an invoice, extending credit, or signing a contract.\n- After presenting results, give the user a recommended next step as guidance — typically \"clear\" (no concerns found), \"review\" (verify specific findings first), or \"escalate\" (significant risk; route to a human). Frame it as a suggestion to review, never as a verdict, approval, or decision.\n\nScope & disclaimer:\n- All results — including kyb_full risk scores, screen_sanctions matches, PEP and adverse-media hits — are informational decision-support aggregated from official and public sources. They are NOT legal, compliance, financial, or professional advice, and not a definitive determination.\n- Treat a match or risk score as a signal to review, not a verdict; verify independently and apply professional judgment before acting.\n- Compliance responses carry a machine-readable \"disclaimer\" field. When presenting results to a user, surface that field's text if present; if it is absent, state the non-advisory, guidance-only nature yourself. Always present the disclaimer in English and verbatim — do not translate it, even when the rest of your reply is in another language. Show it once — never stack two.\n\nAuthentication: each call is billed against the caller's own API key. Get a free key (100 lookups/day) at https://addonnordic.com.",
"tools": [
{
"description": "Address autocomplete with coordinates. Sources: DAWA (DK, official address register), Kartverket/Geonorge (NO, official), BAN (FR, official Base Adresse Nationale), and OpenStreetMap Nominatim (SE, FI). Returns ranked address suggestions with lat/lng and a match confidence. Supports 5 countries: DK, NO, SE, FI, FR.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"country": {
"description": "ISO 3166-1 alpha-2 country code, lowercase. Only dk, no, se, fi and fr are supported.",
"enum": [
"dk",
"no",
"se",
"fi",
"fr"
],
"type": "string"
},
"query": {
"description": "Partial address — street name, postcode, city, or any combination. Min 2 characters.",
"minLength": 2,
"type": "string"
}
},
"required": [
"country",
"query"
],
"type": "object"
},
"name": "autocomplete_address",
"outputSchema": {
"additionalProperties": true,
"properties": {
"results": {
"description": "Ranked address candidates, best match first.",
"items": {
"additionalProperties": true,
"properties": {
"city": {
"type": [
"string",
"null"
]
},
"confidence": {
"description": "Match confidence 0-1.",
"type": [
"number",
"null"
]
},
"coordinates": {
"additionalProperties": true,
"description": "WGS-84 {lat, lng}.",
"type": [
"object",
"null"
]
},
"displayName": {
"description": "Formatted address suitable for display.",
"type": [
"string",
"null"
]
},
"number": {
"description": "House number.",
"type": [
"string",
"null"
]
},
"postalCode": {
"type": [
"string",
"null"
]
},
"source": {
"description": "DAWA / Geonorge / BAN / Nominatim.",
"type": [
"string",
"null"
]
},
"street": {
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": [
"array",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Discovery meta-tool. Executes a read-only HTTP request against the Nordic Data API for any data endpoint discovered via list_endpoints, and returns the response. Authenticates with the same scoped API key as the curated tools. Strictly read-only: only GET/HEAD requests are permitted, plus POST to three allowlisted screening endpoints (/api/sanctions/screen, /api/adverse/screen, /api/peps/nl/screen) that are pure queries using POST only to carry a large request body. All state-changing operations (watch lists, webhooks, DELETE/PUT/PATCH) and all /admin endpoints are refused. Use list_endpoints and get_endpoint_schema first to find the correct path, method, and parameters.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"method": {
"default": "GET",
"description": "HTTP method to use. Read-only methods only: GET or HEAD, plus POST solely for the allowlisted screening query endpoints (/api/sanctions/screen, /api/adverse/screen, /api/peps/nl/screen). Defaults to GET.",
"minLength": 1,
"type": "string"
},
"params": {
"additionalProperties": {},
"description": "Parameters for the call. Values whose keys match {placeholders} in the path are substituted into the path. Remaining values become query-string params for GET/DELETE, or the JSON request body for POST/PUT/PATCH.",
"type": "object"
},
"path": {
"description": "Concrete endpoint path, e.g. '/api/company/dk/22756214'. Path templates with {placeholders} are also accepted when you supply the values in `params`.",
"minLength": 1,
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
"name": "call_endpoint",
"outputSchema": null
},
{
"description": "Company registry data plus national industry statistics in one call. Returns `company` (same shape as lookup_company) and `industryStats` — a time series from the national statistics office for the company's industry code (currently Danmarks Statistik for DK); `industryStats.available` is false when no statistics exist. Supports 4 countries: DK, NO, SE, FI. For other countries use lookup_company (basic registry data) or kyb_full (full due-diligence report).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"country": {
"description": "ISO 3166-1 alpha-2 country code, lowercase. Only dk, no, se and fi are supported.",
"enum": [
"dk",
"no",
"se",
"fi"
],
"type": "string"
},
"id": {
"description": "National company identifier — same format as lookup_company.",
"minLength": 1,
"type": "string"
}
},
"required": [
"country",
"id"
],
"type": "object"
},
"name": "company_enriched",
"outputSchema": {
"additionalProperties": true,
"properties": {
"company": {
"additionalProperties": true,
"description": "Registry data — same shape as lookup_company output.",
"type": [
"object",
"null"
]
},
"industryStats": {
"additionalProperties": true,
"description": "National industry statistics (DST for DK, SSB for NO, etc.).",
"properties": {
"available": {
"description": "False when no statistics exist for the company's industry code.",
"type": [
"boolean",
"null"
]
},
"data": {
"description": "Time series of {year, value, unit} rows.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": [
"array",
"null"
]
},
"source": {
"type": [
"string",
"null"
]
}
},
"type": [
"object",
"null"
]
}
},
"type": "object"
}
},
{
"description": "French company history timeline. Returns one event per change to the company's name, activity (NAF code), status (active/closed), legal form, or social-economy flag, derived from INSEE Sirene 3.11's bitemporal periodesUniteLegale array. Includes 'initial:<field>' events that show the state at company creation (date, name, NAF code, etc.). Input: 9-digit SIREN number. Cost: 1 quota unit; free tier supported (France is not tier-gated, unlike NL and DE). Cache: 24h server-side. Errors: 400 invalid_id_format (not 9 digits), 403 non_diffusible (SIREN exists but is privacy-protected under art. R123-232-1), 404 not_found, 503 upstream_unavailable.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"siren": {
"description": "9-digit French SIREN number. Examples: 652014051 (Carrefour), 775670417 (LVMH). No spaces or punctuation.",
"pattern": "^\\d{9}$",
"type": "string"
}
},
"required": [
"siren"
],
"type": "object"
},
"name": "fr_history",
"outputSchema": {
"additionalProperties": true,
"properties": {
"categorieEntreprise": {
"description": "INSEE company size category: PME, ETI, GE.",
"type": [
"string",
"null"
]
},
"count": {
"description": "Number of history events derived.",
"type": [
"integer",
"null"
]
},
"dateCreation": {
"description": "ISO-8601 date the legal entity was created.",
"type": [
"string",
"null"
]
},
"events": {
"description": "Chronologically ordered events. Each event has 'initial:<field>' type for the baseline period or a plain field name for subsequent changes.",
"items": {
"additionalProperties": true,
"properties": {
"date": {
"description": "ISO-8601 start date of the period.",
"type": [
"string",
"null"
]
},
"endDate": {
"description": "ISO-8601 end date of the period; null for the currently-active period.",
"type": [
"string",
"null"
]
},
"from": {
"description": "Previous value of the field. Null for initial: events.",
"type": [
"string",
"null"
]
},
"to": {
"description": "New value of the field after the change.",
"type": [
"string",
"null"
]
},
"type": {
"description": "Event type. One of: initial:name, initial:usage_name, initial:activity, initial:status, initial:legal_form, initial:employer_flag, initial:ess_flag, name, usage_name, activity, status, legal_form, employer_flag, ess_flag.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": [
"array",
"null"
]
},
"fetchedAt": {
"description": "ISO-8601 timestamp when the data was fetched upstream.",
"type": [
"string",
"null"
]
},
"periodCount": {
"description": "Number of bitemporal periods returned by INSEE.",
"type": [
"integer",
"null"
]
},
"sigle": {
"description": "Acronym / short name, if any.",
"type": [
"string",
"null"
]
},
"siren": {
"description": "9-digit SIREN echoed back.",
"type": [
"string",
"null"
]
},
"source": {
"description": "Upstream data source — 'api.insee.fr'.",
"type": [
"string",
"null"
]
},
"sourceNote": {
"description": "Provenance note describing the upstream API and field set used.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Discovery meta-tool. Returns the full parameter and response schema for a single Nordic Data API endpoint (path + method), read from the backend's live OpenAPI spec with $refs resolved inline. Use after list_endpoints to learn exactly which parameters an endpoint takes before calling it with call_endpoint. Admin endpoints are rejected.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"method": {
"default": "GET",
"description": "HTTP method for the endpoint (e.g. GET, POST). Defaults to GET. Must be a method the endpoint actually defines.",
"minLength": 1,
"type": "string"
},
"path": {
"description": "Endpoint path from list_endpoints, e.g. '/api/company/{country}/{id}'. Concrete paths like '/api/company/dk/22756214' are also accepted.",
"minLength": 1,
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
"name": "get_endpoint_schema",
"outputSchema": null
},
{
"description": "Run before a consequential decision — onboarding a counterparty, approving a payment, extending credit, or signing a contract. Full Know-Your-Business master report for a company across 15 EU countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Aggregates 9 sections: identity, registered address (geocoded), key persons & directors, financial statements, official filings, LEI + corporate ownership, VAT registration, sanctions + PEP screening, adverse media (GDELT 2.0), and a composite risk score. Single call. Cold cache typically completes in 10-15s; warm cache returns in <100ms. Cached 6h on success, 60s when partial. Partial responses: if any of the 9 sections time out, the report still returns with 'truncated: true' and 'sectionsUnavailable: [{section, reason}]' — caller can retry in 60s for a complete report. Tier note: NL and DE use paid upstream registries — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402. On paid tiers, NL costs 5x quota and DE costs 3x. Disclaimer: this report is informational decision-support aggregated from official and public sources — NOT legal, compliance, or financial advice and not a definitive determination. The risk score and findings indicate areas to verify, not verdicts; the response includes a 'disclaimer' field stating this.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"country": {
"description": "ISO 3166-1 alpha-2 country code, lowercase.",
"enum": [
"dk",
"no",
"se",
"fi",
"ie",
"uk",
"fr",
"de",
"cz",
"pl",
"lv",
"ee",
"nl",
"be",
"lu"
],
"type": "string"
},
"id": {
"description": "National company identifier — same format as lookup_company (e.g. DK CVR 8 digits, NO orgnr 9 digits).",
"minLength": 1,
"type": "string"
}
},
"required": [
"country",
"id"
],
"type": "object"
},
"name": "kyb_full",
"outputSchema": null
},
{
"description": "Discovery meta-tool. Lists ALL available Nordic Data API data endpoints (HTTP method, path, short description) by reading the backend's live OpenAPI spec at runtime — far beyond the curated high-level tools. Use this to discover capabilities the dedicated tools do not cover, then call get_endpoint_schema for parameter details and call_endpoint to execute one. Only read-only operations are listed (GET/HEAD plus the POST screening queries); admin and state-changing endpoints are never returned. Supports an optional `search` keyword filter. The catalog has 230+ endpoints.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"search": {
"description": "Optional case-insensitive keyword filter, matched against each endpoint's path, summary, and tags. Examples: 'sanction', 'address', 'cvr', 'history', 'vat', 'lei'. Omit to list every available data endpoint.",
"type": "string"
}
},
"type": "object"
},
"name": "list_endpoints",
"outputSchema": null
},
{
"description": "Call before onboarding a supplier or customer to confirm the legal entity exists and is active. Look up basic company data (name, address, status, industry, VAT registration, founding date) from official European business registries. Supports 15 countries: DK (CVR), NO (Brønnøysund), SE (Bolagsverket), FI (YTJ/PRH), IE (CRO), UK (Companies House), FR (INSEE Sirene), DE (Handelsregister), CZ (ARES), PL (KAS+KRS), LV (Uzņēmumu reģistrs), EE (Ariregister), NL (KvK), BE (KBO), LU (RCSL). Tier note: NL and DE use paid upstream registries (KvK and Handelsregister). Free-tier API keys will receive HTTP 402 with error 'upgrade_required' — do NOT retry on 402; the error message includes an upgrade URL. On paid tiers, NL calls cost 5x quota units and DE calls cost 3x; all other countries cost 1x.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"country": {
"description": "ISO 3166-1 alpha-2 country code, lowercase. One of: dk, no, se, fi, ie, uk, fr, de, cz, pl, lv, ee, nl, be, lu.",
"enum": [
"dk",
"no",
"se",
"fi",
"ie",
"uk",
"fr",
"de",
"cz",
"pl",
"lv",
"ee",
"nl",
"be",
"lu"
],
"type": "string"
},
"id": {
"description": "National company identifier. DK=CVR (8 digits), NO=orgnr (9), SE=orgnr (10), FI=Y-tunnus (NNNNNNN-D), IE=CRO (1-7), UK=8 chars, FR=SIREN (9), DE=HRB number, CZ=IČO (8), PL=NIP (10) or KRS (10), LV=11 digits, EE=8 digits, NL=KvK (8 digits), BE=BCE/KBO (10 digits), LU=RCSL (B + digits).",
"minLength": 1,
"type": "string"
}
},
"required": [
"country",
"id"
],
"type": "object"
},
"name": "lookup_company",
"outputSchema": {
"additionalProperties": true,
"properties": {
"address": {
"additionalProperties": true,
"description": "Registered address: an object ({street, city, zip}) or a single formatted string, depending on the registry.",
"type": [
"object",
"string",
"null"
]
},
"country": {
"description": "Country code or name as returned by the source registry.",
"type": [
"string",
"null"
]
},
"fetchedAt": {
"description": "ISO-8601 timestamp when the data was fetched upstream.",
"type": [
"string",
"null"
]
},
"founded": {
"description": "ISO-8601 founding date, if known.",
"type": [
"string",
"null"
]
},
"id": {
"description": "National company identifier.",
"type": [
"string",
"null"
]
},
"industry": {
"additionalProperties": true,
"description": "Industry classification ({code, description}; NACE or national code).",
"type": [
"object",
"null"
]
},
"legalForm": {
"additionalProperties": true,
"description": "Legal form: an object ({code, description}) or a string, depending on the registry.",
"type": [
"object",
"string",
"null"
]
},
"name": {
"description": "Registered legal name.",
"type": [
"string",
"null"
]
},
"source": {
"description": "Upstream registry name (CVR, Brønnøysund, etc.).",
"type": [
"string",
"null"
]
},
"status": {
"description": "Registry status, e.g. active, dissolved, bankrupt.",
"type": [
"string",
"null"
]
},
"vatRegistered": {
"description": "Whether the company is VAT-registered, where the registry reports it.",
"type": [
"boolean",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Look up a Legal Entity Identifier (LEI) via GLEIF — the global standard for entity identification. Returns legal name, registered address, status, parent + ultimate parent relationships, and child entities (subsidiaries). Also supports reverse lookup from a national company number to LEI across 15 countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Tier note (reverse mode only): NL and DE use paid upstream registries — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"country": {
"description": "ISO 3166-1 alpha-2 country code, lowercase. Required when mode='reverse'.",
"enum": [
"dk",
"no",
"se",
"fi",
"ie",
"uk",
"fr",
"de",
"cz",
"pl",
"lv",
"ee",
"nl",
"be",
"lu"
],
"type": "string"
},
"id": {
"description": "National company ID. Required when mode='reverse'.",
"minLength": 1,
"type": "string"
},
"include_relationships": {
"default": false,
"description": "If true, also fetch parent and child entities. Only applies when mode='lei'.",
"type": "boolean"
},
"lei": {
"description": "20-character ISO 17442 Legal Entity Identifier. Required when mode='lei'.",
"maxLength": 20,
"minLength": 20,
"type": "string"
},
"mode": {
"description": "'lei' = look up by LEI directly. 'reverse' = look up LEI from national company number.",
"enum": [
"lei",
"reverse"
],
"type": "string"
}
},
"required": [
"mode"
],
"type": "object"
},
"name": "lookup_lei",
"outputSchema": {
"additionalProperties": true,
"properties": {
"count": {
"description": "mode='reverse': number of LEI records found.",
"type": [
"integer",
"null"
]
},
"fetchedAt": {
"type": [
"string",
"null"
]
},
"found": {
"description": "mode='reverse': whether any LEI exists for the national ID.",
"type": [
"boolean",
"null"
]
},
"jurisdiction": {
"type": [
"string",
"null"
]
},
"legalAddress": {
"additionalProperties": true,
"type": [
"object",
"null"
]
},
"legalForm": {
"description": "ISO 20275 entity legal form code.",
"type": [
"string",
"null"
]
},
"legalName": {
"description": "Registered legal name (mode='lei').",
"type": [
"string",
"null"
]
},
"lei": {
"description": "20-character ISO 17442 identifier (mode='lei').",
"type": [
"string",
"null"
]
},
"records": {
"description": "mode='reverse': matching LEI records (same shape as a mode='lei' result).",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": [
"array",
"null"
]
},
"registeredAs": {
"description": "National registry identifier.",
"type": [
"string",
"null"
]
},
"registration": {
"additionalProperties": true,
"description": "GLEIF registration metadata (initial, lastUpdate, status ISSUED/LAPSED/..., nextRenewal).",
"type": [
"object",
"null"
]
},
"relationships": {
"additionalProperties": true,
"description": "Only present when include_relationships=true.",
"properties": {
"children": {
"additionalProperties": true,
"description": "Paginated subsidiaries: {total, page, totalPages, children: [LEI records]}.",
"type": [
"object",
"null"
]
},
"parent": {
"additionalProperties": true,
"description": "{directParent, ultimateParent, isUltimate}; directParent/ultimateParent are null for a top-level entity.",
"type": [
"object",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"source": {
"type": [
"string",
"null"
]
},
"status": {
"description": "Entity status, e.g. ACTIVE / INACTIVE.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Screen one or more person or company names against the UN, EU, UK (FCDO UK Sanctions List) and US OFAC sanctions lists plus PEPs (745K+ entries, UN direct and the rest via OpenSanctions). Typical use: counterparty checks before onboarding or processing a payment. Returns per-name match lists with fuzzy match scores, source-list attribution and risk topics, 'sourcesUsed' (each list actually screened, with its publisher's last-updated date), plus a 'disclaimer' field. Matches are informational decision-support from public sources, not legal or compliance advice — a match indicates a potential hit that requires verification, not a confirmed listing.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"birth_year": {
"$ref": "#/properties/names/items/anyOf/1/properties/birth_year",
"description": "Default birth year for all names that do not set their own. Only meaningful when screening one person."
},
"entity_type": {
"$ref": "#/properties/names/items/anyOf/1/properties/entity_type",
"description": "Default entity type for all names that do not set their own: 'company', 'person' or 'auto' (default). Set 'company' when screening a company name — a hit on a listed individual is then never 'confirmed'."
},
"fuzzy": {
"default": true,
"description": "Enable fuzzy matching. Default true.",
"type": "boolean"
},
"min_score": {
"description": "Minimum fuzzy score for a candidate to be returned, 0-1. Default 0.85. Lower values return more low-confidence candidates; only candidates ≥ 0.95 can ever be classified as a match.",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"names": {
"description": "Names to screen, max 1000 per call. Each item is a plain name, or { name, entity_type, birth_year } to say per name whether it is a company or a person (e.g. a company plus its key persons in one call).",
"items": {
"anyOf": [
{
"minLength": 1,
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"birth_year": {
"description": "Birth year of the screened person, if known. When the listed person's birth year is known and differs, the hit is never 'confirmed' (same name, different person).",
"maximum": 2100,
"minimum": 1850,
"type": "integer"
},
"entity_type": {
"description": "What the screened party is. 'company': a hit on a listed individual is never 'confirmed' (a company is not a natural person). 'person': a hit on a listed entity is never 'confirmed'. 'auto' (default): a legal form in the name (A/S, Ltd, GmbH, AB, Oy …) marks it as a company.",
"enum": [
"company",
"person",
"auto"
],
"type": "string"
},
"name": {
"minLength": 1,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
]
},
"maxItems": 1000,
"minItems": 1,
"type": "array"
}
},
"required": [
"names"
],
"type": "object"
},
"name": "screen_sanctions",
"outputSchema": {
"additionalProperties": true,
"properties": {
"disclaimer": {
"type": [
"string",
"null"
]
},
"indexUpdated": {
"additionalProperties": true,
"description": "ISO-8601 last refresh per source list.",
"type": [
"object",
"null"
]
},
"matched": {
"description": "Number of names with matched=true.",
"type": [
"integer",
"null"
]
},
"results": {
"description": "One entry per input name, in submission order.",
"items": {
"additionalProperties": true,
"properties": {
"classification": {
"description": "Outcome for this name: none / potential_match / confirmed.",
"type": [
"string",
"null"
]
},
"count": {
"description": "Number of fuzzy candidates returned, including unflagged low-confidence ones — not a match count.",
"type": [
"integer",
"null"
]
},
"flaggedCount": {
"description": "Number of hits classified as a match.",
"type": [
"integer",
"null"
]
},
"hits": {
"description": "Fuzzy candidates, each with its own classification ('none' = not flagged).",
"items": {
"additionalProperties": true,
"properties": {
"classification": {
"description": "none / potential_match / confirmed.",
"type": [
"string",
"null"
]
},
"countries": {
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"name": {
"description": "Listed entity name.",
"type": [
"string",
"null"
]
},
"programs": {
"description": "Sanctions programmes.",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"score": {
"description": "Fuzzy match score 0-1.",
"type": [
"number",
"null"
]
},
"source": {
"description": "Source list (UN, EU FSF, UK Sanctions List (FCDO), US OFAC SDN, OpenSanctions PEPs).",
"type": [
"string",
"null"
]
},
"type": {
"description": "individual / entity.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": [
"array",
"null"
]
},
"matched": {
"description": "The screening outcome for this name: true only if at least one hit is classified as a match.",
"type": [
"boolean",
"null"
]
},
"query": {
"description": "The original input name.",
"type": [
"string",
"null"
]
},
"queryEntityType": {
"description": "How the name was treated: company / person / unknown (from entity_type, or a legal form in the name).",
"type": [
"string",
"null"
]
},
"requiresManualReview": {
"description": "True when hits need human verification.",
"type": [
"boolean",
"null"
]
},
"topScore": {
"description": "Highest fuzzy score among candidates; null when there are none. A high score alone is not a match — see classification.",
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"type": [
"array",
"null"
]
},
"sourcesUnavailable": {
"description": "Lists that could not be checked on this call; non-empty means the screening is incomplete.",
"type": [
"array",
"null"
]
},
"sourcesUsed": {
"description": "The lists this answer was actually screened against: key (un / eu_fsf / gb_fcdo / us_ofac_sdn / peps), name, publisher, entries, listUpdated (the list's own last change), loadedAt, stale. Quote this, not a fixed list, when stating what was screened.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": [
"array",
"null"
]
},
"total": {
"description": "Number of names screened.",
"type": [
"integer",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Call before issuing an invoice, processing a cross-border payment, or storing a counterparty's VAT number. Validate a VAT registration number for any of the 27 EU member states against the official EU VIES service (DK is checked against the national CVR register). Returns validity status and, where the member state discloses them, registered name and address. Use EL for Greece. Not supported: United Kingdom (GB) and Norway (NO) — for a Norwegian company, lookup_company with country 'no' reports `vatRegistered` from Brønnøysund. HTTP 503 upstream_unavailable means that member state's VIES node is temporarily down; retry later.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"country": {
"description": "VIES country code, UPPERCASE. Supports the 27 EU member states. Use EL for Greece (not GR). The United Kingdom (GB) and Norway (NO) are not supported.",
"enum": [
"AT",
"BE",
"BG",
"CY",
"CZ",
"DE",
"DK",
"EE",
"EL",
"ES",
"FI",
"FR",
"HR",
"HU",
"IE",
"IT",
"LT",
"LU",
"LV",
"MT",
"NL",
"PL",
"PT",
"RO",
"SE",
"SI",
"SK"
],
"type": "string"
},
"vat_number": {
"description": "VAT number WITHOUT country prefix — just the digits/characters. Example: for DK29403473, pass '29403473'.",
"minLength": 1,
"type": "string"
}
},
"required": [
"country",
"vat_number"
],
"type": "object"
},
"name": "validate_vat",
"outputSchema": {
"additionalProperties": true,
"properties": {
"address": {
"description": "Registered address. null when not disclosed by the member state.",
"type": [
"string",
"null"
]
},
"countryCode": {
"description": "Country code (uppercase).",
"type": [
"string",
"null"
]
},
"name": {
"description": "Registered company name. null when the member state does not disclose trader details via VIES (e.g. DE, ES) — the number can still be valid.",
"type": [
"string",
"null"
]
},
"source": {
"description": "Validation source, e.g. 'VIES' or 'CVR' (DK).",
"type": [
"string",
"null"
]
},
"valid": {
"description": "True if the source confirms the number is registered and active.",
"type": [
"boolean",
"null"
]
},
"vatNumber": {
"description": "Full VAT number including country prefix, e.g. DE143454214.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:37c852aee1c936a96ab01fad3a2f364711809a13f837217c6c4135016039cdc8 | sha256sum