API Reference

eubase normalizes company data from French (SIRENE), British (Companies House), and EU VAT (VIES) registries into a single JSON schema.

Base URL

https://eubase.dev/api/v1

Authentication

All requests require an API key passed in the X-API-Key header. Keys are prefixed with eb_live_ and can be generated from your dashboard.

curl 'https://eubase.dev/api/v1/company/search?name=doctolib&country=FR' \
  -H 'X-API-Key: eb_live_your_key_here'

Keys are shown only once at creation and stored as a SHA-256 hash. If you lose a key, revoke it and generate a new one.

GET

/v1/company/:id

Direct lookup by registry identifier. Faster than search when you already know the SIREN or Companies House number.

Parameters

ParameterTypeDescription
id (path)stringSIREN (9 digits) or CH Number (8 chars)
countryFR | GBRequired to disambiguate

Example requests

# French company by SIREN
curl 'https://eubase.dev/api/v1/company/794598813?country=FR' \
  -H 'X-API-Key: eb_live_...'

# British company by Companies House number
curl 'https://eubase.dev/api/v1/company/09346234?country=GB' \
  -H 'X-API-Key: eb_live_...'

Response schema is identical to a search result but without the confidence field.

POST

/v1/vat/validate

Validate a VAT number against the EU VIES system. Covers all 27 EU member states.

Request body

{ "vat_number": "FR14794598813" }

Example

curl -X POST 'https://eubase.dev/api/v1/vat/validate' \
  -H 'X-API-Key: eb_live_...' \
  -H 'Content-Type: application/json' \
  -d '{"vat_number":"FR14794598813"}'

Response 200

{
  "vat_number": "FR14794598813",
  "valid": true,
  "country_code": "FR",
  "name": "SAS DOCTOLIB",
  "address": "54 QUAI CHARLES PASQUA\n92300 LEVALLOIS PERRET",
  "checked_at": "2026-05-08T10:00:00Z"
}

When valid is false, name and address are absent. Results are cached for 24 hours.

Errors

All errors follow RFC 7807 with Content-Type: application/problem+json.

{
  "type": "https://eubase.dev/errors/401",
  "title": "Invalid or missing API key",
  "status": 401
}

Status codes

CodeMeaning
401API key missing or invalid
422Invalid parameters — detail in errors[]
429Monthly quota exceeded
503Upstream registry unavailable (safe to retry)

Rate Limits

Quotas reset on the first day of each calendar month (UTC). When the quota is exceeded, the response includes:

HeaderDescription
X-Quota-LimitTotal calls allowed this month
X-Quota-ResetISO 8601 timestamp of the next reset

Plans

PlanCalls / monthPriceOverage / call
Free100€0
Starter5,000€49/mo€0.015
Pro30,000€149/mo€0.010
Scale150,000€499/mo€0.005

Overage is billed automatically at the end of the month via Stripe metered billing. You receive an email alert at 80% and 100% of your quota.

Cache hits count toward your quota. Results are cached for 24 hours — identical queries within that window serve from cache at the same cost as a live call.