Skip links
API Reference — Zephira.ai
API Reference · v2

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.

Header · required on every call
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.

401TokenVerificationErrorinvalid or missing key

Returned when the token is missing, malformed, or revoked.

Response
{
    "detail": "Invalid token"
}
400InvalidRequestvalidation failed

One or more fields failed validation. The body maps each field name to the reasons it was rejected.

Response
{
    "field_name": [
        "This field is required."
    ]
}
500InternalErrorserver-side fault

Something failed on our side. Retry with backoff; if it persists, send us the timestamp.

Response
{
    "detail": "A server error occurred."
}
429LimitErrorquota reached

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.

Response
{
    "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.

GET/v2/metricsusage by permission

Returns every permission on the account with used and total counts.

Request
import requests

headers = {
  "Authorization": "Token 00000000-0000-0000-0000-000000000000"
}

r = requests.get("https://api.zephira.ai/v2/metrics", headers=headers)

print(r.json())
200 OK
[
    {
        "name": "Executives Company",
        "codename": "executives_company",
        "metrics": [
            {
                "name": "Executives Company",
                "codename": "executives_company",
                "used": 10,
                "total": 100
            }
        ]
    }
]
GET/v2/metrics/contactscontacts revealed by date

Counts emails and phone numbers revealed inside a date range.

ParameterInTypeRequiredDescription
date_fromquerydatetimeYesStart of the range
date_toquerydatetimeYesEnd of the range
Request
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)
200 OK
{
    "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.

POST/v2/kyb/searchresolve the entity

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

ParameterInTypeRequiredDescription
namebodystringNoCompany name
registration_numberbodystringNoRegistration number
vat_numberbodystringNoVAT number or EIN
tickerbodystringNoStock ticker
locationbodystringYesWhere 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_number or ticker.
  • A location that matches none of the three formats — or matches the shape but is not in the nomenclature — returns a validation error.
Request
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"
}'
200 OK
[
    {
        "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

{ "name": "Apple", "location": "US-CA" } { "name": "HSBC", "location": "HK" } { "name": "Zephira", "location": "1219916_1800795" }
GET/v2/kyb/{id}/litecore profile, one call

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.

ParameterInTypeRequiredDescription
idpathintYesCompany ID from KYB search
Request
curl -X GET 'https://api.zephira.ai/v2/kyb/29707645/lite' \
  -H 'Authorization: Token YOUR_API_KEY'
200 OK
{
    "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"
}
GET/v2/kyb/{id}/officerswho runs it

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.

ParameterInTypeRequiredDescription
idpathintYesCompany ID
pagequeryintNoPage number
per_pagequeryintNoResults per page
200 OK
{
    "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
}
POST/v2/kyb/officers/searchreverse officer lookup

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
ParameterTypeRequiredDescription
namestringYesFull or partial officer name, minimum 2 characters
date_of_birth_yearintegerNo4-digit year, to disambiguate common names
country_codestringNoISO 3166-1 alpha-2 (GB, US, DE)
statusstringNoC current, P previous (resigned)
appointment_dateobjectNoRange with gte / lte in YYYY-MM-DD
resignation_dateobjectNoRange with gte / lte in YYYY-MM-DD
company_namestringNoFilter by company name
company_reg_numberstringNoFilter by registration number
company_statusarrayNoNomenclature IDs from Company Status
company_countriesarrayNoNomenclature IDs from KYB Countries

Date ranges take gte, lte, or both — you never have to send a pair.

Request
{
    "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"]
}
200 OK
[
    {
        "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"
    }
]
GET/v2/kyb/{id}/shareholderswho owns it

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.

200 OK
{
    "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
}
GET/v2/kyb/{id}/financialfiled accounts, multi-year

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

SummaryIncome StatementBalance Sheet CashflowCapital & ReservesKPIs & Ratios

Use it for credit risk assessment, supplier vetting, financial health monitoring, investment diligence, and automated credit limit calculations.

200 OKtruncated
{
    "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.

POST/v2/prospectingfiltered company search
ParameterInTypeRequiredDescription
pagebodyintNoPage number, maximum 10
per_pagebodyintNoResults per page
filtersbodyobjectNoFilter criteria, JSON encoded

Filters — firmographics

FieldTypeDescription
company_statusarray of intStatus IDs, from nomenclatures
number_of_employeesobjectHeadcount range, gte / lte
company_incorporationobjectIncorporation date range
company_typearray of intHead office or branch
legal_formarray of intLegal form IDs
activity_typearray of intDistributor, producer, service provider
trading_activityarray of stringimport, export
industry_focusarray of stringIndustry IDs
website_keywordsarray of stringKeywords found on the company website
linkedinurlCompany 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

FieldTypeDescription
location_countriesobjectCountry nomenclature — use parents in the filter, id to dive deeper
location_regionsobjectRegion nomenclature, same pattern
location_ziparray of stringZIP or postcode
location_typearray of stringCity or state

Filters — financials and growth

FieldTypeDescription
financial_currencyarray of stringReporting currency
financial_turnoverobjectTurnover range
financial_profitobjectNet profit range
financial_liabilitiesobjectTotal liabilities range
financial_directorsobjectDirector remuneration range
financial_employee_profitobjectProfit per employee range
financial_exportsobjectExport value range
yoy_turnoverobjectTurnover growth range
yoy_ebitdaobjectEBITDA growth range
yoy_profitobjectProfit growth range
yoy_staffobjectHeadcount growth range
yoy_liabilitiesobjectLiabilities growth range
yoy_exportsobjectExport growth range

Filters — ownership and digital signals

FieldTypeDescription
foreign_parentsstringhas_a_foreign_parent / has_no_foreign_parent
ownership_accountsstringconsolidated / not_consolidated
insights_visitsarray of stringMonthly website visit bands
insights_technologiesarray of stringTechnologies detected on the website
insights_rankingobjectWebsite ranking band
advance_companiesarray of stringOnly companies that have an email, phone, fax, website, VAT number, registration number, business address or coordinates
Request
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)
200 OK
{
    "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.

POST/v2/overviewsearch companies
ParameterTypeRequiredDescription
country_codestringNoISO 2 country code
statestringNoState — ISO 2 for the US
namestringNoCompany name
registration_numberstringNoRegistration number
lei_numberstringNoLEI number
vat_numberstringNoVAT number
websitestringNoCompany website
phone_numberstringNoPhone number
personstringNoFull name of an employee
company_statuslistNoStatus IDs, from nomenclatures
linkedinurlNoCompany LinkedIn URL
pageintNoPage, default 1
per_pageintNoMaximum 5
Request
{
    "name": "Global",
    "country_code": "GB",
    "page": 1
}
200 OK
{
    "total_results": 8,
    "total_pages": 2,
    "data": [
        {
            "id": "22401777",
            "name": "DATABASE SERVICE PROVIDER GLOBAL LTD",
            "status": "Active",
            "country_code": "GB",
            "registration_number": "03898451"
        }
    ]
}
GET/v2/companies/{id}full company profile

Registration details, legal form, status, addresses, contact channels, brands, headcount band, founding date, industry and SIC classification, and social profiles.

200 OKtruncated
{
    "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.

POST/v2/employeessearch employees
FilterTypeDescription
full_namestringEmployee full name
company_idintRestrict to one company
seniorityarray of intSeniority IDs, from nomenclatures
departmentarray of intDepartment IDs, from nomenclatures
job_titlearray of stringJob title
advancearray of stringhave_email_address, have_telephone
linkedinurlContact LinkedIn URL
Request
{
    "page": 1,
    "per_page": 5,
    "filters": { "company_id": 20581257 }
}
200 OK
{
    "total_employees": 69,
    "total_pages": 14,
    "data": [
        {
            "id": "20773074",
            "name": "Alex Puttock",
            "company_id": "20581257",
            "company_name": "NOVATECH LIMITED"
        }
    ]
}
GET/v2/employees/{id}employee detail
200 OK
{
    "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.

POST/v2/companies/{id}/watch/startstart watching
ParameterInTypeRequiredDescription
idpathintYesCompany ID
fieldsbodylistNoFields to watch: name, vat_number, company_address_street, company_website, company_phone, company_email, company_fax
Request
{
    "fields": ["company_fax", "shareholder_name"]
}
201 Created
201
DELETE/v2/companies/{id}/watch/stopstop watching

Removes the company from your watch list. Returns 200.

GET/v2/companies/watchlist watched companies

Accepts date, fields, page and per_page.

200 OK
{
  "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
}
GET/v2/companies/{id}/watch/eventschange history

Every recorded change for one company. Filter with from_date, to_date, fields, page and per_page.

200 OK
{
    "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
}
PUT/v2/companies/{id}/watch/fields/addadd watched fields

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.

200 OK
[
    "company_fax",
    "vat_number"
]
PUT/v2/companies/watch/callbackset the callback URL

Where change notifications are delivered. Read it back with GET /v2/companies/watch/callback.

Request
{ "callback": "https://zephira.ai" }
POSThttps://your_callback_urlwhat we send you

Each change is posted to your endpoint with the old and new value, so you can diff without a second lookup.

Notification payload
{
  "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.

POST/v2/enrichment/urlcompany from a website
ParameterTypeRequiredDescription
urlstringYesCompany website
Request
{ "url": "http://www.tesco.com" }
200 OKtruncated
{
    "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"
}
POST/v2/enrichment/company/linkedincompany from LinkedIn

Send linkedin — the company page URL — and get the same profile shape back.

Request
{ "linkedin": "https://www.linkedin.com/company/zephira-ai/" }
POST/v2/enrichment/companycompany from a registration or VAT number
ParameterTypeRequiredDescription
registration_numberstringNoRegistration number
vat_numberstringNoVAT number
country_codestringYesCountry code
statestringNoRequired when country_code is US
Request
{
    "registration_number": "09410808",
    "country_code": "GB"
}
POST/v2/enrichment/emailperson from an email

Takes email, plus optional reveal_phone (default true).

200 OK
{
    "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"
}
POST/v2/enrichment/employee/linkedinperson from LinkedIn

Takes linkedin, plus optional reveal_email and reveal_phone (both default true).

POST/v2/enrichment/employee/contactsperson from partial details

Combine whatever you have — first_name, last_name, company_name, domain, email, linkedin — with optional reveal_email and reveal_phone.

Request
{
    "first_name": "Alex",
    "last_name": "Price",
    "company_name": "BRITISH AIRWAYS PLC",
    "email": "alex.price@ba.com"
}
POST/v2/enrichment/employee/searchsearch people across companies

Filter by domain_list, company_locations, employee_locations and employee_seniorities, with page and per_page.

Seniority values

ownerfounderc_suitepartner vpheaddirectormanager seniorentryintern
Request
{
    "domain_list": ["amazon.com"],
    "company_locations": ["United States"],
    "employee_locations": ["India"],
    "employee_seniorities": ["director"],
    "page": 1,
    "per_page": 100
}
200 OKtruncated
{
    "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.

POST/v2/autocompletecomplete a company record
ParameterTypeRequiredDescription
country_codestringNoISO country code
namestringNoCompany name
registration_numberstringNoRegistration number
vat_numberstringNoVAT number
websitestringNoCompany website
emailstringNoCompany email
linkedinurlNoCompany 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.

400 Bad Request
{
    "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.

GET/v2/financial/{id}company financials
ParameterInTypeRequiredDescription
idpathintYesCompany ID
yearqueryintNoRestrict to one reporting year

What comes back

Over 250 indicators per year, all typed as double unless noted. They fall into these families:

FamilyRepresentative fields
HeaderReported-Date, Currency, Reporting-period, Consolidated-Accounts, Company-Accounts-Status, Employee-Numbers
Income statementTurnover, World-Turnover, Cost-of-Sales, Gross-Profit, Operating-Profit, Pre-Tax-Profit, Profit-after-Tax, Retained-Profit, Taxation, EBITDA
Balance sheetTotal-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 financingBank-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 reservesShare-Capital, Share-Premium, Equity-Paid-Up, Revaluation-Reserve, Sundry-Reserves, P-And-L-Account-Reserve, Shareholder-Funds, Capital-Employed, Net-Worth
Cash flowNet-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 KPIsCurrent-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 yearTurnover-Yoy, Profit-after-Tax-Yoy, EBITDA-Yoy, Total-Liabilities-Yoy, Employee-Numbers-Yoy, Exports-Yoy
Banking and insuranceLoans-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 auditWages-And-Salaries, Employee-Remuneration, Directors-Remuneration, Pensions, Audit-Fees, Auditor-Fees
Request
r = requests.get("https://api.zephira.ai/v2/financial/20581257",
                 params={"year": 2020}, headers=headers)
200 OKtruncated
{
    "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.

POST/v2/digital-insightsfind the company

Send name or registration_number — at least one is required — and get back matching companies with their IDs.

200 OK
[
    {
        "id": "20581257",
        "name": "NOVATECH LIMITED",
        "country_code": "GB",
        "registration_number": "02605046"
    }
]
GET/v2/digital-insights/{id}technology and traffic profile

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.

200 OKtruncated
{
    "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.

POST/v2/ownershipfind the company

Send name or registration_number — at least one is required.

400 Bad Request
{
    "fields": [
        "Choose one or more of these fields ['name', 'registration_number']."
    ]
}
GET/v2/ownership/{id}group structure

Shareholders with share class and value, plus a nested group_structure where selected: true marks the company you asked about.

200 OKtruncated
{
    "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.

GET/v2/credit-reportis a report available?
ParameterTypeRequiredDescription
companystringNoCompany name
registration_numberstringNoRegistration number
vat_numberstringNoVAT number
countrystringYesISO country code
provincestringNoProvince, from nomenclatures
registered_citystringNoCity
post_codestringNoPost code
200 OK
[
    {
        "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"
        }
    }
]
POST/v2/credit-report/report/{format}generate a report

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.

Request
{
    "source_id": "GB-0-00445790",
    "country": "GB"
}
200 OK
{
    "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"
}
GET/v2/credit-report/{id}/checkis it ready?

Returns true once the report can be fetched.

GET/v2/credit-report/report/{format}/{report_id}/fileread the report

The full report body. Sections include:

SectionContents
summaryOverall 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_profileLegal form, auditor, VAT number, SIC codes, registered and trading addresses, incorporation date, latest filed accounts, ultimate holding company
score_history · credit_limit_historyScore 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 secretariesCurrent and previous, with appointments, nationality, date of birth, other directorships
shareholders · group_structure_*Share classes and percentages; extended group, subsidiaries and affiliated entities
legal filingsCCJs (exact, possible, grouped, judicial, administrative), suits, judgements, tax liens, UCC filings, liens, collections
mortgages_and_chargesType, created and registered dates, persons entitled, further information
payment behaviourDBT trends, payment index, historic trade information, trade lines, credit extended bands, past due balances
enquiries_trendMonthly enquiry counts, 3/6/9/12-month totals, last enquiry date
historic_healthDated events such as profit warnings, with the published description
otherImport and export info, branch details, business licenses, trucking carrier info, OSHA records, publications, social balance sheet, stock information
200 OKsummary section only
{
    "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."
        ]
    }
}
POST/v2/credit-report/report/{format}/filegenerate and read in one call

Combines generation and retrieval. Best for one-off lookups where waiting through the generate step won't hurt you or your end customer.

GET/v2/credit-report/purchasedreports you already own

Re-open any report you have generated before without spending another credit. Filter with search, page and per_page.

200 OK
{
    "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.

GET/v2/nomenclatures/{list}reference lists
PathReturnsTree
/senioritySeniority levels — CXO, Director, Manager…no
/departmentDepartmentsno
/activity-typeDistributor, Producer, Service Providerno
/company-typeHead Office, Branchno
/company-statusActive (106), Inactive (108), Intermediate (1615)no
/legal-formLegal forms by jurisdictionno
/industry-focusIndustry taxonomyyes
/isicInternational SIC codesyes
/naceNACE Rev. 2yes
/sic/{country_code}Country SIC codesyes
/countryCountries with parent pathsyes
/regionRegions — Africa, Asia, Central America…yes
/statesStates for US or CA — pass countryno
/technologyWebsite technology categoriesyes
/currencyReporting currenciesno

Country codes for SIC lists

gbuscamx defritnl beieludk nosesganz
Request
r = requests.get("https://api.zephira.ai/v2/nomenclatures/sic/gb", headers=headers)
200 OK
[
    {
        "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.

FilterAccepted values
advance (contacts)have_email_address, have_telephone
trading_activityimport, export
ownership parentshas_parents, has_no_parents
foreign_parentshas_a_foreign_parent, has_no_foreign_parent
ownership_accountsconsolidated, not_consolidated
insights_visits · insights_ranking0-10000, 1000-100000, 100000-500000, 500000-1000000, 1000000-5000000, 5000000
advance_companieshave_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.

MCPhttps://mcp.zephira.ai/mcpserver URL

Identifying a company

Any one of these is usually enough — a website, or a name plus country, or a registration number.

ParameterTypeDescription
country_codestringISO country code
namestringCompany name
registration_numberstringRegistration number
vat_numberstringVAT number
tickerstringStock ticker
websitestringCompany website
emailstringCompany email
linkedinurlCompany LinkedIn URL

What you can pull

ToolWhat it does
Enrichment by Website URLIdentify a company from its domain and return the profile
Enrichment by LinkedIn URLIdentify a company from its LinkedIn page and return the profile
AutocompleteFind a company by name, registration number, VAT, ticker or email
Company FinancialsTurnover, profit, EBITDA, assets, liabilities, equity, headcount, ratios and margins with year-over-year change
Company OwnershipShareholders, 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

StepDo this
1Open the Connectors page in your AI client and choose Add connector.
2Select Custom MCP connector and enter https://mcp.zephira.ai/mcp.
3Authenticate with your Zephira.ai API key.
4Zephira.ai appears in the connector list with a green status.
5Start a conversation and ask about any company — the assistant picks the tools.
zephira-mcp · connectedMCP · HTTP
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"] }
Verified against Delaware SOS & VIES · 24 Jul 2026
This website uses cookies to improve your web experience.