Quickstart¶
Goal: your first successful FirmaDB call in 90 seconds.
1. Get your API key¶
Sign up at firmadb.com/signup. The Free tier gives you 1,000 results/month with no credit card — plenty for evaluation, demos, or a small workflow.
You'll receive a key that looks like:
Set it as an environment variable so you don't paste it into requests:
Secret keys (sk) are server-side only
The sk class key has full account access. Never embed it in client-side code or share it with agents. For agent integrations and constrained environments, use a restricted key (rk) instead.
2. Make your first request¶
Look up L'Oréal by its French SIREN (552120222):
const apiKey = process.env.FIRMADB_API_KEY!;
const resp = await fetch(
"https://api.firmadb.com/v1/companies/FR/552120222",
{ headers: { Authorization: `Bearer ${apiKey}` } },
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const company = await resp.json();
console.log(company.name, "-", company.status);
3. Understand the response¶
{
"object": "company",
"country": "FR",
"registry_id": "552120222",
"name": "L'Oreal",
"legal_form": "SA a conseil d'administration",
"status": "active",
"status_active": true,
"registered_date": "1963-12-31",
"address": {
"street": "14 Rue Royale",
"city": "Paris",
"postal_code": "75008",
"country": "FR"
},
"nace_code": "20.42Z",
"nace_description": "Manufacture of perfumes and toilet preparations",
"employee_count": 87400,
"website": "https://www.loreal.com",
"source_url": "https://annuaire-entreprises.data.gouv.fr/etablissement/55212022200016",
"data_freshness": {
"record_retrieved_at": "2026-05-04T02:15:00Z",
"country_dataset_updated_at": "2026-05-04T02:00:00Z",
"freshness_status": "current",
"max_age_days": 7
},
"request_id": "req_01HZAB7MJX9V8GG6P3K5R2QC4N"
}
The fields you'll use most:
| Field | What it tells you |
|---|---|
name |
Official registered name as filed with the registry. |
status |
Normalized status: active, dissolved, suspended, liquidation, or unknown. |
status_active |
Convenience boolean. true for active, false for dissolved/suspended/liquidation, null for unknown. |
source_url |
Direct link to the government registry page for this record — auditable, ungameable. |
data_freshness.country_dataset_updated_at |
When the country's registry data was last loaded. |
request_id |
Echoed in the X-Request-Id response header. Quote this when contacting support. |
Search is free — only resolved lookups consume your monthly results
GET /v1/companies/search and 404s on /v1/companies/{country}/{id} cost zero billable results. Only successful exact lookups, batch matches, and verifications count toward your 1,000 monthly results on the Free tier.
4. What's next?¶
Pick the path that matches your use case:
I have names, not registry IDs
Use the search endpoint, then look up the winner by ID. → Search by Name, Then Look Up by ID
I have a CRM list of companies to enrich
Batch up to 100 (country, registry_id) pairs per call with POST /v1/companies/lookup-batch. → CRM Enrichment guide
I need to check if a company is active (KYB)
Use firmadb_verify_status (MCP) or hit the lookup endpoint and read status_active. → KYB Status Verification
I'm building an AI agent
Connect to the hosted MCP server at mcp.firmadb.com/mcp. → MCP Setup
Common next steps¶
- API Reference — every endpoint, every parameter, interactive try-it-out.
- Errors — every error shape, what it means, how to fix it.
- Authentication — key formats, scopes, restricted keys, rotation.