Resolve402 / services
Company contacts
GET /api/company-contacts · $0.005 per call (USDC on Base or Solana, x402)
Company contact details as published by the company on its own website: shared emails only (contact@, press@, dpo@; personal addresses never returned), phones in E.164, head-office address, social pages, contact form, and legal identifiers checked (SIREN Luhn, VAT checksum, RCS, Impressum register) and matched to the French registry. Every field sourced. From a domain or URL. Nothing found = not charged.
Problem solved
You have a company website and need its official contact details (shared email, switchboard, head-office address, legal identifiers, social pages), each with the page it was read on.
Use cases
- Fill a CRM or supplier record with the official switchboard, shared email and head-office address, with the source page of each field.
- Get the SIREN and VAT number printed on a company's site, checked and matched to the French registry, before a counterparty check.
Input
GET /api/company-contacts?domain=<domain> | ?url=<any URL of the site>
| Parameter | Where | Type | Description |
|---|---|---|---|
domain | query | string | Company web domain, e.g. acme.fr |
url | query | string | Any URL of the company site (alternative to domain) |
Output
Contact details the company publishes itself on its website (legal notice / Impressum, contact page, schema.org): emails [{address, source}] limited to shared mailboxes (contact@, press@, dpo@...; personal addresses are never returned, only counted in personal_emails_omitted), phones [{number (E.164), type: standard|customer_service|sales|null, source}] (voice lines; fax numbers in fax [{number, source}]), head-office address, legal {siren, siren_source (published|vat), siret, rcs, vat {number, country, checksum}, register (HRB, FN, KvK, BCE, UID), legal_form, share_capital, official_name, siren_match, active, registry_status}, social (company pages: LinkedIn, X, Facebook, Instagram, YouTube, GitHub), contact_form_url, sources, pages_checked. SIREN/SIRET pass Luhn, the FR VAT key is recomputed; a valid SIREN is matched against the French registry. At most 8 requests per domain, robots.txt honoured. 404 no_public_contact = nothing found, not charged.
Price
$0.005 per call. Charged only if a shared email, a phone number or a legal identifier is found: 404 no_public_contact is not charged.
Example
GET https://resolve402.dev/api/company-contacts?domain=danone.com
{
"domain": "danone.com",
"company_name": "Danone S.A.",
"emails": [
{
"address": "press@danone.com",
"source": "https://www.danone.com/legal-pages/contact.html"
}
],
"personal_emails_omitted": 0,
"phones": [
{
"number": "+33144352020",
"type": "customer_service",
"source": "https://www.danone.com/"
}
],
"address": {
"street": "59-61 rue La Fayette",
"postal_code": "75009",
"city": "Paris",
"country": "FR",
"source": "https://www.danone.com/"
},
"legal": {
"siren": "552032534",
"rcs": "RCS Paris 552 032 534",
"vat": {
"number": "FR27552032534",
"country": "FR",
"checksum": "valid"
},
"legal_form": "SA",
"official_name": "DANONE",
"siren_match": true,
"active": true,
"registry_status": "checked"
},
"social": {
"linkedin": "https://www.linkedin.com/company/danone",
"x": "https://x.com/Danone"
},
"contact_form_url": null,
"sources": {
"legal.siren": "https://www.danone.com/legal-pages/legal-information.html"
},
"pages_checked": [
"https://www.danone.com/",
"https://www.danone.com/legal-pages/legal-information.html"
],
"robots_respected": true
}Bazaar discovery example served in the production 402 (abridged).
Sources
- The company's own website: legal notice / Impressum, contact page, terms, privacy page, schema.org (visible text only)
- French registry (recherche-entreprises.api.gouv.fr) for SIREN matching
- Checksums computed locally (SIREN/SIRET Luhn, French VAT key, other EU VAT checksums when public)
Limits
- Only reads the company's own site, without a headless browser: sites behind a bot challenge (Cloudflare, Akamai) or rendered only by JavaScript give 404, not charged.
- At most 8 requests and 6 s per domain; robots.txt honoured on every URL, including redirect targets.
- Personal addresses are never returned, only counted. Web host, agency and publication director details are deliberately ignored.
- Nothing stored. Opt-out of a domain or an address: POST /api/opt-out.
Use it
- HTTP + x402: call the URL, pay the 402 with any x402 v2 client, retry with the PAYMENT-SIGNATURE header.
- OpenAPI: /openapi.json (operation
companyContacts) - MCP:
npx -y resolve402-mcp, toolcompany_contacts(npm) - Agent guide: /llms.txt · skill: /SKILL.md