Company data, straight from the registry.
One REST API over 400+ government registries in 200+ countries. Verify an entity, pull directors and shareholders, read filed financials, or hand the whole thing to your AI assistant over MCP.
- Base URL
- https://api.zephira.ai/v2
- Auth
- Authorization: Token
- Format
- JSON over HTTPS
- Coverage
- 200+ countries · 600M+ companies
01 — Start hereAuthentication
Every request carries your API key in the Authorization header. Keys are issued per account and inherit that account's permissions and limits.
Authorization: Token 00000000-0000-0000-0000-000000000000
Need a key? Generate one from your Zephira.ai profile, or ask your account manager. Keys are secrets — keep them server-side and rotate them if one leaks.
02 — Start hereErrors
The API uses conventional HTTP status codes. A failure returns a JSON body naming the field or limit that stopped the request, so you can act on it without parsing prose.
Returned when the token is missing, malformed, or revoked.
{
"detail": "Invalid token"
}
One or more fields failed validation. The body maps each field name to the reasons it was rejected.
{
"field_name": [
"This field is required."
]
}
Something failed on our side. Retry with backoff; if it persists, send us the timestamp.
{
"detail": "A server error occurred."
}
You have hit a daily or plan limit. The body names the permission and module that ran out, so you can tell which product to top up.
{
"access": {
"permission": "code_permission",
"permission_name": "Name permission",
"module": "code_module",
"module_name": "Name Module",
"app": "api",
"app_name": "Api"
},
"error_guard": "limits.daily", // or "limit"
"message_guard": "You have reached your daily online browsing limit"
}
03 — Start hereMetrics
Check what you have used and what is left before you spend a credit. Useful for showing consumption inside your own dashboard.
Returns every permission on the account with used and total counts.
import requests headers = { "Authorization": "Token 00000000-0000-0000-0000-000000000000" } r = requests.get("https://api.zephira.ai/v2/metrics", headers=headers) print(r.json())
curl -X GET 'https://api.zephira.ai/v2/metrics' \ -H 'Authorization: Token YOUR_API_KEY'
[
{
"name": "Executives Company",
"codename": "executives_company",
"metrics": [
{
"name": "Executives Company",
"codename": "executives_company",
"used": 10,
"total": 100
}
]
}
]
Counts emails and phone numbers revealed inside a date range.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| date_from | query | datetime | Yes | Start of the range |
| date_to | query | datetime | Yes | End of the range |
r = requests.get("https://api.zephira.ai/v2/metrics/contacts", params={ "date_from": "2025-03-27 05:30:00", "date_to": "2025-04-27 05:30:00", }, headers=headers)
{
"email_count": 317,
"phone_count": 792
}
04 — Core dataKYB API
Real-time entity verification across 200+ countries: legal details, status, directors, shareholders, ownership, VAT and tax IDs, and filed financial statements. Every field comes from the official government registry and arrives in one standard shape, whichever country it was filed in.
Typical order of play: search to resolve the entity, then pull lite, officers, shareholders or financial using the returned ID.
Find companies by name, registration number, VAT/EIN or ticker. Returns matches with the IDs you use in every later call. Use it for onboarding checks, supplier verification, and telling apart companies with near-identical names.
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| name | body | string | No | Company name |
| registration_number | body | string | No | Registration number |
| vat_number | body | string | No | VAT number or EIN |
| ticker | body | string | No | Stock ticker |
| location | body | string | Yes | Where the company is registered. Accepts three formats — see below. |
Rules
- location is always required, in one of three forms: a nomenclature parent id from KYB Countries or KYB Regions (
1219916_1800795), an ISO 2-letter country code (GB,HK,DE), or a country-state code for US, CA and CN (US-CA,CA-ON,CN-BJ). - At least one identifier must accompany it:
name,registration_number,vat_numberorticker. - A location that matches none of the three formats — or matches the shape but is not in the nomenclature — returns a validation error.
curl -X POST 'https://api.zephira.ai/v2/kyb/search' \ -H 'Authorization: Token YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "name": "Zephira", "location": "1219916_1800795" }'
{
"name": "Zephira",
"location": "1219916_1800795"
}
[
{
"id": "27540915",
"name": "ZEPHIRA DATA PARTNERS LIMITED",
"registration_number": "07698579",
"vat_number": null,
"country_code": "GB",
"state": "Hertfordshire"
},
{
"id": "29707645",
"name": "ZEPHIRA DATA INTELLIGENCE LIMITED",
"registration_number": "09410808",
"vat_number": null,
"country_code": "GB",
"state": "Northamptonshire"
}
]
More location examples
The essentials in a single request: legal name, registration number, incorporation date, current status, registered address, VAT and tax IDs, legal form, and website and LinkedIn where they exist. Use it for status checks and populating company profiles when you don't need financials.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | int | Yes | Company ID from KYB search |
curl -X GET 'https://api.zephira.ai/v2/kyb/29707645/lite' \ -H 'Authorization: Token YOUR_API_KEY'
{
"id": "29707645",
"name": "Zephira",
"registration_number": "09410808",
"vat_number": null,
"incorporation_date": "2015-01-28",
"status": "Active",
"country_code": "GB",
"country_name": "United Kingdom",
"country_region": "Northamptonshire",
"address_street": "Artisans' House",
"address_location": "7 Queensbridge",
"address_city": "Northampton",
"zip_code": "NN4 7BF",
"legal_form": "Private limited company (Ltd.)",
"website": "http://zephira.ai/",
"linkedin": "linkedin.com/company/zephira.ai"
}
Directors, secretaries, managers and anyone else with control or significant influence — with roles, appointment dates, partial dates of birth and registered addresses. This is the list you screen against sanctions and PEP data.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | int | Yes | Company ID |
| page | query | int | No | Page number |
| per_page | query | int | No | Results per page |
{
"data": [
{
"id": "48075764",
"first_name": "Nicolae",
"last_name": "Buldumac",
"appointed_at": "2015-01-28",
"date_of_birth_year": 1985,
"date_of_birth_month": 12,
"job_title": "Director",
"address_country": "GB",
"address_line_1": "24 Bertal Road",
"address_locality": "London",
"address_region": null,
"address_postal_code": "SW17 0BX"
}
],
"total_results": 3,
"total_pages": 1
}
Start from a person and find every company they are connected to, across all jurisdictions in the registry. The inverse of the endpoint above.
- Map an individual's full corporate footprint
- Find every role held by a flagged individual during PEP and sanctions screening
- Cross-check a director's declared roles against what the registry actually says
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Full or partial officer name, minimum 2 characters |
| date_of_birth_year | integer | No | 4-digit year, to disambiguate common names |
| country_code | string | No | ISO 3166-1 alpha-2 (GB, US, DE) |
| status | string | No | C current, P previous (resigned) |
| appointment_date | object | No | Range with gte / lte in YYYY-MM-DD |
| resignation_date | object | No | Range with gte / lte in YYYY-MM-DD |
| company_name | string | No | Filter by company name |
| company_reg_number | string | No | Filter by registration number |
| company_status | array | No | Nomenclature IDs from Company Status |
| company_countries | array | No | Nomenclature IDs from KYB Countries |
Date ranges take gte, lte, or both — you never have to send a pair.
{
"name": "nicolae buldumac",
"date_of_birth_year": 1985,
"country_code": "GB",
"status": "C",
"appointment_date": {
"gte": "2014-01-01",
"lte": "2015-06-01"
},
"company_countries": ["1219916_1800795"]
}
[
{
"id": 48075764,
"company_id": 29707645,
"company_name": "Zephira",
"registration_number": "09410808",
"company_status": "Active",
"incorporation_date": "2015-01-28",
"full_name": "Nicolae Buldumac",
"title": "Mr",
"nationality": "Romanian",
"officer_role": "Director",
"appointed_at": "2015-01-28",
"resigned_at": null,
"country_of_residence": "GB",
"address_postal_code": "NN4 7BF"
}
]
Ownership structure and shareholdings: shareholder names (individual or corporate), share quantities and classes, share prices, total holding values and currency. This is where UBO work starts. Paginated for complex structures.
{
"data": [
{
"id": 684155200,
"name": "NICOLAE BULDUMAC",
"quantity": 5000,
"currency": "GBP",
"company_id": 29707645,
"share_value": "5,000 ORDINARY GBP 0.01",
"share_type": "ORDINARY",
"share_price": 0.01,
"total_value": 50.0
}
],
"total_results": 2,
"total_pages": 1
}
Multi-year statements taken from official filings — balance sheet, income statement, cash flow, capital and reserves, and calculated ratios. Every figure is grouped and keyed by reporting date so you can chart a trend without reshaping it.
Groups returned
Use it for credit risk assessment, supplier vetting, financial health monitoring, investment diligence, and automated credit limit calculations.
{
"years": ["2016-01-28", "2017-01-31", "2018-01-31"],
"groups": [
{
"id": "Summary",
"name": "Summary",
"order": 0,
"list": [
{
"name": "Currency",
"list": {
"2016-01-28": "GBP",
"2017-01-31": "GBP"
}
},
{
"name": "Total Assets",
"list": {
"2016-01-28": "6369.0",
"2017-01-31": "37075.0"
},
"progress": [1, 6]
}
]
}
]
}
05 — Core dataProspecting API
Build a list. Filter the full company universe by location, size, turnover, industry, technology stack and dozens of other criteria, then take the returned IDs into the detail endpoints.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| page | body | int | No | Page number, maximum 10 |
| per_page | body | int | No | Results per page |
| filters | body | object | No | Filter criteria, JSON encoded |
Filters — firmographics
| Field | Type | Description |
|---|---|---|
| company_status | array of int | Status IDs, from nomenclatures |
| number_of_employees | object | Headcount range, gte / lte |
| company_incorporation | object | Incorporation date range |
| company_type | array of int | Head office or branch |
| legal_form | array of int | Legal form IDs |
| activity_type | array of int | Distributor, producer, service provider |
| trading_activity | array of string | import, export |
| industry_focus | array of string | Industry IDs |
| website_keywords | array of string | Keywords found on the company website |
| url | Company LinkedIn URL |
Filters — classification codes
nace (NACE Rev. 2), isic (International SIC), plus country-specific SIC codes: sic_code_gb, sic_code_us, sic_code_de, sic_code_fr, sic_code_it, sic_code_nl, sic_code_be, sic_code_dk, sic_code_ie, sic_code_lu, sic_code_no, sic_code_se, sic_code_sg, sic_code_ca, sic_code_mx, sic_code_anz. All values come from the Nomenclatures API.
Filters — location
| Field | Type | Description |
|---|---|---|
| location_countries | object | Country nomenclature — use parents in the filter, id to dive deeper |
| location_regions | object | Region nomenclature, same pattern |
| location_zip | array of string | ZIP or postcode |
| location_type | array of string | City or state |
Filters — financials and growth
| Field | Type | Description |
|---|---|---|
| financial_currency | array of string | Reporting currency |
| financial_turnover | object | Turnover range |
| financial_profit | object | Net profit range |
| financial_liabilities | object | Total liabilities range |
| financial_directors | object | Director remuneration range |
| financial_employee_profit | object | Profit per employee range |
| financial_exports | object | Export value range |
| yoy_turnover | object | Turnover growth range |
| yoy_ebitda | object | EBITDA growth range |
| yoy_profit | object | Profit growth range |
| yoy_staff | object | Headcount growth range |
| yoy_liabilities | object | Liabilities growth range |
| yoy_exports | object | Export growth range |
Filters — ownership and digital signals
| Field | Type | Description |
|---|---|---|
| foreign_parents | string | has_a_foreign_parent / has_no_foreign_parent |
| ownership_accounts | string | consolidated / not_consolidated |
| insights_visits | array of string | Monthly website visit bands |
| insights_technologies | array of string | Technologies detected on the website |
| insights_ranking | object | Website ranking band |
| advance_companies | array of string | Only companies that have an email, phone, fax, website, VAT number, registration number, business address or coordinates |
r = requests.post("https://api.zephira.ai/v2/prospecting", json={ "page": 1, "per_page": 50, "filters": { "company_status": [106], "number_of_employees": {"gte": 1, "lte": 30000}, "legal_form": [4024353], "location_countries": ["1219916_1800795_1814321"] } }, headers=headers)
{
"total_companies": 2594573,
"total_pages": 200,
"data": [
{ "id": 17784513, "name": "FIAT CHRYSLER AUTOMOBILES UK LTD" },
{ "id": 19844844, "name": "BAKKAVOR LIMITED" },
{ "id": 22084035, "name": "ASTRAZENECA UK LIMITED" }
]
}
06 — Core dataCompanies API
Look up companies by any identifier you happen to have — name, number, VAT, LEI, website, phone, or a person who works there — and read the full profile.
| Parameter | Type | Required | Description |
|---|---|---|---|
| country_code | string | No | ISO 2 country code |
| state | string | No | State — ISO 2 for the US |
| name | string | No | Company name |
| registration_number | string | No | Registration number |
| lei_number | string | No | LEI number |
| vat_number | string | No | VAT number |
| website | string | No | Company website |
| phone_number | string | No | Phone number |
| person | string | No | Full name of an employee |
| company_status | list | No | Status IDs, from nomenclatures |
| url | No | Company LinkedIn URL | |
| page | int | No | Page, default 1 |
| per_page | int | No | Maximum 5 |
{
"name": "Global",
"country_code": "GB",
"page": 1
}
{
"registration_number": "07949794",
"country_code": "GB",
"page": 1
}
{
"website": "www.novatech.co.uk",
"country_code": "GB",
"page": 1
}
{
"total_results": 8,
"total_pages": 2,
"data": [
{
"id": "22401777",
"name": "DATABASE SERVICE PROVIDER GLOBAL LTD",
"status": "Active",
"country_code": "GB",
"registration_number": "03898451"
}
]
}
Registration details, legal form, status, addresses, contact channels, brands, headcount band, founding date, industry and SIC classification, and social profiles.
{
"id": 17937983,
"name": "TESCO PLC",
"registration_number": "00445790",
"country_code": "GB",
"company_phone": ["+441992632222"],
"company_website": "http://www.tesco.com",
"company_legal_form": "Public Limited Company",
"status": "Active",
"address_city": "WELWYN GARDEN CITY",
"zip_code": "AL7 1GA",
"size": "10001",
"founding_date": "1947-11-27",
"industry": [
{ "id": 4592033, "type": "industry_focus", "value": "Retail" }
],
"sic": [
{
"id": 3969852,
"type": "sic_code_gb",
"value": "47110 - Retail sale in non-specialised stores"
}
],
"linkedin": "linkedin.com/company/-tesco"
}
07 — Core dataEmployees API
Find people inside a company and read their role, seniority, department and contact details. For example: every Chief Information Security executive at automotive SMEs across the UK.
| Filter | Type | Description |
|---|---|---|
| full_name | string | Employee full name |
| company_id | int | Restrict to one company |
| seniority | array of int | Seniority IDs, from nomenclatures |
| department | array of int | Department IDs, from nomenclatures |
| job_title | array of string | Job title |
| advance | array of string | have_email_address, have_telephone |
| url | Contact LinkedIn URL |
{
"page": 1,
"per_page": 5,
"filters": { "company_id": 20581257 }
}
{
"total_employees": 69,
"total_pages": 14,
"data": [
{
"id": "20773074",
"name": "Alex Puttock",
"company_id": "20581257",
"company_name": "NOVATECH LIMITED"
}
]
}
{
"id": "199328763",
"full_name": "Kerry Louise Johnson",
"first_name": "Kerry",
"last_name": "Johnson",
"gender": "F",
"seniority_level": ["Manager"],
"function_original_name": "governance officer",
"phone": "+447446108873",
"email": "kerry.johnson@lewisham.gov.uk",
"company_name": "LONDON SOUTH BANK UNIVERSITY"
}
08 — Core dataWatch Companies API
Track a company and get told when something changes — name, directors, financial ratios, legal status. Watch a buyer's finances to gauge credit, or a supplier's growth to decide whether to keep working with them. Changes arrive at your callback URL as they happen.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | int | Yes | Company ID |
| fields | body | list | No | Fields to watch: name, vat_number, company_address_street, company_website, company_phone, company_email, company_fax |
{
"fields": ["company_fax", "shareholder_name"]
}
201
Removes the company from your watch list. Returns 200.
Accepts date, fields, page and per_page.
{
"data": [
{
"id": "88663676",
"name": "MMS A/S af 18.10.2017",
"country_code": "DK",
"registration_number": "25638700",
"date": "2021-08-10",
"fields": ["company_fax", "shareholder_name", "company_status"]
}
],
"total_results": 10,
"pages": 1
}
Every recorded change for one company. Filter with from_date, to_date, fields, page and per_page.
{
"data": [
{
"status": "UPDATED",
"message": "Company changed its name from PATRICK SWEENEY FUNERAL DIRECTORS LIMITED to PATRICK",
"date_created": "2021-03-02T06:50:09Z",
"event_type": "company_name"
}
],
"total_results": 5,
"pages": 1
}
Adds fields to an existing watch. Returns the full field list. Use /watch/fields/remove to drop fields, and GET /watch/fields to read the current set.
[
"company_fax",
"vat_number"
]Where change notifications are delivered. Read it back with GET /v2/companies/watch/callback.
{ "callback": "https://zephira.ai" }
Each change is posted to your endpoint with the old and new value, so you can diff without a second lookup.
{
"company_data": {
"id": 9,
"name": "TESCO PLC",
"registration_number": "00445790",
"country_code": "GB",
"date": "2021-09-15T18:53:25Z"
},
"field": "company_email",
"status": "UPDATE",
"new_value": "email@example.com",
"old_value": "email1@example.com"
}
09 — Core dataEnrichment API
Turn a domain, an email or a LinkedIn URL into a full company or person record. Use it to fill a CRM, verify a signup, or white-label company data inside your own product.
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Company website |
{ "url": "http://www.tesco.com" }
{
"id": 17937983,
"name": "TESCO PLC",
"registration_number": "00445790",
"country_code": "GB",
"company_legal_form": "Public Limited Company",
"address_city": "WELWYN GARDEN CITY",
"size": "10001",
"founding_date": "1947-11-27"
}
Send linkedin — the company page URL — and get the same profile shape back.
{ "linkedin": "https://www.linkedin.com/company/zephira-ai/" }
| Parameter | Type | Required | Description |
|---|---|---|---|
| registration_number | string | No | Registration number |
| vat_number | string | No | VAT number |
| country_code | string | Yes | Country code |
| state | string | No | Required when country_code is US |
{
"registration_number": "09410808",
"country_code": "GB"
}
Takes email, plus optional reveal_phone (default true).
{
"id": "34871530",
"full_name": "Thomas Van Mourik",
"gender": "M",
"seniority_level": ["CXO"],
"function_original_name": "CXO",
"phone": "+441650695000",
"email": "thomas.vanmourik@culinalogistics.co.uk",
"company_id": "24131010",
"company_name": "CULINA LOGISTICS LIMITED"
}
Takes linkedin, plus optional reveal_email and reveal_phone (both default true).
Combine whatever you have — first_name, last_name, company_name, domain, email, linkedin — with optional reveal_email and reveal_phone.
{
"first_name": "Alex",
"last_name": "Price",
"company_name": "BRITISH AIRWAYS PLC",
"email": "alex.price@ba.com"
}
Filter by domain_list, company_locations, employee_locations and employee_seniorities, with page and per_page.
Seniority values
{
"domain_list": ["amazon.com"],
"company_locations": ["United States"],
"employee_locations": ["India"],
"employee_seniorities": ["director"],
"page": 1,
"per_page": 100
}
{
"total_employees": 344,
"total_pages": 4,
"data": [
{
"name": "Raghava Gupta",
"seniority_level": "director",
"job_title": "Director - CrossBorder Tech, Product and Science",
"country": "India",
"city": "Bengaluru",
"company": {
"name": "Amazon",
"website": "http://www.amazon.com",
"country": "United States",
"city": "Seattle"
}
}
]
}
10 — Core dataAutocomplete API
Fill a form from a single input. Drop it into signup flows and CRM entry so a sales rep types one email address and the rest of the record completes itself.
| Parameter | Type | Required | Description |
|---|---|---|---|
| country_code | string | No | ISO country code |
| name | string | No | Company name |
| registration_number | string | No | Registration number |
| vat_number | string | No | VAT number |
| website | string | No | Company website |
| string | No | Company email | |
| url | No | Company LinkedIn URL |
A country code alone is not enough. Pair it with at least one of name, registration_number, vat_number, website or phone_number, or the request is rejected.
{
"fields": [
"Select at least one more field ['name', 'registration_number', 'vat_number', 'website', 'phone_number']."
]
}
11 — Core dataFinancials API
The latest reported figures for a company, flat and keyed by year. Choose the indicators that matter to you and build comparable models across a market.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | int | Yes | Company ID |
| year | query | int | No | Restrict to one reporting year |
What comes back
Over 250 indicators per year, all typed as double unless noted. They fall into these families:
| Family | Representative fields |
|---|---|
| Header | Reported-Date, Currency, Reporting-period, Consolidated-Accounts, Company-Accounts-Status, Employee-Numbers |
| Income statement | Turnover, World-Turnover, Cost-of-Sales, Gross-Profit, Operating-Profit, Pre-Tax-Profit, Profit-after-Tax, Retained-Profit, Taxation, EBITDA |
| Balance sheet | Total-Assets, Total-Liabilities, Net-Assets, Total-Current-Assets, Total-Fixed-Assets, Tangible-Assets, Intangible-Assets, Goodwill, Stocks-And-Work-in-Progress, Trade-Debtors, Trade-Creditors, Working-Capital, Cash |
| Debt and financing | Bank-Loan, Bank-Overdraft, Borrowings-due-within-one-year, Borrowings-due-after-one-year, Total-Long-Term-Loans, Hire-Purchase-Commitments, Lease-Commitments, Subordinated-Liabilities |
| Capital and reserves | Share-Capital, Share-Premium, Equity-Paid-Up, Revaluation-Reserve, Sundry-Reserves, P-And-L-Account-Reserve, Shareholder-Funds, Capital-Employed, Net-Worth |
| Cash flow | Net-Cash-Flow-from-Operations, Net-Cash-Flow-from-Financing, Net-Cash-Flow-before-Financing, Increase-In-Cash, Net-Change-In-Cash, Net-Tax-Paid |
| Ratios and KPIs | Current-Ratio, Liquidity-Ratio, Gross-Margin, Net-Margin, EBITDA-Margin, Operating-Profit-Margin, Return-On-Assets, Return-On-Equity, Return-On-Capital-Employed, Interest-Coverage-Ratio, Debt-To-Capital, Gearing (gross debt, net debt, liability basis), Inventory-Turnover-Ratio, Days-Sales-Outstanding, Days-Payable-Outstanding, Days-Inventory-Outstanding, Cash-Conversion-Cycle, Revenue-Per-Employee, Human-Capital-Value-Added |
| Year over year | Turnover-Yoy, Profit-after-Tax-Yoy, EBITDA-Yoy, Total-Liabilities-Yoy, Employee-Numbers-Yoy, Exports-Yoy |
| Banking and insurance | Loans-and-advances-to-banks, Loans-and-advances-to-customers, Customer-accounts, Deposits-by-banks, Net-Interest-Income, Fees-and-Commission-Expense, Gross-Written-Premiums, Net-Premiums-Earned, Technical-Provisions, Reinsurance-Liabilities |
| People and audit | Wages-And-Salaries, Employee-Remuneration, Directors-Remuneration, Pensions, Audit-Fees, Auditor-Fees |
r = requests.get("https://api.zephira.ai/v2/financial/20581257", params={"year": 2020}, headers=headers)
{
"2020": {
"Reported-Date": "2020-05-31",
"Currency": "GBP",
"Turnover": 30705740,
"Gross-Profit": 4985477,
"Operating-Profit": 186537,
"Pre-Tax-Profit": 168377,
"Profit-after-Tax": 117605,
"EBITDA": 305579,
"Total-Assets": 10470360,
"Total-Liabilities": 7121472,
"Net-Assets": 3348888,
"Working-Capital": 1392541,
"Employee-Numbers": 99,
"Revenue-Per-Employee": 310158.99,
"Current-Ratio": 1.2345,
"Gross-Margin": 16.24,
"Return-On-Equity": 3.51,
"Turnover-Yoy": 14.2055
}
}
12 — Core dataDigital Insights API
What a company runs on and how its website performs — analytics tools, payment systems, hosting, and traffic — across more than 880 tracked technologies. Sales teams use it to open with something specific instead of something generic.
Send name or registration_number — at least one is required — and get back matching companies with their IDs.
[
{
"id": "20581257",
"name": "NOVATECH LIMITED",
"country_code": "GB",
"registration_number": "02605046"
}
]
Domain and DNS records, registrar contacts, hosting and ISP, engagement metrics, global and category rankings, traffic sources, country share, historical visits, and the detected technology stack grouped by category.
{
"domain": "novatech.co.uk",
"nameservers": "hank.ns.cloudflare.com",
"ip": "104.20.46.31",
"isp_name": "CLOUDFLARENET",
"domain_creation_date": "1996-08-28",
"engagement_total_visits": 303228,
"engagement_bounce_rate": "0.5325903646130219",
"engagement_time_on_site": "00:02:55",
"global_rank": 119775,
"country_rank": 6453,
"stat_organic_search_percent": 53.7,
"stat_direct_percent": 35.6,
"stat_referral_percent": 2.4,
"technologies": [
{
"id": 2,
"name": "Analytics",
"list": [
{ "id": 2, "name": "Google Analytics", "category": 2 }
]
}
]
}
13 — Core dataOwnership API
The whole group: parents, subsidiaries, shareholders and beneficial owners, returned as a tree you can render directly.
Send name or registration_number — at least one is required.
{
"fields": [
"Choose one or more of these fields ['name', 'registration_number']."
]
}
Shareholders with share class and value, plus a nested group_structure where selected: true marks the company you asked about.
{
"shareholders": [
{
"id": 45048908,
"name": "BANDENIA BANQUEROS PRIVADOS INC",
"quantity": 530000,
"currency": "GBP",
"share_value": "530,000 ORDINARY GBP 1.00",
"share_type": "ORDINARY",
"share_price": 1.0
}
],
"group_structure": [
{
"id": 28672740,
"registration_number": "IE673949",
"name": "BANDENIA GLOBAL LIMITED",
"selected": false,
"children": [
{
"id": 28672740,
"registration_number": "08588209",
"name": "BANDENIA GATEWAY LTD",
"selected": true,
"children": []
}
]
}
],
"registration_number": "08588209"
}
14 — Core dataCredit Report API
Full business credit reports: risk score and recommended limit, payment behaviour, legal filings, group analysis and multi-year financials. Search first to confirm a report is available, then generate it.
| Parameter | Type | Required | Description |
|---|---|---|---|
| company | string | No | Company name |
| registration_number | string | No | Registration number |
| vat_number | string | No | VAT number |
| country | string | Yes | ISO country code |
| province | string | No | Province, from nomenclatures |
| registered_city | string | No | City |
| post_code | string | No | Post code |
[
{
"id": "GB-0-00445790",
"name": "TESCO PLC",
"registration_number": "00445790",
"vat_number": ["GB220430231"],
"status": "Active",
"address": {
"post_code": "AL7 1GA",
"city": "WELWYN GARDEN CITY",
"street": "TESCO HOUSE SHIRE PARK, KESTREL WAY"
}
}
]
Pass the source_id from the search and the country. Format is json or html. Generation is usually instant but can take up to three minutes depending on country and provider; you can run several generations in parallel. The response carries the report ID.
{
"source_id": "GB-0-00445790",
"country": "GB"
}
{
"id": 52,
"name": "TESCO PLC",
"source_id": "GB-0-00445790",
"expired": false,
"date_created": "2021-09-30T07:09:57.081437Z",
"status": "finish",
"registration_number": "00445790"
}
Returns true once the report can be fetched.
The full report body. Sections include:
| Section | Contents |
|---|---|
| summary | Overall credit risk class, probability of default, recommended credit limit, turnover, EBITDA, employees, age of business, what we like about this company, what to be aware of |
| company_profile | Legal form, auditor, VAT number, SIC codes, registered and trading addresses, incorporation date, latest filed accounts, ultimate holding company |
| score_history · credit_limit_history | Score and limit over time with dates and descriptions |
| financials_* | Summary, profit and loss, balance sheet, cash flow, capital and reserves, KPIs and ratios, growth and industry comparison |
| directors and secretaries | Current and previous, with appointments, nationality, date of birth, other directorships |
| shareholders · group_structure_* | Share classes and percentages; extended group, subsidiaries and affiliated entities |
| legal filings | CCJs (exact, possible, grouped, judicial, administrative), suits, judgements, tax liens, UCC filings, liens, collections |
| mortgages_and_charges | Type, created and registered dates, persons entitled, further information |
| payment behaviour | DBT trends, payment index, historic trade information, trade lines, credit extended bands, past due balances |
| enquiries_trend | Monthly enquiry counts, 3/6/9/12-month totals, last enquiry date |
| historic_health | Dated events such as profit warnings, with the published description |
| other | Import and export info, branch details, business licenses, trucking carrier info, OSHA records, publications, social balance sheet, stock information |
{
"summary": {
"turnover": 57887000000.0,
"ebitda": 4516000000.0,
"age_of_business": 73,
"number_of_employees": "367321",
"charges": 2,
"mortgages": 9,
"court_judgements": 8,
"overall_credit_risk": {
"pod": 0.0597,
"commonValue": "A",
"commonDescription": "Very Low Risk",
"creditLimit": { "value": "100000000", "currency": "GBP" }
},
"what_we_like_about_this_company": [
"This is a very large company with Total Assets in excess of GBP 5 billion.",
"This company's auditors have reported no adverse information."
]
}
}
Combines generation and retrieval. Best for one-off lookups where waiting through the generate step won't hurt you or your end customer.
Re-open any report you have generated before without spending another credit. Filter with search, page and per_page.
{
"data": [
{
"id": 31,
"name": "TESCO PLC",
"source_id": "GB-0-00445790",
"url": "/api/exports/file/token",
"expired": false,
"status": "finish",
"date_created": "2021-09-16T08:08:13.951869Z"
}
],
"total_results": 1,
"pages": 1
}
15 — Core dataNomenclatures API
The controlled vocabularies behind every filter. Fetch the IDs once, cache them, and use them anywhere a nomenclature ID is expected. Endpoints that return a tree accept a parent parameter to walk one level deeper.
| Path | Returns | Tree |
|---|---|---|
| /seniority | Seniority levels — CXO, Director, Manager… | no |
| /department | Departments | no |
| /activity-type | Distributor, Producer, Service Provider | no |
| /company-type | Head Office, Branch | no |
| /company-status | Active (106), Inactive (108), Intermediate (1615) | no |
| /legal-form | Legal forms by jurisdiction | no |
| /industry-focus | Industry taxonomy | yes |
| /isic | International SIC codes | yes |
| /nace | NACE Rev. 2 | yes |
| /sic/{country_code} | Country SIC codes | yes |
| /country | Countries with parent paths | yes |
| /region | Regions — Africa, Asia, Central America… | yes |
| /states | States for US or CA — pass country | no |
| /technology | Website technology categories | yes |
| /currency | Reporting currencies | no |
Country codes for SIC lists
r = requests.get("https://api.zephira.ai/v2/nomenclatures/sic/gb", headers=headers)
[
{
"id": 3968625,
"parents": "3968625",
"name": "A - Agriculture, forestry and fishing",
"has_children": true,
"active": true
},
{
"id": 3968690,
"parents": "3968690",
"name": "B - Mining and quarrying",
"has_children": true,
"active": true
}
]
Fixed value sets
These filters take plain strings rather than IDs.
| Filter | Accepted values |
|---|---|
| advance (contacts) | have_email_address, have_telephone |
| trading_activity | import, export |
| ownership parents | has_parents, has_no_parents |
| foreign_parents | has_a_foreign_parent, has_no_foreign_parent |
| ownership_accounts | consolidated, not_consolidated |
| insights_visits · insights_ranking | 0-10000, 1000-100000, 100000-500000, 500000-1000000, 1000000-5000000, 5000000 |
| advance_companies | have_email_address, have_telephone, have_fax, have_website, have_vat_number, have_registration_number, have_business_address, have_lat_and_long |
16 — AI accessMCP Server
Company intelligence inside any AI assistant that supports MCP connectors — Claude, ChatGPT, Mistral Le Chat, Cursor, VS Code Copilot, Windsurf and others. No code: connect once, then ask questions in plain language.
Identifying a company
Any one of these is usually enough — a website, or a name plus country, or a registration number.
| Parameter | Type | Description |
|---|---|---|
| country_code | string | ISO country code |
| name | string | Company name |
| registration_number | string | Registration number |
| vat_number | string | VAT number |
| ticker | string | Stock ticker |
| website | string | Company website |
| string | Company email | |
| url | Company LinkedIn URL |
What you can pull
| Tool | What it does |
|---|---|
| Enrichment by Website URL | Identify a company from its domain and return the profile |
| Enrichment by LinkedIn URL | Identify a company from its LinkedIn page and return the profile |
| Autocomplete | Find a company by name, registration number, VAT, ticker or email |
| Company Financials | Turnover, profit, EBITDA, assets, liabilities, equity, headcount, ratios and margins with year-over-year change |
| Company Ownership | Shareholders, parent companies, subsidiaries, ultimate beneficial owners |
The assistant chains these itself. A single prompt like "Look up tesco.com and get their financials and ownership" runs several tools in sequence with no manual steps.
Prompts that work
- Look up the company behind the website tesco.com
- Find the company with registration number 00445790 in the UK
- Get the latest financials for Zephira
- Show me the ownership structure of Tesco
- Look up apple.com and microsoft.com, compare their financial data for 2023
- Find all companies linked to linkedin.com/company/zephira-ai — profile, financials and shareholders
Connect it
| Step | Do this |
|---|---|
| 1 | Open the Connectors page in your AI client and choose Add connector. |
| 2 | Select Custom MCP connector and enter https://mcp.zephira.ai/mcp. |
| 3 | Authenticate with your Zephira.ai API key. |
| 4 | Zephira.ai appears in the connector list with a green status. |
| 5 | Start a conversation and ask about any company — the assistant picks the tools. |
ANALYST Does Meridian Freight Inc. actually exist, is its VAT number valid, and who signs for it? TOOL CALL — verify_entity { "name": "Meridian Freight Inc.", "checks": ["existence", "vat", "tax_id"] }