# Moving from the Pappers API to Sirenic: what works, what is missing

Does your code already call the Pappers API v2 over HTTP? Sirenic answers under /compat/pappers/v2/ with the same paths and the same parameter and field names, for the company profile, search and suggestions, at its own prices. Before changing a line, read what Pappers does better and what the interface does not serve: this page starts there.

## What Pappers does better than us

Let us start there: if one of these points decides for you, stay with Pappers, or keep both.

- They serve **politically-exposed-person** status. Sirenic does not serve it at all: the 2026-08-07 feasibility review said no, because the French HATVP publishes “[Données non publiées]” instead of dates of birth, so an exact namesake would come out as a “strong match”.
- Their autocomplete is **free and key-less**, with a daily quota: an excellent entry point for a public form.
- One very rich record for 1 credit beats our separate calls when you want **everything** about a company and have no reason to pick and choose.
- They cover **French non-profit records (RNA)** and produce several PDFs we do not (their own extract, the INSEE situation notice).
- On one case in our calibration (BOBION & JOANIN), their rating was better founded than ours: it read **net cash** and **tax and social debt**, two dimensions our scoring did not have at that date.

## What the compatible interface does not serve

The compatible interface serves 3 of the 23 routes their catalogue listed on 2026-08-06: `/compat/pappers/v2/entreprise`, `/compat/pappers/v2/recherche`, `/compat/pappers/v2/suggestions`. Any other route under `/compat/pappers/v2/` answers `route_non_couverte`, with no payment, and names the served paths.

A field Sirenic does not serve is never served empty or `null`: the key is left out and named in `champs_non_servis`, with its reason.

- **Never served** (`jamais_servi_ligne_6`): beneficial owners, phone and e-mail, politically-exposed-person status, address, nationality and place of birth of officers who are natural persons.
- **The birth year only** (`annee_seule`): neither an officer's full date of birth nor their age.
- **Not covered under the prefix** (`non_couvert`): documents (extracts, articles, filed accounts), search organised by officer, monitoring; search refuses creation-date criteria, and never combines a text with criteria.
- **Served elsewhere by Sirenic** (`autre_route`): establishments, financials, BODACC notices, insolvency proceedings, share capital; `routes_sirenic` names the route that serves them, at its own price.
- **A value the route could not settle** (`absence_non_conclusive`): the key is named rather than served wrong, for instance a total that is only a lower bound.
- **The key never goes in the URL**: an `api_token` parameter is refused before any payment; the Sirenic key goes in the `api-key` header (or `X-Api-Key`).
- **Extra fields are refused before any payment**: a `champs_supplementaires` parameter is refused, with the reason `jamais_servi_ligne_6` if it asks for the phone, the e-mail or politically-exposed-person status, `non_couvert` otherwise.
- **Refusals are bounded**: beyond 60 refusals per minute from one address, the answer is the `trop_de_refus` refusal, with `Retry-After`; a served call does not count.
- **A packaged client that hard-codes its base address** does not migrate through its settings: change that address in a copy of the client, or call over plain HTTP (your own code, the HTTP module of n8n or Make, a Zapier webhook).
- **No score under the prefix**: Sirenic's default-risk score stays a separate route, under its own name, never under their scoring's name.

## Pappers: what we found

Surveyed on 2026-08-11, source: [https://www.pappers.fr/api](https://www.pappers.fr/api). Every line comes from that dated survey, and from it alone.

- France API v2: 23 routes listed in the catalogue on 2026-08-06, authenticated with an `api-key` header.
- Billing in **credits**, with a surcharge per requested field: on the paid account used on 2026-08-11, financial scoring and non-financial scoring cost **30 credits each**, sanctions and politically-exposed-person status 1 credit, phone and e-mail 3 credits.

> ⚠️ Their euro price list is not reproduced here: `www.pappers.fr` returned 403 to our 2026-08-19 checks, and we do not publish a competitor's pricing from second-hand sources. See their own pricing page.

## What changes in your code

Replace the Pappers API v2 base address in your code with `https://api.sirenic.eu/compat/pappers/v2/`, and the Pappers key with a Sirenic key (`srn_live_…`) in the `api-key` header. On the served paths, parameter and field names stay those your code sends and reads.

The OpenAPI description of these paths, to import into a client generator or read before calling, is served on its own, free and with no key: [`/openapi-compat-pappers.json`](https://api.sirenic.eu/openapi-compat-pappers.json). The complete Sirenic API is described in [`/openapi.json`](https://api.sirenic.eu/openapi.json).

Without an account, each call can also be paid per call, over x402, with no key. With an account, 150 free calls a month on the quota routes.

The response keeps what Sirenic adds: `citation` as the first key, `provenance`, `listes_bornees`, `champs_non_servis` and `routes_sirenic`; a client that rejects unknown keys must ignore them. It is signed over the bytes you receive, and a paid response carries a verification number.

| Compatible path | Sirenic route that answers | Price |
| --- | --- | --- |
| `/compat/pappers/v2/entreprise?siren=…` | `/v1/entreprise/{siren}` | $0.005 |
| `/compat/pappers/v2/entreprise?siren=…&blocs=…` | `/v1/entreprise/{siren}/dossier` | $0.005, plus the requested blocks |
| `/compat/pappers/v2/recherche?q=…` | `/v1/recherche` | $0.002 |
| `/compat/pappers/v2/recherche?code_naf=…` | `/v1/prospection` | $0.02 per page |
| `/compat/pappers/v2/suggestions?q=…` | `/v1/suggestions` | free |

**The same call, at Sirenic's address**

```
# The company profile, under the Pappers API v2 field names (Sirenic key in the api-key header)
curl "https://api.sirenic.eu/compat/pappers/v2/entreprise?siren=552032534" \
  -H "api-key: $SIRENIC_KEY"

# Suggestions, free, no key
curl "https://api.sirenic.eu/compat/pappers/v2/suggestions?q=danone"
```

## How this page is built

The facts about Pappers come from our survey, dated and sourced above; nothing is extrapolated. The path, parameter and field names the interface accepts were read in open-source clients; no text of the Pappers documentation is reproduced here. Pappers is a trademark of its owner, not affiliated with Sirenic.

If you spot an error or a fact that has become false, write to [contact@sirenic.eu](mailto:contact@sirenic.eu?subject=Pappers%20migration%20correction): we will correct the page and its survey date.

## How you pay

Every route is paid **per call**, in USDC or EURC on the Base network, over the x402 protocol: no account to create, no API key, no subscription. The first call returns a `402` quote your client settles, then replays the call. A failed call is never billed.

Open today: 150 free calls a month with an account, on 123 of 129 routes (the price list says which), and pay-per-call over x402 (USDC or EURC), with no account except registry filings. Prepaid credits: card top-up is not open yet.

Paid responses are **Ed25519-signed**: you can later prove what was served to you, and when. The whole catalogue is free to read in the [OpenAPI document](https://api.sirenic.eu/openapi.json) and in [llms.txt](https://api.sirenic.eu/llms.txt).

**One call, end to end**

```
# x402 client (npm): the 402 quote is settled and the call replayed automatically
npx x402-fetch https://api.sirenic.eu/v1/entreprise/552032534

# Or over MCP, in Claude Code / Cursor
claude mcp add --transport http sirenic https://api.sirenic.eu/mcp

# Or as a local server (stdio), with your key or an x402 wallet
claude mcp add sirenic -e SIRENIC_API_KEY=srn_live_... -- npx -y sirenic-mcp
```

## Routes used and pricing

| Route | Price | Sample | What it returns |
| --- | --- | --- | --- |
| `/v1/entreprise/{siren}` | $0.005 | [free sample](https://api.sirenic.eu/exemples/entreprise-siren.json) | Full French company profile by SIREN: official company data from the French company registry (INSEE Sirene / INPI RNE). One lookup returns legal name, legal form, head office, NAF code, workforce bracket, creation date, active or ceased status, officers with name and role, collective agreement, the intra-EU VAT number and, for LEI holders, the GLEIF level-2 group (groupe_lei: consolidating parents or declared reason for none). The core KYB building block for verifying a French counterparty. |
| `/v1/recherche` | $0.002 | [free sample](https://api.sirenic.eu/exemples/recherche.json) | French company search and company lookup by name or SIREN in the official French company registry (INSEE Sirene / INPI RNE open data). Name search returns the top 10 matches with identity, SIREN, NAF code, city and active/ceased status, plus a score_confiance (0-1 match confidence) that helps disambiguate homonyms. The entry point to official data and company data on France: resolve a trading name to its SIREN identifier before pulling the full company profile, filings or financials. |
| `/v1/prospection` | $0.02 | [free sample](https://api.sirenic.eu/exemples/prospection.json) | French B2B prospecting and lead generation over the full official French company registry: build targeted company lists with multi-criteria filters: NAF/APE activity code, departement or postal-code prefix, legal form, workforce bracket, company age, active RGE environmental certification, gender-equality index. Returns 100 active companies per page; each page is one payment. Combine filters to narrow a market segment into fresh, registry-grade company lists for France. |

## Frequently asked questions

### Do I need a Sirenic account?

No. Each call can also be paid per call, over x402, with no account and no key: the first call returns a quote, your client settles it and replays the call. An account lets you pay with an API key, with its free quota.

### What does my code get for a field Sirenic does not serve?

Nothing under that name: the key is left out, never served null, and named in champs_non_servis with its reason. A typed client that requires the key must treat it as missing.

### Is an error billed?

No: an error response is never billed, and a refusal by the interface (path, method, parameter, key in the URL) goes out before any payment.

## Take it further

- [See a real response (free)](https://api.sirenic.eu/exemples/entreprise-siren.json)
- [Get the quote for /v1/entreprise/{siren}](https://api.sirenic.eu/v1/entreprise/552032534?geo=true)
- [Read the route reference](https://api.sirenic.eu/en/api)
- [Create an account: 150 free calls a month](https://api.sirenic.eu/compte?lang=en&utm_source=recherche&utm_campaign=migration-pappers)

## Read next

- [Sirenic or Pappers: which one for which need](https://api.sirenic.eu/en/compare/sirenic-or-pappers-credits-versus-pay-per-call-compared)
- [Sirenic or the free company-search API](https://api.sirenic.eu/en/compare/sirenic-or-free-french-company-search-api)


---

[Home](https://api.sirenic.eu/en) · [Pricing](https://api.sirenic.eu/en/offres) · [Guides](https://api.sirenic.eu/en/articles) · [Routes](https://api.sirenic.eu/en/api) · [About](https://api.sirenic.eu/en/about) · [Legal notice](https://api.sirenic.eu/mentions-legales) · [Privacy](https://api.sirenic.eu/en/privacy)
