{"openapi":"3.1.0","info":{"title":"Sirenic API: Pappers compatibility","version":"1.0.0","description":"The Pappers-compatible interface of the Sirenic API, in its own document: the paths under /compat/pappers/v2/ take Pappers API v2 parameter and field names and answer through the Sirenic route of the price list, at its price. Payment: x402, network eip155:8453, assets USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 or EURC 0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42 (same numeric amount in either), or a Sirenic API key (srn_live_…) with prepaid credits, in the api-key header, X-Api-Key or Authorization: Bearer. The complete Sirenic API (every /v1 route, prices, outages, citation, verification number) is described at https://api.sirenic.eu/openapi.json. Toute réponse non-2xx (400, 402, 404, 5xx) n'est jamais facturée : le paiement x402 est annulé avant règlement, le transfert n'a donc pas lieu et il n'y a rien à rembourser. / Any non-2xx response is never charged: the x402 payment is cancelled before settlement, so the transfer never happens and there is nothing to refund. Pappers is a trademark of its owner, not affiliated with Sirenic.","contact":{"email":"contact@sirenic.eu"},"license":{"name":"Data under each source's licence: Etalab 2.0, Open Licence 1.0 (Etalab), OGL 3.0, CC BY 4.0, NLOD 2.0, CC0 or the source's own terms (register dictionary: GET /v1/provenance/registres)","url":"https://api.sirenic.eu/v1/provenance/registres"}},"servers":[{"url":"https://api.sirenic.eu"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Sirenic API key (srn_live_…) paying with prepaid credits (1 credit = 1 EUR, same prices as x402). Credits expire 12 months after purchase; calls are charged first to the credits closest to expiry. Optional: without it, the same routes answer 402 with a signable x402 quote. Insufficient balance → 402 {error: credits_insuffisants} WITHOUT a PAYMENT-REQUIRED header. Get a key at https://api.sirenic.eu/compte?utm_source=api&utm_campaign=openapi."},"BearerAuth":{"type":"http","scheme":"bearer","description":"The same srn_live_… API key sent as Authorization: Bearer. A bearer value that is not an srn_ key is ignored (x402 flow unchanged)."},"CompatPappersApiKey":{"type":"apiKey","in":"header","name":"api-key","description":"The srn_live_… key in the api-key header, read under /compat/pappers/v2/ only; else 401 cle_non_sirenic."}}},"security":[{},{"CompatPappersApiKey":[]},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"tags":[{"name":"Pappers compatibility","description":"/compat/pappers/v2/entreprise, recherche, suggestions take Pappers API v2 parameter and field names, each call rewritten to the answering route of the price list: same price, same 402 (free_tier), citation first, provenance, verification number, signature over the bytes served; other statuses are that route's. An unserved field a Pappers client reads is never null: champs_non_servis names it, closed reason (jamais_servi_ligne_6, annee_seule, non_couvert, absence_non_conclusive, autre_route); for autre_route, routes_sirenic names the route. Refused before any payment: another path under the prefix (404 route_non_couverte), method (405), api_token in the URL; beyond 60 refusals per minute per address, 429 trop_de_refus with Retry-After. JSON only: Accept: text/markdown is ignored. Pappers is a trademark of its owner, not affiliated with Sirenic."}],"paths":{"/compat/pappers/v2/entreprise":{"get":{"tags":["Pappers compatibility"],"summary":"Pappers-compatible company profile: GET /v1/entreprise/{siren}, or its dossier with blocs","x-price":"$0.005 (/v1/entreprise/{siren}); with blocs, $0.005 plus blocks (/v1/entreprise/{siren}/dossier)","x-payment":{"protocol":"x402","network":"eip155:8453"},"security":[{},{"CompatPappersApiKey":[]},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"siren","in":"query","schema":{"type":"string"},"description":"9-digit SIREN (spaces removed); siren or siret."},{"name":"siret","in":"query","schema":{"type":"string"},"description":"14-digit SIRET: only its SIREN is read; the company profile is served."},{"name":"blocs","in":"query","schema":{"type":"string"},"description":"Sirenic: dossier blocks, priced per block (GET /v1/entreprise/{siren}/dossier)."},{"name":"marques","in":"query","schema":{"type":"string"},"description":"Accepted, no effect: trademarks are named autre_route."}],"responses":{"200":{"description":"Pappers v2 names where Sirenic serves the data (siren_formate, nom_entreprise, personne_morale, code_naf, categorie_juridique, siege, representants with birth year only), other Sirenic keys under their name; champs_non_servis {field: reason} names each unserved key a Pappers client reads (beneficial owners, contacts, natural persons' addresses: jamais_servi_ligne_6). With blocs, blocks stay under blocs; a field a served block carries is not named."},"400":{"description":"Refused before any payment: parametre_non_couvert {champ, raison, routes_sirenic}, parametre_invalide, parametre_manquant, cle_dans_l_url; then the answering route's 400. Never charged. / Jamais facturé."},"401":{"description":"cle_non_sirenic: api-key is not an srn_ key."},"402":{"description":"Payment required: x402 payment requirements in the PAYMENT-REQUIRED header and the JSON body (accepts, price); the body's free_tier says whether this route is in the free API key quota and where to get the key."},"404":{"description":"No diffusible company."},"429":{"description":"trop_de_refus: over 60 refusals per minute from this address; Retry-After."}}}},"/compat/pappers/v2/recherche":{"get":{"tags":["Pappers compatibility"],"summary":"Pappers-compatible search: q to GET /v1/recherche, criteria to GET /v1/prospection","x-price":"$0.002 with q (/v1/recherche); $0.02 per page with criteria (/v1/prospection)","x-payment":{"protocol":"x402","network":"eip155:8453"},"security":[{},{"CompatPappersApiKey":[]},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Name or identifier; GET /v1/recherche, one page, never with a criterion."},{"name":"code_naf","in":"query","schema":{"type":"string"},"description":"NAF code (naf)."},{"name":"departement","in":"query","schema":{"type":"string"},"description":"Department."},{"name":"code_postal","in":"query","schema":{"type":"string"},"description":"Postcode."},{"name":"categorie_juridique","in":"query","schema":{"type":"string"},"description":"Legal category code (forme_juridique)."},{"name":"tranche_effectif_min","in":"query","schema":{"type":"string"},"description":"INSEE workforce bracket, read as its lower headcount (effectif_min)."},{"name":"tranche_effectif_max","in":"query","schema":{"type":"string"},"description":"INSEE workforce bracket, read as its upper headcount (effectif_max)."},{"name":"entreprise_cessee","in":"query","schema":{"type":"string"},"description":"false only: active companies; true is refused."},{"name":"page","in":"query","schema":{"type":"string"},"description":"Beyond 1 only with par_page=100; with q, 1 only."},{"name":"par_page","in":"query","schema":{"type":"string"},"description":"No effect but 100 for a page beyond 1; the size served is the route's (listes_bornees)."}],"responses":{"200":{"description":"total, page, resultats read like profiles; a total known only as a lower bound is not served as total (absence_non_conclusive), listes_bornees keeps the cut; champs_non_servis {field: reason} names each unserved key a Pappers client reads."},"400":{"description":"Refused before any payment: parametre_non_couvert {champ, raison, routes_sirenic}, parametre_invalide, parametre_manquant, cle_dans_l_url; then the answering route's 400. Never charged. / Jamais facturé."},"401":{"description":"cle_non_sirenic: api-key is not an srn_ key."},"402":{"description":"Payment required: x402 payment requirements in the PAYMENT-REQUIRED header and the JSON body (accepts, price); the body's free_tier says whether this route is in the free API key quota and where to get the key."},"429":{"description":"trop_de_refus: over 60 refusals per minute from this address; Retry-After."}}}},"/compat/pappers/v2/suggestions":{"get":{"tags":["Pappers compatibility"],"summary":"FREE: Pappers-compatible suggestions from GET /v1/suggestions","security":[],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Name or identifier; GET /v1/recherche, one page, never with a criterion."},{"name":"longueur","in":"query","schema":{"type":"string"},"description":"Accepted; the route's own bound applies (listes_bornees)."},{"name":"cibles","in":"query","schema":{"type":"string"},"description":"nom_entreprise, denomination, siren; nom_complet and siret named non_couvert; representant refused."}],"responses":{"200":{"description":"resultats_nom_entreprise and resultats_denomination (one list), resultats_siren when q is a SIREN; champs_non_servis {field: reason} names each unserved key a Pappers client reads. Signed, without citation or verification number."},"400":{"description":"Refused before any payment: parametre_non_couvert {champ, raison, routes_sirenic}, parametre_invalide, parametre_manquant, cle_dans_l_url; then the answering route's 400."},"401":{"description":"cle_non_sirenic: api-key is not an srn_ key. None needed here."},"429":{"description":"trop_de_refus: over 60 refusals per minute from this address; Retry-After. Or the /v1/suggestions quota."}}}}}}