Sirenic Kyb API

The Kyb API from Sirenic — 2 operation(s) for kyb.

Operations 2

GET /v1/kyb/batch Batch KYB: 2 to 100 French companies in one call #
GET /v1/kyb/{siren} Complete KYB file for a French company (one call) #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/sirenic-eu:sirenic-eu-kyb-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

sirenic-eu-kyb-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Sirenic Kyb API
  version: 1.0.0
  description: 'French & European company data, pay-per-call in USDC or EURC — EURC at numeric parity: the same figure as the USDC price, not FX-converted (at the ECB rate of 4 Sept 2026, about 16 % more in dollar terms) via the x402 protocol — or with an API key and prepaid credits (1 credit = 1 EUR, same per-call prices, no wallet).'
  contact:
    email: contact@sirenic.eu
  license:
    name: 'Data: Licence Ouverte / Open License Etalab 2.0'
    url: https://www.etalab.gouv.fr/licence-ouverte-open-licence/
servers:
- url: https://api.sirenic.eu
security:
- {}
- ApiKeyAuth: []
- BearerAuth: []
tags:
- name: Kyb
paths:
  /v1/kyb/batch:
    get:
      summary: 'Batch KYB: 2 to 100 French companies in one call'
      description: 'Batch KYB and bulk company lookup: full Know Your Business files for 2 to 100 French companies in one call (comma-separated sirens parameter) — bulk due diligence, compliance and onboarding screening of a whole portfolio, each file with per-block provenance (official register + as-of date). Billed per company at $0.105 (30% off the $0.15 unit price); the amount is quoted from the number of SIREN. A SIREN with no diffusible company is returned as trouve=false and billed as one lookup.'
      x-price: '$0.105 per company (billed = unit price × number of SIREN; 30% off the unit KYB) — A full-size request quotes up to $10.50, above the $1.00 single-payment cap that x402 clients apply BY DEFAULT since @x402/core 2.23 (spendControls): raise spendControls.maxAmountPerPayment, or set spendControls: false, before signing — otherwise your own client rejects the quote without ever calling us.'
      x-payment:
        protocol: x402
        network: eip155:8453
      parameters:
      - name: sirens
        in: query
        required: true
        schema:
          type: string
          pattern: ^\d{9}(,\d{9}){1,99}$
        example: 552032534,542065479
        description: 2 to 100 comma-separated 9-digit SIRENs (Luhn-validated, deduplicated)
      responses:
        '200':
          description: 'One entry per requested SIREN: found companies carry the full KYB file with trouve=true; unknown SIRENs carry trouve=false and are billed as one lookup. Fields nombre_demande and nombre_trouve summarize the batch. Each found file carries its own per-block provenance, in the same shape as GET /v1/kyb/{siren}.'
          content:
            application/json:
              example:
                nombre_demande: 2
                nombre_trouve: 2
                entreprises:
                - trouve: true
                  siren: '552032534'
                  identite:
                    denomination: DANONE
                    etat_administratif: actif
                  tva_intracommunautaire: FR27552032534
                  criblage_sanctions:
                    statut: correspondances_a_verifier
                  score_completude: 100
                  blocs_manquants: []
                tarification: 'Facturé par SIREN demandé (prix unitaire de lot). Un SIREN sans entreprise diffusible est restitué `trouve: false` et compté comme une consultation. / Billed per requested SIREN; a not-found SIREN counts as one lookup.'
        '400':
          $ref: '#/components/responses/Reponse400InvalidInput'
        '402':
          $ref: '#/components/responses/Reponse402PaymentRequired'
        '404':
          description: No diffusible company for this SIREN.
        '503':
          description: 'At least one file could not be built (infrastructure), or sanctions screening was unavailable for a company of the batch (`criblage_sanctions_indisponible`, core block): the WHOLE batch is cancelled, nothing is charged — retry.'
      tags:
      - Kyb
      operationId: getV1KybBatch
      x-operation-id-source: derived
  /v1/kyb/{siren}:
    get:
      summary: Complete KYB file for a French company (one call)
      x-price: $0.15
      x-payment:
        protocol: x402
        network: eip155:8453
      parameters:
      - $ref: '#/components/parameters/siren'
      responses:
        '200':
          description: 'Identity, officers, BODACC legal alerts, filed financials, sanctions screening of the company and each officer (6 official lists), computed VAT number, completeness score with missing blocks. The screening block also reports every list consulted with its entry count, publication date and what that date means. Carries the common `provenance[]` envelope (states and reading rules: GET /v1/lecture, free). Screening status is qualification-aware since 2026-09-04: `correspondances_a_verifier` only when at least one match weighs in the shared concordance table (label identity, enclosing name, included name, near-homonym, short label, unqualifiable); `rapprochements_partiels_seulement` when matches exist but every one is a partial resemblance (likely homonymy on a generic token) — served, counted by no verdict; `aucune_correspondance` / `aucune_correspondance_partielle` unchanged. Statutory auditors (commissaires aux comptes) are no longer screened and are listed in `criblage_sanctions.cibles_ecartees` with the reason: measured on 11 files, 22% of all matches came from audit firms (KPMG alone: 12 identical matches on two unrelated clients).'
          content:
            application/json:
              example:
                siren: '552032534'
                identite:
                  denomination: DANONE
                  nature_juridique: '5599'
                  activite_principale: 70.10Z
                  etat_administratif: actif
                  date_creation: '1955-01-01'
                  siege:
                    siret: '55203253400703'
                    code_postal: '75009'
                    commune: PARIS
                  nombre_etablissements: 19
                tva_intracommunautaire: FR27552032534
                alertes_bodacc:
                  procedures_collectives: []
                  radiations: []
                  total_annonces: 106
                finances:
                  nombre_exercices: 8
                  exercices:
                  - date_cloture: '2024-12-31'
                    chiffre_affaires: 1030000000
                    resultat_net: 592000000
                criblage_sanctions:
                  statut: correspondances_a_verifier
                  cibles:
                  - cible: DANONE
                    role: entreprise
                    nombre_correspondances: 0
                    correspondances: []
                    troncature:
                      tronquee: false
                      correspondances_servies: 0
                      non_servies: 0
                      niveau_non_servi: null
                      prefiltre_sature: false
                      note: null
                  cibles_non_criblees: []
                score_completude: 100
                blocs_manquants: []
                data_freshness: 'identité : stock Sirene mensuel (2026-07-01)'
        '400':
          $ref: '#/components/responses/Reponse400InvalidInput'
        '402':
          $ref: '#/components/responses/Reponse402PaymentRequired'
        '404':
          description: No diffusible company for this SIREN.
        '503':
          description: 'Sanctions screening unavailable when the file was built (core block, CDU decision of 2026-09-05): file NOT served, payment cancelled — retry. Partial list outages are still served and flagged in `listes_absentes`.'
      tags:
      - Kyb
      operationId: getV1KybBySiren
      x-operation-id-source: derived
components:
  parameters:
    siren:
      in: path
      name: siren
      required: true
      schema:
        type: string
        pattern: ^\d{9}$
      example: '552032534'
      description: 9-digit SIREN (Luhn-validated)
  responses:
    Reponse402PaymentRequired:
      description: Payment required — x402 payment requirements in body (JSON) and headers.
    Reponse400InvalidInput:
      description: 'Invalid input. Body: {error, champ, message}. Never charged. / Jamais facturé.'
  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 /compte.'
    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).'