Quickstart: first company in 30 seconds

Entyrix is a REST API over a public database of 60M European companies (23 markets: FR, GB, RO, SK, UA, GR, CZ, BE, NO, IE, FI, CH, PL, AT, CY, LT, LV, EE, SI, ES, IT, NL, HR). This guide shows how to wire company verification (KYC/KYB), credit scores or sales prospecting into your application.

Prerequisites: an API key: sign in and you get a Free key right away: 1,000 requests per month and 120 per minute; higher plans are on the pricing page. An agent without a browser can request a key itself through POST /api/v1/signup and the code from the email (steps in llms.txt).
Running an online shop? The e-commerce quickstart is a ready recipe for a B2B registration form: company-ID autocomplete, address autofill with a VIES check and a credit gate in three calls, with a copy-paste client in PHP (PrestaShop) and JavaScript.

1Authentication

Endpoints that need a key accept a Bearer token in the Authorization header:

Authorization: Bearer sk_...

Alternatively through the query parameter ?api_key=sk_... (handy when trying it in a browser). Key limits depend on the plan; Free: 1,000 requests per month and 120 per minute.

2Basic lookup by company ID

Endpoint: GET /api/v1/companies/lookup?ico=:ico returns the full company detail including address, legal form, NACE, directors, financial statements and risk flags. Response within 5 ms.

curl -H "Authorization: Bearer sk_..." \
     "https://entyrix.com/api/v1/companies/lookup?ico=31322832"
import requests
r = requests.get(
    "https://entyrix.com/api/v1/companies/lookup",
    params={"ico": "31322832"},
    headers={"Authorization": "Bearer sk_..."},
    timeout=10,
)
r.raise_for_status()
company = r.json()["data"]
print(company["name"], company["country"])
const r = await fetch(
  "https://entyrix.com/api/v1/companies/lookup?ico=31322832",
  { headers: { Authorization: "Bearer sk_..." } }
);
if (!r.ok) throw new Error(`${r.status}`);
const { data } = await r.json();
console.log(data.name, data.country);
<?php
$ch = curl_init("https://entyrix.com/api/v1/companies/lookup?ico=31322832");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer sk_..."]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $res["data"]["name"] . PHP_EOL;

3Bulk query (up to 100 company IDs)

For portfolio monitoring or bulk imports. POST /api/v1/companies/bulk takes a JSON body {"icos": [...]} and returns an array: 1 request instead of N.

curl -X POST \
     -H "Authorization: Bearer sk_..." \
     -H "Content-Type: application/json" \
     -d '{"icos":["31322832","35763469","00151700"]}' \
     https://entyrix.com/api/v1/companies/bulk
r = requests.post(
    "https://entyrix.com/api/v1/companies/bulk",
    json={"icos": ["31322832", "35763469", "00151700"]},
    headers={
        "Authorization": "Bearer sk_...",
        "Content-Type": "application/json",
    },
)
for c in r.json()["data"]:
    print(c["ico"], c["name"])
const r = await fetch(
  "https://entyrix.com/api/v1/companies/bulk",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer sk_...",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ icos: ["31322832","35763469","00151700"] }),
  }
);
const { data } = await r.json();
data.forEach(c => console.log(c.ico, c.name));
<?php
$ch = curl_init("https://entyrix.com/api/v1/companies/bulk");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer sk_...",
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode(["icos" => ["31322832","35763469","00151700"]]),
]);
$res = json_decode(curl_exec($ch), true);
foreach ($res["data"] as $c) echo "{$c["ico"]}  {$c["name"]}\n";

4KYB compliance check

Endpoint: GET /api/v1/companies/:ico/compliance returns one KYB summary: tier (PROHIBITED / HIGH_RISK / ENHANCED_DD / STANDARD), flags (bankruptcy, sanctions, tax debt, shell address, …) and credit grade. Useful when vetting a new partner with one call instead of fourteen.

curl -H "Authorization: Bearer sk_..." \
     "https://entyrix.com/api/v1/companies/:ico/compliance" \
     | jq '.data.tier, .data.flags'
r = requests.get(
    f"https://entyrix.com/api/v1/companies/{ico}/compliance",
    headers={"Authorization": "Bearer sk_..."},
)
c = r.json()["data"]
if c["tier"] in ("HIGH_RISK", "PROHIBITED"):
    reject_order(ico, reason=c["flags"])
const r = await fetch(
  `https://entyrix.com/api/v1/companies/${ico}/compliance`,
  { headers: { Authorization: "Bearer sk_..." } }
);
const { data } = await r.json();
if (["HIGH_RISK","PROHIBITED"].includes(data.tier)) {
  rejectOrder(ico, data.flags);
}
<?php
$ch = curl_init("https://entyrix.com/api/v1/companies/$ico/compliance");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer sk_..."]);
$d = json_decode(curl_exec($ch), true)["data"];
if (in_array($d["tier"], ["HIGH_RISK","PROHIBITED"])) reject_order($ico, $d["flags"]);

5Advanced search (screener)

GET /api/v1/companies/advanced-search supports 30+ filters: country, NACE, region, size, VAT status, shell-address flag, revenue range, credit grade, NIS2 scope. Useful for prospecting or sorting a portfolio by risk. Example: all SK IT companies (NACE 6201) registered for VAT, sorted by revenue:

curl -G \
     -H "Authorization: Bearer sk_..." \
     --data-urlencode "country=sk" \
     --data-urlencode "nace_prefix=6201" \
     --data-urlencode "is_vat_payer=true" \
     --data-urlencode "order_by=turnover_desc" \
     --data-urlencode "limit=50" \
     https://entyrix.com/api/v1/companies/advanced-search

CSV export: the same URL with the .csv suffix (40 columns including compliance flags).

Response and error handling

All endpoints return the same envelope { data, meta: { request_id, duration_ms, cached } }. Errors: { error: { code, message } }.

Status codes: 200 (success), 400 (invalid input), 401 (bad API key), 404 (not found), 429 (per-minute limit or monthly quota exceeded), 500 (internal error). When contacting support, send the request_id.

More resources

Plans: Free, Pro and Business with a monthly quota and a per-minute limit, one-off day or week passes. Prices and quotas are on the pricing page.