# Référence de l'API LegalOne

> Référence de l'API LegalOne, générée depuis OpenAPI : routes entreprises, BODACC, documents, adresses et annonces légales, avec paramètres et exemples.

- Page : https://legalone.fr/developers/documentation
- Source : LegalOne (legalone.fr)

Identité, établissements, capital, documents et avis BODACC des entreprises françaises, et adresses normalisées. 20 routes et 21 appels, générés depuis [openapi.json](https://api.legalone.fr/v1/openapi.json) (version 0.1.0).

Présentation, inscription gratuite et serveur MCP : [API et MCP gratuits des entreprises françaises](https://legalone.fr/developers).

## Présentation

API gratuite sur les entreprises françaises, construite sur des données publiques : INSEE Sirene (identité, établissements), INPI RNE (capital, documents déposés) et DILA BODACC (avis). Ces données sont en lecture seule ; seule la préparation d'annonces légales (`/v1/annonces/brouillons`, quand elle est ouverte) enregistre un brouillon sur legalone.fr, sans paiement ni publication automatiques. Les dirigeants sont limités à leur nom et à leur fonction, plus le mois et l'année de naissance pour une clé d'accès étendu (compte vérifié). Il n'existe aucune recherche de personnes.

Elle sert à pré-remplir et à enrichir l'onboarding de vos clients professionnels : à partir d'un SIREN, vous obtenez la dénomination, la forme juridique, l'adresse du siège (normalisée et géolocalisée), le capital, les dirigeants (nom et fonction) et le code d'activité. Ces données servent à pré-remplir et enrichir ; elles ne remplacent pas la vérification réglementaire (article L.561-5 du code monétaire et financier) : vérifiez sur un extrait Kbis ou RNE.

Les routes `/v1/adresses` complètent ces données : autocomplétion, normalisation et géolocalisation d'adresses postales françaises, à partir de la Base Adresse Nationale (BAN, Licence Ouverte 2.0). Elles ne disent rien sur les personnes qui habitent ou travaillent à une adresse.

## Authentification

Toutes les routes exigent une clé, envoyée dans `Authorization: Bearer lo_…` (ou `X-API-Key`), à l'exception de `GET /v1/health`, `GET /v1/openapi.json`, de l'inscription (`POST /v1/compte`, `POST /v1/compte/connexion`) et de l'opposition (`POST /v1/oppositions`). Une requête sans clé reçoit un 401. La clé est gratuite : créez un compte développeur sur [https://www.legalone.fr/developers#compte](https://www.legalone.fr/developers#compte) (adresse e-mail vérifiée, société, usage prévu, acceptation des conditions), puis générez-la dans l'espace développeur [https://api.legalone.fr/compte](https://api.legalone.fr/compte).

## Attribution

Affichez près des données le texte `Données : LegalOne — sources INSEE Sirene, INPI RNE, DILA BODACC, mise à jour le {date}`, où {date} est `meta.updatedAt` au format JJ/MM/AAAA et « LegalOne » un lien vers `data.links.legalone` (ou [https://www.legalone.fr](https://www.legalone.fr)). Le texte prêt à afficher est dans `meta.attribution`. Seules les sources de `meta.sources` sont à citer : quand elles incluent la Base Adresse Nationale (adresse normalisée d'un établissement), `meta.attribution` l'ajoute à la liste. Les routes `/v1/adresses` n'ont pas de date de mise à jour : leur mention est `Adresses : Base Adresse Nationale (BAN), Licence Ouverte 2.0 — via LegalOne`.

## Quotas

Il n'existe pas de quota sans clé. Un compte standard a 60 requêtes par minute, 5 000 par jour et 100 000 par mois, pour toutes ses clés ensemble ; la recherche est limitée à 20 requêtes par minute. Un quota supérieur, accordé gratuitement sur demande depuis l'espace développeur, donne 300 requêtes par minute, 25 000 par jour et 500 000 par mois, dont 60 par minute pour la recherche. Les routes d'adresses partagent ces quotas. Les en-têtes `X-RateLimit-*` indiquent l'état du quota et `Retry-After` le délai avant de réessayer après un 429. Le serveur MCP ([https://mcp.legalone.fr/mcp](https://mcp.legalone.fr/mcp)) reste utilisable sans clé, avec un quota par adresse IP plus bas (60 requêtes par minute, 1 000 par jour) ; une clé envoyée avec la requête applique le quota de son compte (toutes ses clés ensemble).

## Annonces légales

Les routes `/v1/annonces` donnent le prix réglementé d'une annonce légale (fixé par arrêté, identique dans tous les journaux habilités du département), les annonces qu'exige un événement (table de règles, base légale citée), les démarches qui suivent, et préparent un brouillon sur legalone.fr : le lien renvoyé (valable 7 jours) ouvre le formulaire pré-rempli, où l'utilisateur relit, complète et paie. Aucun paiement ne passe par l'API. Mention : `Tarifs et règles : textes officiels (Légifrance, service-public.gouv.fr) — via LegalOne`.

## Cache

Ne conservez pas une réponse plus de 7 jours sans la rafraîchir : une société ou un avis peut disparaître après une opposition ou un retrait à la source, et un 404 vaut demande de retrait. Utilisez `ETag` et `If-None-Match` pour revalider à moindre coût. Les réponses portent `Cache-Control: private` (`max-age=3600` pour les fiches, 600 pour la recherche, 86400 pour les adresses) : elles ne doivent pas être mises en cache par un cache partagé, qui contournerait la clé.

## Erreurs

Toutes les erreurs suivent la RFC 9457 (`application/problem+json`).

Conditions d'utilisation : [https://www.legalone.fr/developers/conditions](https://www.legalone.fr/developers/conditions). Politique de confidentialité : [https://www.legalone.fr/developers/conditions#confidentialite](https://www.legalone.fr/developers/conditions#confidentialite)

## Entreprises

Identité officielle et recherche d'entreprises (INSEE Sirene, INPI RNE).

GET`/v1/entreprises/{siren}`Clé d'API obligatoire

### Fiche d'identité officielle d'une entreprise à partir de son SIREN

Renvoie l'identité officielle d'une entreprise française : dénomination, état (en activité ou cessée), forme juridique, activité (NAF), date de création, siège, établissements, capital social et dirigeants (nom et fonction uniquement). Utilisez-la quand vous connaissez le SIREN (9 chiffres) et voulez des faits vérifiables sur la société.

**Détails**

Si vous n'avez que le nom, appelez d'abord `searchCompanies`. Ne sert pas à rechercher des personnes, ni à obtenir des coordonnées de contact, des adresses personnelles ou, sauf accès étendu, des dates de naissance. Idéale pour pré-remplir un formulaire d'onboarding à partir du SIREN (dénomination, forme juridique, adresse du siège normalisée, capital, dirigeants, code d'activité) ; ces données servent à pré-remplir et enrichir, elles ne remplacent pas la vérification réglementaire (article L.561-5 du code monétaire et financier) : vérifiez sur un extrait Kbis ou RNE. Accès étendu (conditions d'utilisation, article 4 bis) : pour une clé portant le scope `officers:birth`, accordée par l'équipe à un compte vérifié, chaque dirigeant personne physique dont la date est connue porte en plus `birth` (mois et année de naissance, AAAA-MM, tels que publiés par le RNE) ; la réponse est alors `Cache-Control: private, no-store` avec `Vary: Authorization`, `meta.warnings` l'indique, `meta.coverage.officerBirth` est présent et l'INPI RNE figure dans `meta.sources`. Cette donnée n'existe ni en recherche, ni dans les établissements ou les listes, ni dans le serveur MCP. Jamais le jour ni le lieu de naissance, la nationalité ou le domicile. `commercialProspectingAllowed` vaut faux quand la prospection est interdite ou inconnue. Chaque établissement porte, quand elle est connue, son adresse normalisée et géolocalisée dans `address.normalized` (Base Adresse Nationale) ; `meta.attribution` cite alors aussi la BAN. Affichez l'attribution de `meta.attribution`.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `siren` string · chemin | obligatoire | Numéro SIREN à 9 chiffres. Les espaces et points saisis (ex. 552 032 534) sont ignorés. format `^\d{9}$` |

#### Réponses

- 200Fiche de l'entreprise.
- 304Non modifié : la ressource correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 404Ressource introuvable ou non diffusable (diffusion restreinte, opposition).
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl \
  -H "Authorization: Bearer lo_votre_cle" \
  https://api.legalone.fr/v1/entreprises/552032534
```

Réponse 200

```
{
  "data": {
    "siren": "552032534",
    "name": "Exemple SAS",
    "acronym": null,
    "status": "active",
    "legalFormCode": "5710",
    "activityCode": "62.01Z",
    "creationDate": "2010-01-15",
    "cessationDate": null,
    "headOffice": {
      "siret": "55203253400646",
      "siren": "552032534",
      "name": "Exemple SAS",
      "status": "active",
      "isHeadOffice": true,
      "address": {
        "line": "8 boulevard du Port",
        "postalCode": "80000",
        "city": "Amiens",
        "countryCode": null,
        "normalized": {
          "id": "80021_6590_00008",
          "label": "8 Boulevard du Port 80000 Amiens",
          "kind": "housenumber",
          "houseNumber": "8",
          "street": "Boulevard du Port",
          "postalCode": "80000",
          "city": "Amiens",
          "cityCode": "80021",
          "latitude": 49.897443,
          "longitude": 2.290084,
          "score": 0.97,
          "geocodedAt": "2026-10-24T01:30:00.000Z"
        }
      },
      "activityCode": "62.01Z",
      "creationDate": "2010-01-15",
      "closureDate": null,
      "links": {
        "self": "https://api.legalone.fr/v1/etablissements/55203253400646",
        "company": "https://api.legalone.fr/v1/entreprises/552032534",
        "legalone": "https://www.legalone.fr/etablissement/55203253400646"
      }
    },
    "establishments": {
      "total": 1,
      "open": 1,
      "items": [
        {
          "siret": "55203253400646",
          "siren": "552032534",
          "name": "Exemple SAS",
          "status": "active",
          "isHeadOffice": true,
          "address": {
            "line": "8 boulevard du Port",
            "postalCode": "80000",
            "city": "Amiens",
            "countryCode": null,
            "normalized": {
              "id": "80021_6590_00008",
              "label": "8 Boulevard du Port 80000 Amiens",
              "kind": "housenumber",
              "houseNumber": "8",
              "street": "Boulevard du Port",
              "postalCode": "80000",
              "city": "Amiens",
              "cityCode": "80021",
              "latitude": 49.897443,
              "longitude": 2.290084,
              "score": 0.97,
              "geocodedAt": "2026-10-24T01:30:00.000Z"
            }
          },
          "activityCode": "62.01Z",
          "creationDate": "2010-01-15",
          "closureDate": null,
          "links": {
            "self": "https://api.legalone.fr/v1/etablissements/55203253400646",
            "company": "https://api.legalone.fr/v1/entreprises/552032534",
            "legalone": "https://www.legalone.fr/etablissement/55203253400646"
          }
        }
      ]
    },
    "capital": {
      "amount": 10000,
      "currency": "EUR",
      "variable": false,
      "minimum": null
    },
    "officers": [
      {
        "id": "dirigeant-1",
        "name": "Exemple Holding",
        "role": "Président",
        "type": "company"
      }
    ],
    "commercialProspectingAllowed": false,
    "links": {
      "self": "https://api.legalone.fr/v1/entreprises/552032534",
      "legalone": "https://www.legalone.fr/entreprise/exemple-sas-552032534",
      "bodacc": "https://api.legalone.fr/v1/entreprises/552032534/bodacc",
      "documents": "https://api.legalone.fr/v1/entreprises/552032534/documents",
      "inpi": "https://data.inpi.fr/entreprises/552032534",
      "officialDirectory": "https://annuaire-entreprises.data.gouv.fr/entreprise/552032534"
    }
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-10-23T04:12:00.000Z",
    "sources": [
      {
        "name": "INSEE Sirene",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.data.gouv.fr/fr/datasets/base-sirene-des-entreprises-et-de-leurs-etablissements-siren-siret/",
        "updatedAt": "2026-10-23T04:12:00.000Z"
      },
      {
        "name": "Base Adresse Nationale",
        "licence": "Licence Ouverte 2.0",
        "url": "https://adresse.data.gouv.fr/",
        "updatedAt": "2026-10-24T01:30:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Données : LegalOne — sources INSEE Sirene, INPI RNE, DILA BODACC, Base Adresse Nationale, mise à jour le 23/10/2026",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite",
    "coverage": {
      "establishments": "complete",
      "capital": "available",
      "officers": "available",
      "prospectingFlag": "unknown"
    }
  },
  "links": {
    "self": "https://api.legalone.fr/v1/entreprises/552032534",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

GET`/v1/entreprises`Clé d'API obligatoire

### Recherche d'entreprises par nom, SIREN ou SIRET

Renvoie la liste des entreprises dont la dénomination correspond à `q`, avec leur SIREN, état, forme juridique, activité et commune du siège. Utilisez-la pour retrouver le SIREN d'une société dont vous connaissez le nom, puis appelez `getCompany`.

**Détails**

Un SIREN ou un SIRET saisi dans `q` déclenche une recherche exacte. Limites : `q` de 2 à 200 caractères, 5 pages au plus, 20 résultats par page. Cette route a son propre quota (20 requêtes par minute pour un compte standard, toutes ses clés ensemble, 60 avec un quota supérieur). Réponse `Cache-Control: private, max-age=600`. Ne sert pas à rechercher des personnes physiques (par nom de dirigeant, par exemple) ni à constituer des listes de prospection.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `q` string · requête | obligatoire | Nom de société, SIREN ou SIRET. 200 caractères au plus |
| `page` integer · requête | facultatif | Numéro de page, de 1 à 5. de 1 à 5 · par défaut `1` |
| `per_page` integer · requête | facultatif | Résultats par page, de 1 à 20. de 1 à 20 · par défaut `20` |

#### Réponses

- 200Page de résultats.
- 304Non modifié : la ressource correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -G \
  -H "Authorization: Bearer lo_votre_cle" \
  --data-urlencode 'q=exemple' \
  https://api.legalone.fr/v1/entreprises
```

Réponse 200

```
{
  "data": [
    {
      "siren": "552032534",
      "name": "Exemple SAS",
      "status": "active",
      "legalFormCode": "5710",
      "activityCode": "62.01Z",
      "postalCode": "75001",
      "city": "Paris",
      "links": {
        "self": "https://api.legalone.fr/v1/entreprises/552032534",
        "legalone": "https://www.legalone.fr/entreprise/exemple-sas-552032534"
      }
    }
  ],
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-10-23T04:12:00.000Z",
    "sources": [
      {
        "name": "INSEE Sirene",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.data.gouv.fr/fr/datasets/base-sirene-des-entreprises-et-de-leurs-etablissements-siren-siret/",
        "updatedAt": "2026-10-23T04:12:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Données : LegalOne — sources INSEE Sirene, INPI RNE, DILA BODACC, mise à jour le 23/10/2026",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite",
    "page": 1,
    "perPage": 20,
    "hasMore": false
  },
  "links": {
    "self": "https://api.legalone.fr/v1/entreprises?q=exemple",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

## Établissements

Lieux d'activité des entreprises (INSEE Sirene).

GET`/v1/etablissements/{siret}`Clé d'API obligatoire

### Fiche d'un établissement à partir de son SIRET

Renvoie un établissement précis : adresse d'activité, état (ouvert ou fermé), code d'activité, dates de création et de fermeture, et un lien vers l'entreprise. Utilisez-la quand vous avez un SIRET (14 chiffres) et que l'adresse ou l'état d'un lieu d'activité compte.

**Détails**

Pour l'entreprise entière, utilisez `getCompany` avec les 9 premiers chiffres. `address.normalized` donne l'adresse normalisée et ses coordonnées (Base Adresse Nationale) quand elle est connue, sinon null. Ne sert pas à trouver des personnes ni leur domicile.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `siret` string · chemin | obligatoire | Numéro SIRET à 14 chiffres. Les espaces et points saisis sont ignorés. format `^\d{14}$` |

#### Réponses

- 200Fiche de l'établissement.
- 304Non modifié : la ressource correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 404Ressource introuvable ou non diffusable (diffusion restreinte, opposition).
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl \
  -H "Authorization: Bearer lo_votre_cle" \
  https://api.legalone.fr/v1/etablissements/55203253400646
```

Réponse 200

```
{
  "data": {
    "siret": "99205213400010",
    "siren": "992052134",
    "name": null,
    "status": "active",
    "isHeadOffice": true,
    "address": {
      "line": "32 RUE DE PARIS",
      "postalCode": "92100",
      "city": "BOULOGNE-BILLANCOURT",
      "countryCode": "FR",
      "normalized": null
    },
    "activityCode": "58.29C",
    "creationDate": "2025-09-11",
    "closureDate": null,
    "links": {
      "self": "https://api.legalone.fr/v1/etablissements/99205213400010",
      "company": "https://api.legalone.fr/v1/entreprises/992052134",
      "legalone": "https://legalone.fr/etablissement/99205213400010"
    }
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2025-10-02T09:01:31.000Z",
    "sources": [
      {
        "name": "INSEE Sirene",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.data.gouv.fr/fr/datasets/base-sirene-des-entreprises-et-de-leurs-etablissements-siren-siret/",
        "updatedAt": "2025-10-02T09:01:31.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Données : LegalOne — sources INSEE Sirene, INPI RNE, DILA BODACC, mise à jour le 02/10/2025",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/etablissements/99205213400010",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

## BODACC

Avis du Bulletin officiel des annonces civiles et commerciales (DILA).

GET`/v1/entreprises/{siren}/bodacc`Clé d'API obligatoire

### Avis du BODACC concernant une entreprise

Renvoie les avis récents du BODACC (annonces civiles et commerciales : immatriculations, modifications, procédures collectives, comptes) qui citent le SIREN, du plus récent au plus ancien. Utilisez-la pour vérifier si une entreprise a fait l'objet d'annonces officielles.

**Détails**

Appelez `getBodaccNotice` pour le contenu d'un avis. Limitée à 20 avis. Ne sert pas à rechercher des personnes ni à évaluer leur situation personnelle ; pour toute décision, vérifiez l'avis original sur bodacc.fr.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `siren` string · chemin | obligatoire | Numéro SIREN à 9 chiffres. Les espaces et points saisis (ex. 552 032 534) sont ignorés. format `^\d{9}$` |
| `limit` integer · requête | facultatif | Nombre maximal d'avis, de 1 à 20. de 1 à 20 · par défaut `20` |

#### Réponses

- 200Avis de l'entreprise (liste éventuellement vide).
- 304Non modifié : la ressource correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 404Ressource introuvable ou non diffusable (diffusion restreinte, opposition).
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl \
  -H "Authorization: Bearer lo_votre_cle" \
  https://api.legalone.fr/v1/entreprises/552032534/bodacc
```

Réponse 200

```
{
  "data": [
    {
      "id": "B202601950001",
      "publicationDate": "2026-10-09",
      "companyName": "Exemple SAS",
      "sirens": [
        "552032534"
      ],
      "family": {
        "code": "modification",
        "label": "Modifications"
      },
      "noticeType": {
        "code": "annonce",
        "label": "Avis initial"
      },
      "department": {
        "code": "75",
        "name": "Paris"
      },
      "city": "Paris",
      "postalCode": "75002",
      "court": "Greffe du tribunal de commerce de Paris",
      "bulletin": "B",
      "noticeNumber": 1,
      "publicationReference": "BODACC B n° 20260195 du 09/10/2026, annonce n° 1",
      "links": {
        "self": "https://api.legalone.fr/v1/bodacc/B202601950001",
        "official": "https://www.bodacc.fr/pages/annonces-commerciales-detail/?q.id=id:B202601950001",
        "legalone": "https://legalone.fr/annonces-legales/avis/B202601950001"
      }
    }
  ],
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-10-09T00:00:00.000Z",
    "sources": [
      {
        "name": "DILA BODACC",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.bodacc.fr/",
        "updatedAt": "2026-10-09T00:00:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Données : LegalOne — sources INSEE Sirene, INPI RNE, DILA BODACC, mise à jour le 09/10/2026",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/entreprises/552032534/bodacc",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

GET`/v1/bodacc/{id}`Clé d'API obligatoire

### Contenu d'un avis du BODACC

Renvoie un avis du BODACC : famille et type d'avis, date de parution, tribunal, localisation, lien vers le PDF officiel et contenu structuré limité aux champs publics. Utilisez-la quand vous avez l'identifiant d'un avis (ex.

**Détails**

A202601950001), obtenu via `listCompanyBodaccNotices`. Ne sert pas à rechercher des personnes. Les identifiants sont insensibles à la casse.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `id` string · chemin | obligatoire | Identifiant de l'avis BODACC : une lettre A, B ou C suivie de 9 à 13 chiffres. format `^[ABC]\d{9,13}$` |

#### Réponses

- 200Avis complet.
- 304Non modifié : la ressource correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 404Ressource introuvable ou non diffusable (diffusion restreinte, opposition).
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl \
  -H "Authorization: Bearer lo_votre_cle" \
  https://api.legalone.fr/v1/bodacc/B202601950001
```

Réponse 200

```
{
  "data": {
    "id": "B202601950001",
    "publicationDate": "2026-10-09",
    "companyName": "Exemple SAS",
    "sirens": [
      "552032534"
    ],
    "family": {
      "code": "modification",
      "label": "Modifications"
    },
    "noticeType": {
      "code": "annonce",
      "label": "Avis initial"
    },
    "department": {
      "code": "75",
      "name": "Paris"
    },
    "city": "Paris",
    "postalCode": "75002",
    "court": "Greffe du tribunal de commerce de Paris",
    "bulletin": "B",
    "noticeNumber": 1,
    "publicationReference": "BODACC B n° 20260195 du 09/10/2026, annonce n° 1",
    "links": {
      "self": "https://api.legalone.fr/v1/bodacc/B202601950001",
      "official": "https://www.bodacc.fr/pages/annonces-commerciales-detail/?q.id=id:B202601950001",
      "legalone": "https://legalone.fr/annonces-legales/avis/B202601950001"
    },
    "pdfUrl": null,
    "sections": [
      {
        "kind": "person",
        "title": "Entreprise et immatriculation",
        "fields": [
          {
            "key": "typePersonne",
            "label": "Type de personne",
            "value": "Personne morale"
          },
          {
            "key": "numeroImmatriculation",
            "label": "N° RCS",
            "value": "552 032 534 RCS Paris"
          }
        ]
      },
      {
        "kind": "modification",
        "title": "Modification",
        "fields": [
          {
            "key": "descriptif",
            "label": "Descriptif",
            "value": "Modification de l'objet social."
          }
        ]
      }
    ]
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-10-09T00:00:00.000Z",
    "sources": [
      {
        "name": "DILA BODACC",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.bodacc.fr/",
        "updatedAt": "2026-10-09T00:00:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Données : LegalOne — sources INSEE Sirene, INPI RNE, DILA BODACC, mise à jour le 09/10/2026",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/bodacc/B202601950001",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

## Documents

Métadonnées des documents déposés au registre national des entreprises (INPI).

GET`/v1/entreprises/{siren}/documents`Clé d'API obligatoire

### Documents déposés au RNE par une entreprise

Renvoie les métadonnées (type, intitulé, date de dépôt, clôture de l'exercice) des actes et comptes annuels déposés au registre national des entreprises par l'entreprise, jusqu'à 50 documents. Utilisez-la pour savoir quels documents existent.

**Détails**

Ne sert pas à télécharger les fichiers : ils se téléchargent sur data.inpi.fr via `links.inpi`.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `siren` string · chemin | obligatoire | Numéro SIREN à 9 chiffres. Les espaces et points saisis (ex. 552 032 534) sont ignorés. format `^\d{9}$` |

#### Réponses

- 200Documents déposés (liste éventuellement vide).
- 304Non modifié : la ressource correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 404Ressource introuvable ou non diffusable (diffusion restreinte, opposition).
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl \
  -H "Authorization: Bearer lo_votre_cle" \
  https://api.legalone.fr/v1/entreprises/552032534/documents
```

Réponse 200

```
{
  "data": [
    {
      "id": "68de475a3ed118998d0b07ae",
      "kind": "act",
      "title": "Copie des statuts",
      "filingDate": "2025-09-30",
      "closingDate": null,
      "links": {
        "inpi": "https://data.inpi.fr/entreprises/992052134"
      }
    },
    {
      "id": "68de475a3ed118998d0b07b1",
      "kind": "act",
      "title": "Attestation de dépôt des fonds",
      "filingDate": "2025-09-30",
      "closingDate": null,
      "links": {
        "inpi": "https://data.inpi.fr/entreprises/992052134"
      }
    }
  ],
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2025-10-02T09:35:22.000Z",
    "sources": [
      {
        "name": "INPI RNE",
        "licence": "Licence INPI de réutilisation du RNE (2024)",
        "url": "https://data.inpi.fr/",
        "updatedAt": "2025-10-02T09:35:22.000Z"
      }
    ],
    "warnings": [
      "Métadonnées seulement : les documents se téléchargent sur data.inpi.fr."
    ],
    "attribution": "Données : LegalOne — sources INSEE Sirene, INPI RNE, DILA BODACC, mise à jour le 02/10/2025",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/entreprises/992052134/documents",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

## Adresses

Autocomplétion, normalisation et géolocalisation d'adresses postales françaises (Base Adresse Nationale).

GET`/v1/adresses`Clé d'API obligatoire

### Recherche et autocomplétion d'adresses postales françaises

Renvoie les adresses de la Base Adresse Nationale (BAN) qui correspondent à `q`, de la plus à la moins pertinente, avec numéro, voie, code postal, commune, code INSEE, coordonnées et score. Utilisez-la pour compléter une saisie au fil de la frappe (par défaut, le dernier mot est traité comme un début de mot : `autocomplete=0` le désactive) ou pour chercher une voie, un lieu-dit ou une commune avec `type`.

**Détails**

Pour vérifier une adresse complète, préférez `normalizeAddress`. Limites : `q` de 3 à 200 caractères, 10 résultats au plus. Adresses de France uniquement. Même clé et mêmes quotas que les autres routes. Réponse mise en cache 24 heures chez le client (`Cache-Control: private, max-age=86400`). Ne sert pas à savoir qui habite ou travaille à une adresse, ni à lister les entreprises d'une adresse. Affichez l'attribution de `meta.attribution`.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `q` string · requête | obligatoire | Adresse ou début d'adresse. 200 caractères au plus |
| `limit` integer · requête | facultatif | Nombre maximal de résultats, de 1 à 10. de 1 à 10 · par défaut `5` |
| `postcode` string · requête | facultatif | Code postal à 5 chiffres : ne garde que les adresses de ce code postal. format `^\d{5}$` |
| `citycode` string · requête | facultatif | Code commune INSEE (5 caractères, 2A ou 2B pour la Corse) : ne garde que les adresses de cette commune. format `^(\d{5}\|2[ABab]\d{3})$` |
| `type` string · requête | facultatif | Ne garder que ce type de résultat : numéro dans une voie, voie, lieu-dit ou commune. Valeurs : `housenumber`, `street`, `locality`, `municipality` |
| `autocomplete` string · requête | facultatif | `0` désactive l'autocomplétion (le dernier mot est alors cherché en entier) ; toute autre valeur, ou l'absence du paramètre, la laisse active. Valeurs : `0`, `1` par défaut `1` |

#### Réponses

- 200Adresses trouvées (liste éventuellement vide).
- 304Non modifié : la réponse correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Adresses momentanément indisponibles : la Base Adresse Nationale ne répond pas (`Retry-After: 30`) ou le service d'adresses est très sollicité (`Retry-After: 5`).

Requête curl

```
curl -G \
  -H "Authorization: Bearer lo_votre_cle" \
  --data-urlencode 'q=8 bd du port amiens' \
  --data-urlencode 'limit=2' \
  https://api.legalone.fr/v1/adresses
```

Réponse 200

```
{
  "data": [
    {
      "id": "80021_6590_00008",
      "label": "8 Boulevard du Port 80000 Amiens",
      "kind": "housenumber",
      "houseNumber": "8",
      "street": "Boulevard du Port",
      "postalCode": "80000",
      "city": "Amiens",
      "cityCode": "80021",
      "context": "80, Somme, Hauts-de-France",
      "latitude": 49.897443,
      "longitude": 2.290084,
      "score": 0.97
    },
    {
      "id": "80021_6590",
      "label": "Boulevard du Port 80000 Amiens",
      "kind": "street",
      "houseNumber": null,
      "street": "Boulevard du Port",
      "postalCode": "80000",
      "city": "Amiens",
      "cityCode": "80021",
      "context": "80, Somme, Hauts-de-France",
      "latitude": 49.89798,
      "longitude": 2.29055,
      "score": 0.82
    }
  ],
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": null,
    "sources": [
      {
        "name": "Base Adresse Nationale",
        "licence": "Licence Ouverte 2.0",
        "url": "https://adresse.data.gouv.fr/",
        "updatedAt": null
      }
    ],
    "warnings": [],
    "attribution": "Adresses : Base Adresse Nationale (BAN), Licence Ouverte 2.0 — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/adresses?q=8+bd+du+port+amiens&limit=2",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

GET`/v1/adresses/normaliser`Clé d'API obligatoire

### Normalisation d'une adresse postale française

Renvoie la meilleure correspondance de la Base Adresse Nationale (BAN) pour une adresse complète, avec un statut : `matched` (correspondance fiable, score d'au moins 0.5), `low_confidence` (des candidats, aucun fiable : `address` est null et les candidats sont dans `alternatives`) ou `not_found`. Utilisez-la pour corriger, compléter, uniformiser ou géolocaliser une adresse saisie librement ou issue d'un fichier.

**Détails**

Fournissez soit `q` (adresse sur une ligne), soit `line` avec `postcode` et `city` ; `citycode` lève une ambiguïté de commune. Pour une saisie en cours de frappe, utilisez `searchAddresses`. Au plus 3 candidats sont examinés. Adresses de France uniquement. Même clé et mêmes quotas que les autres routes, réponse mise en cache 24 heures chez le client (`Cache-Control: private, max-age=86400`). Ne sert pas à savoir qui habite ou travaille à une adresse. Un statut `matched` n'est pas une preuve d'existence légale : vérifiez toute décision sur la source officielle. Affichez l'attribution de `meta.attribution`.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `q` string · requête | facultatif | Adresse complète sur une ligne, de 3 à 200 caractères. Obligatoire si `line`, `postcode` et `city` sont absents. 200 caractères au plus |
| `line` string · requête | facultatif | Numéro, voie et complément d'adresse, à la place de `q`. 200 caractères au plus |
| `postcode` string · requête | facultatif | Code postal à 5 chiffres. Avec `line`, il s'ajoute à l'adresse cherchée ; il limite aussi les résultats à ce code postal. format `^\d{5}$` |
| `city` string · requête | facultatif | Commune, avec `line`. 200 caractères au plus |
| `citycode` string · requête | facultatif | Code commune INSEE (5 caractères, 2A ou 2B pour la Corse) : ne garde que les adresses de cette commune. format `^(\d{5}\|2[ABab]\d{3})$` |

#### Réponses

- 200Résultat de la normalisation.
- 304Non modifié : la réponse correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Adresses momentanément indisponibles : la Base Adresse Nationale ne répond pas (`Retry-After: 30`) ou le service d'adresses est très sollicité (`Retry-After: 5`).

Requête curl

```
curl -G \
  -H "Authorization: Bearer lo_votre_cle" \
  --data-urlencode 'q=8 bd du port 80000 amiens' \
  https://api.legalone.fr/v1/adresses/normaliser
```

Réponse 200

```
{
  "data": {
    "status": "matched",
    "address": {
      "id": "80021_6590_00008",
      "label": "8 Boulevard du Port 80000 Amiens",
      "kind": "housenumber",
      "houseNumber": "8",
      "street": "Boulevard du Port",
      "postalCode": "80000",
      "city": "Amiens",
      "cityCode": "80021",
      "context": "80, Somme, Hauts-de-France",
      "latitude": 49.897443,
      "longitude": 2.290084,
      "score": 0.97
    },
    "alternatives": []
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": null,
    "sources": [
      {
        "name": "Base Adresse Nationale",
        "licence": "Licence Ouverte 2.0",
        "url": "https://adresse.data.gouv.fr/",
        "updatedAt": null
      }
    ],
    "warnings": [],
    "attribution": "Adresses : Base Adresse Nationale (BAN), Licence Ouverte 2.0 — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/adresses/normaliser?q=8+bd+du+port+80000+amiens",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

GET`/v1/adresses/inverse`Clé d'API obligatoire

### Adresses les plus proches d'un point géographique

Renvoie les adresses de la Base Adresse Nationale (BAN) les plus proches d'un point donné par sa latitude et sa longitude, de la plus proche à la plus éloignée. Utilisez-la pour retrouver une adresse postale à partir de coordonnées (géocodage inverse). 10 résultats au plus, 1 par défaut.

**Détails**

Points en France uniquement. Même clé et mêmes quotas que les autres routes, réponse mise en cache 24 heures chez le client (`Cache-Control: private, max-age=86400`). Ne sert pas à localiser une personne ni à savoir qui habite ou travaille à un endroit. Affichez l'attribution de `meta.attribution`.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `lat` number · requête | obligatoire | Latitude en degrés décimaux, entre -90 et 90. de -90 à 90 |
| `lon` number · requête | obligatoire | Longitude en degrés décimaux, entre -180 et 180. de -180 à 180 |
| `limit` integer · requête | facultatif | Nombre maximal d'adresses, de 1 à 10. de 1 à 10 · par défaut `1` |

#### Réponses

- 200Adresses proches du point (liste éventuellement vide).
- 304Non modifié : la réponse correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Adresses momentanément indisponibles : la Base Adresse Nationale ne répond pas (`Retry-After: 30`) ou le service d'adresses est très sollicité (`Retry-After: 5`).

Requête curl

```
curl -G \
  -H "Authorization: Bearer lo_votre_cle" \
  --data-urlencode 'lat=49.897443' \
  --data-urlencode 'lon=2.290084' \
  https://api.legalone.fr/v1/adresses/inverse
```

Réponse 200

```
{
  "data": [
    {
      "id": "80021_6590_00008",
      "label": "8 Boulevard du Port 80000 Amiens",
      "kind": "housenumber",
      "houseNumber": "8",
      "street": "Boulevard du Port",
      "postalCode": "80000",
      "city": "Amiens",
      "cityCode": "80021",
      "context": "80, Somme, Hauts-de-France",
      "latitude": 49.897442,
      "longitude": 2.290084,
      "score": 1
    }
  ],
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": null,
    "sources": [
      {
        "name": "Base Adresse Nationale",
        "licence": "Licence Ouverte 2.0",
        "url": "https://adresse.data.gouv.fr/",
        "updatedAt": null
      }
    ],
    "warnings": [],
    "attribution": "Adresses : Base Adresse Nationale (BAN), Licence Ouverte 2.0 — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/adresses/inverse?lat=49.897443&lon=2.290084",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

## Annonces légales

Annonces légales : prix réglementé, annonces exigées par un événement, démarches suivantes, brouillon sur legalone.fr (relu et payé sur le site).

GET`/v1/annonces/prix`Clé d'API obligatoire

### Prix réglementé d'une annonce légale

Renvoie le prix HT, la TVA et le prix TTC d'une annonce légale pour une formalité et un département, selon le barème fixé par arrêté (le même dans tous les journaux habilités du département ; La Réunion et Mayotte ont leurs propres forfaits). Les annonces au caractère (vente de fonds, location-gérance, modifications multiples…) ont besoin de leur texte (`text`, ou `POST` pour un texte long) ; sans texte, la réponse donne le prix du caractère.

**Détails**

Ne sert ni à payer ni à commander : la publication et le paiement se font sur legalone.fr.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `formality` string · requête | obligatoire | Formalité (identifiant du formulaire LegalOne). Valeurs : `eurl`, `sarl`, `sasu`, `sas`, `sa`, `snc`, `sc`, `sci`, `sccv`, `scm`, `scpi`, `scp` … |
| `department` string · requête | obligatoire | Département de publication (75, 2A, 974…). 3 caractères au plus |
| `text` string · requête | facultatif | Texte court d'une annonce au caractère. Préférez `POST /v1/annonces/prix` : un texte d'annonce (noms, adresses) n'a pas sa place dans une URL, que les journaux de serveurs conservent. 10000 caractères au plus |

#### Réponses

- 200Prix réglementé.
- 304Non modifié : la réponse correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -G \
  -H "Authorization: Bearer lo_votre_cle" \
  --data-urlencode 'formality=transfert-siege-dans-departement' \
  --data-urlencode 'department=75' \
  https://api.legalone.fr/v1/annonces/prix
```

Réponse 200

```
{
  "data": {
    "formality": "transfert-siege-dans-departement",
    "label": "Transfert de siège social dans le département",
    "category": "Modifications",
    "pricing": "flat",
    "department": "75",
    "annex": "V",
    "currency": "EUR",
    "vatRate": 0.2,
    "schedule": {
      "version": "2026-01-01",
      "year": 2026,
      "label": "Arrêté du 19 novembre 2021 modifié (tarifs 2026 des annonces légales)",
      "url": "https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000053177549"
    },
    "amountExclTax": 109,
    "vat": 21.8,
    "amountInclTax": 130.8,
    "characterCount": null,
    "ratePerCharacter": null,
    "notes": [
      "Tarif réglementé par arrêté : le même prix dans tous les journaux habilités du département, sans frais ajoutés par LegalOne."
    ],
    "reviewNotice": "Préparé à partir de vos réponses : relisez l'annonce sur legalone.fr et corrigez-la si besoin avant de payer. Les informations sur les règles et les démarches sont indicatives ; en cas de doute, demandez conseil à un professionnel du droit."
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-01-01T00:00:00.000Z",
    "sources": [
      {
        "name": "Légifrance",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.legifrance.gouv.fr/",
        "updatedAt": "2026-01-01T00:00:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Tarifs et règles : textes officiels (Légifrance, service-public.gouv.fr) — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/annonces/prix?formality=transfert-siege-dans-departement&department=75",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

POST`/v1/annonces/prix`Clé d'API obligatoire

### Prix réglementé d'une annonce au caractère (texte long)

Même réponse que `GET /v1/annonces/prix`, pour un texte trop long pour une URL. Le texte est compté comme sur legalone.fr (caractères et espaces), 10000 caractères au plus.

**Détails**

Ne publie rien et n'enregistre pas le texte.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `formality` string · corps JSON | obligatoire | Formalité. Valeurs : `eurl`, `sarl`, `sasu`, `sas`, `sa`, `snc`, `sc`, `sci`, `sccv`, `scm`, `scpi`, `scp` … |
| `department` string · corps JSON | obligatoire | Département de publication. 3 caractères au plus |
| `text` string · corps JSON | facultatif | Texte de l'annonce. 10000 caractères au plus |

#### Réponses

- 200Prix réglementé.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -X POST \
  -H "Authorization: Bearer lo_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{"formality":"location-gerance","department":"75","text":"Suivant acte sous seing privé…"}' \
  https://api.legalone.fr/v1/annonces/prix
```

Réponse 200

```
{
  "data": {
    "formality": "location-gerance",
    "label": "Location-gérance",
    "category": "Fonds de commerce",
    "pricing": "character",
    "department": "75",
    "annex": "V",
    "currency": "EUR",
    "vatRate": 0.2,
    "schedule": {
      "version": "2026-01-01",
      "year": 2026,
      "label": "Arrêté du 19 novembre 2021 modifié (tarifs 2026 des annonces légales)",
      "url": "https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000053177549"
    },
    "amountExclTax": 7.17,
    "vat": 1.43,
    "amountInclTax": 8.6,
    "characterCount": 30,
    "ratePerCharacter": 0.239,
    "notes": [
      "Tarif réglementé par arrêté : le même prix dans tous les journaux habilités du département, sans frais ajoutés par LegalOne."
    ],
    "reviewNotice": "Préparé à partir de vos réponses : relisez l'annonce sur legalone.fr et corrigez-la si besoin avant de payer. Les informations sur les règles et les démarches sont indicatives ; en cas de doute, demandez conseil à un professionnel du droit."
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-01-01T00:00:00.000Z",
    "sources": [
      {
        "name": "Légifrance",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.legifrance.gouv.fr/",
        "updatedAt": "2026-01-01T00:00:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Tarifs et règles : textes officiels (Légifrance, service-public.gouv.fr) — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/annonces/prix",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

GET`/v1/annonces/quelle-annonce`Clé d'API obligatoire

### Annonces légales qu'exige un événement de la vie d'une société

À partir d'un ou plusieurs événements décidés ensemble (création, transfert de siège, changement de dirigeant, de dénomination, d'objet, de capital, de forme, de durée, dissolution, clôture de liquidation, vente de fonds…), indique les annonces obligatoires, leur nombre, leur département, leur délai, leur base légale et leur prix. La réponse vient d'une table de règles fixe ; quand il manque une information (greffe d'un département qui en compte plusieurs), elle renvoie une `question` au lieu de deviner.

**Détails**

Ne remplace pas un conseil juridique sur l'opportunité de la décision.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `situations` string · requête | obligatoire | Événements séparés par des virgules (5 au plus). |
| `legal_form` string · requête | facultatif | Forme actuelle (obligatoire pour une création ou une transformation). Valeurs : `sas`, `sasu`, `sarl`, `eurl`, `sa`, `snc`, `sci`, `sc`, `sccv`, `scm`, `scp`, `scpi` … |
| `new_legal_form` string · requête | facultatif | Forme après une transformation. Valeurs : `sas`, `sasu`, `sarl`, `eurl`, `sa`, `snc`, `sci`, `sc`, `sccv`, `scm`, `scp`, `scpi` … |
| `department` string · requête | facultatif | Département du siège (avant un transfert). 3 caractères au plus |
| `new_department` string · requête | facultatif | Département du nouveau siège. 3 caractères au plus |
| `same_commercial_court` string · requête | facultatif | Transfert dans un département à plusieurs greffes : le nouveau siège dépend-il du même greffe ? Valeurs : `true`, `false` |
| `sole_shareholder_is_company` string · requête | facultatif | Dissolution sans liquidation : l'associé unique est-il une société ? Valeurs : `true`, `false` |

#### Réponses

- 200Annonces à publier, ou question à poser.
- 304Non modifié : la réponse correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -G \
  -H "Authorization: Bearer lo_votre_cle" \
  --data-urlencode 'situations=seat_transfer,officer_change' \
  --data-urlencode 'legal_form=sas' \
  --data-urlencode 'department=75' \
  --data-urlencode 'new_department=92' \
  https://api.legalone.fr/v1/annonces/quelle-annonce
```

Réponse 200

```
{
  "data": {
    "noticeCount": 3,
    "notices": [
      {
        "situation": "seat_transfer",
        "formality": "transfert-siege-hors-departement-depart",
        "title": "Avis de départ (ancien siège)",
        "department": "75",
        "when": "Dans le mois de la décision, avant la déclaration au guichet unique.",
        "legalBasis": [
          {
            "label": "Article R210-9 du code de commerce",
            "url": "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006260074"
          },
          {
            "label": "Transfert du siège social (service-public F31479)",
            "url": "https://entreprendre.service-public.gouv.fr/vosdroits/F31479"
          }
        ],
        "price": {
          "formality": "transfert-siege-hors-departement-depart",
          "label": "Transfert de siège social hors département (départ)",
          "category": "Modifications",
          "pricing": "flat",
          "department": "75",
          "annex": "V",
          "currency": "EUR",
          "vatRate": 0.2,
          "schedule": {
            "version": "2026-01-01",
            "year": 2026,
            "label": "Arrêté du 19 novembre 2021 modifié (tarifs 2026 des annonces légales)",
            "url": "https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000053177549"
          },
          "amountExclTax": 109,
          "vat": 21.8,
          "amountInclTax": 130.8,
          "characterCount": null,
          "ratePerCharacter": null
        },
        "formUrl": "https://legalone.fr/annonces-legales/nouveau/transfert-siege-hors-departement-depart#departement=75",
        "canPrepare": true
      },
      {
        "situation": "seat_transfer",
        "formality": "transfert-siege-hors-departement-arrivee",
        "title": "Avis d'arrivée (nouveau siège)",
        "department": "92",
        "when": "Dans le mois de la décision, avant la déclaration au guichet unique.",
        "legalBasis": [
          {
            "label": "Article R210-11 du code de commerce",
            "url": "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000041564084"
          }
        ],
        "price": {
          "formality": "transfert-siege-hors-departement-arrivee",
          "label": "Transfert de siège social hors département (arrivée)",
          "category": "Modifications",
          "pricing": "flat",
          "department": "92",
          "annex": "V",
          "currency": "EUR",
          "vatRate": 0.2,
          "schedule": {
            "version": "2026-01-01",
            "year": 2026,
            "label": "Arrêté du 19 novembre 2021 modifié (tarifs 2026 des annonces légales)",
            "url": "https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000053177549"
          },
          "amountExclTax": 109,
          "vat": 21.8,
          "amountInclTax": 130.8,
          "characterCount": null,
          "ratePerCharacter": null
        },
        "formUrl": "https://legalone.fr/annonces-legales/nouveau/transfert-siege-hors-departement-arrivee#departement=92",
        "canPrepare": true
      }
    ],
    "combinedOption": null,
    "question": null,
    "notes": [
      "Transfert hors du ressort du greffe : un avis dans le département de l'ancien siège et un dans celui du nouveau, comme l'exige la fiche officielle service-public F31479 et la pratique des greffes ; le code de commerce (R210-11, avec R210-9 et R210-3) n'impose expressément que l'avis du nouveau siège. Chaque avis a son forfait. La déclaration se fait ensuite au greffe du nouveau siège.",
      "Chaque avis paraît dans un journal habilité du département indiqué ; le greffe publie ensuite au BODACC après la déclaration au guichet unique (sauf vente de fonds : l'acquéreur le demande)."
    ],
    "reviewNotice": "Préparé à partir de vos réponses : relisez l'annonce sur legalone.fr et corrigez-la si besoin avant de payer. Les informations sur les règles et les démarches sont indicatives ; en cas de doute, demandez conseil à un professionnel du droit."
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-01-01T00:00:00.000Z",
    "sources": [
      {
        "name": "Légifrance",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.legifrance.gouv.fr/",
        "updatedAt": "2026-01-01T00:00:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Tarifs et règles : textes officiels (Légifrance, service-public.gouv.fr) — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/annonces/quelle-annonce?situations=seat_transfer%2Cofficer_change&legal_form=sas&department=75&new_department=92",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

GET`/v1/annonces/etapes`Clé d'API obligatoire

### Démarches après une annonce légale

Pour une formalité, renvoie les étapes après la publication (déclaration au guichet unique de l'INPI, délais, publication au BODACC par le greffe) et les pièces à préparer. Texte fixe, rédigé à partir des fiches service-public.gouv.fr ; indicatif : le guichet unique affiche la liste exacte des pièces au moment du dépôt.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `formality` string · requête | obligatoire | Formalité. Valeurs : `transfert-siege-dans-departement`, `transfert-siege-hors-departement-depart`, `transfert-siege-hors-departement-arrivee`, `changement-gerant-president-nomination`, `changement-denomination`, `modification-objet-social`, `modification-capital`, `prorogation-duree`, `poursuite-activite-malgre-pertes`, `dissolution-anticipee`, `cloture-liquidation`, `dissolution-sans-liquidation-tup` … |

#### Réponses

- 200Étapes et pièces.
- 304Non modifié : la réponse correspond à l'ETag envoyé dans `If-None-Match`.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -G \
  -H "Authorization: Bearer lo_votre_cle" \
  --data-urlencode 'formality=transfert-siege-dans-departement' \
  https://api.legalone.fr/v1/annonces/etapes
```

Réponse 200

```
{
  "data": {
    "formality": "transfert-siege-dans-departement",
    "title": "Transfert de siège dans le ressort du même greffe",
    "deadline": "Annonce puis déclaration dans le mois de la décision.",
    "steps": [
      {
        "title": "Relire et payer l'annonce sur legalone.fr",
        "text": "Vous relisez le formulaire, choisissez le journal habilité, puis payez sur legalone.fr ; l'attestation de parution est disponible dans votre espace client après la parution, dès que le journal la délivre."
      },
      {
        "title": "Déclarer la formalité au guichet unique",
        "text": "Dans le mois, déposez sur le guichet unique la déclaration de modification avec les pièces ci-dessous et l'attestation de parution."
      }
    ],
    "documents": [
      "procès-verbal de la décision de transfert (copie certifiée conforme)",
      "statuts mis à jour, datés et certifiés conformes"
    ],
    "bodacc": "Rien à faire : le greffe publie l'avis au BODACC après l'inscription de la formalité.",
    "legalBasis": [
      {
        "label": "Article R210-9 du code de commerce",
        "url": "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006260074"
      },
      {
        "label": "Article R123-66 du code de commerce",
        "url": "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000043292382"
      }
    ],
    "onlineFiling": {
      "label": "Guichet unique des formalités d'entreprises (INPI)",
      "url": "https://formalites.entreprises.gouv.fr"
    },
    "reviewNotice": "Préparé à partir de vos réponses : relisez l'annonce sur legalone.fr et corrigez-la si besoin avant de payer. Les informations sur les règles et les démarches sont indicatives ; en cas de doute, demandez conseil à un professionnel du droit."
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-01-01T00:00:00.000Z",
    "sources": [
      {
        "name": "Légifrance",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.legifrance.gouv.fr/",
        "updatedAt": "2026-01-01T00:00:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Tarifs et règles : textes officiels (Légifrance, service-public.gouv.fr) — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/annonces/etapes?formality=transfert-siege-dans-departement",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

POST`/v1/annonces/brouillons`Clé d'API obligatoire

### Préparer une annonce légale sur legalone.fr

Crée un brouillon sur legalone.fr, pour une modification à partir du SIREN de la société et des faits de la décision, ou pour une création (SAS, SASU, SARL, EURL, SCI…) à partir des statuts, sans SIREN, et renvoie le texte de l'annonce, ce qui reste à compléter et un lien (valable 7 jours) qui ouvre le formulaire pré-rempli. `missing` liste tout ce que le formulaire exige encore : le brouillon n'est complet que si la liste est vide.

**Détails**

`meta.warnings` signale une date d'effet antérieure à la décision, une décision datée dans le futur et, pour une modification, rappelle de vérifier dans les statuts que l'organe était compétent. Chaque appel crée un nouveau brouillon : réunissez tous les faits avant l'appel ; pour ajouter ou corriger un fait ensuite, utilisez `PATCH /v1/annonces/brouillons/{id}` avec le `draftId` et le `editToken` renvoyés, plutôt que de rappeler cette route. L'utilisateur relit, complète et paie sur legalone.fr ; rien n'est publié ni payé par l'API. Ne pas envoyer de date de naissance, de nationalité ni de coordonnées ; une adresse personnelle seulement pour les dirigeants d'une société en création. Quota propre : 10 brouillons par minute et 500 par jour et par compte développeur. Route active seulement quand le service est ouvert (sinon 404).

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `formality` string · corps JSON | obligatoire | Formalité : modification d'une société existante, ou création (sas, sasu, sarl, eurl, sci…). Valeurs : `transfert-siege-dans-departement`, `transfert-siege-hors-departement-depart`, `transfert-siege-hors-departement-arrivee`, `changement-gerant-president-nomination`, `changement-denomination`, `modification-objet-social`, `modification-capital`, `prorogation-duree`, `dissolution-anticipee`, `cloture-liquidation`, `eurl`, `sarl` … |
| `siren` string · corps JSON | facultatif | SIREN de la société existante (9 chiffres, espaces acceptés). Obligatoire pour une modification ; absent pour une création. 15 caractères au plus |
| `department` string · corps JSON | facultatif | Département de publication, utilisé seulement si le siège ne permet pas de le déduire. 3 caractères au plus |
| `decisionBody` string · corps JSON | facultatif | Body that took the decision: a general meeting; the partners or shareholders deciding collectively (meeting not specified or written consultation) or unanimously (act signed by all); the sole partner; the manager or the management (several managers); the president or the managing director (SAS, SA); the board of directors, the management board (directoire) or the supervisory board (SA, SCA). other: any other body, named in decisionBodyOther. Valeurs : `ordinary_general_meeting`, `extraordinary_general_meeting`, `combined_general_meeting`, `shareholders_collective_decision`, `shareholders_unanimous_decision`, `sole_shareholder`, `manager`, `management`, `president`, `chief_executive`, `board_of_directors`, `management_board` … |
| `decisionBodyOther` string · corps JSON | facultatif | Only when decisionBody is other (sent alone, it implies other): the body as the notice prints it after « Par décision », in French, starting with du, de la, de l' or des, e.g. « du comité de direction ». 200 caractères au plus |
| `decisionDate` string · corps JSON | facultatif | Date of the meeting or decision (YYYY-MM-DD). |
| `effectiveDate` string · corps JSON | facultatif | Date the decision takes effect (YYYY-MM-DD). |
| `companyDurationYears` integer · corps JSON | facultatif | Company duration in years, as in the articles of association. Required for a creation, an extension of duration and a transfer to another registry (the notice prints it), otherwise optional: send it whenever the user knows it; when required and absent, it comes back in missing. de 1 à 99 |
| `newSeatStreet` string · corps JSON | facultatif | New registered office: number and street. 200 caractères au plus |
| `newSeatComplement` string · corps JSON | facultatif | New registered office: building, floor (optional). 200 caractères au plus |
| `newSeatPostalCode` string · corps JSON | facultatif | New registered office: 5-digit postcode. format `^\d{5}$` |
| `newSeatCity` string · corps JSON | facultatif | New registered office: city. 100 caractères au plus |
| `newSeatCourt` string · corps JSON | facultatif | Commercial court (greffe) of the new registered office, e.g. Nanterre; deduced when the department has one court. 100 caractères au plus |
| `representativeRole` string · corps JSON | facultatif | Role of the legal representative named in the arrival notice. Valeurs : `manager`, `president` |
| `representativeCivility` string · corps JSON | facultatif | representativeCivility Valeurs : `mr`, `mrs` |
| `representativeLastName` string · corps JSON | facultatif | representativeLastName 100 caractères au plus |
| `representativeFirstName` string · corps JSON | facultatif | representativeFirstName 100 caractères au plus |
| `officerChange` string · corps JSON | facultatif | appointment: a new officer without departure; replacement: one leaves, one arrives; departure: one leaves without replacement. Valeurs : `appointment`, `replacement`, `departure` |
| `officerRole` string · corps JSON | facultatif | officerRole Valeurs : `manager`, `president`, `chief_executive` |
| `departureCause` string · corps JSON | facultatif | departureCause Valeurs : `resignation`, `dismissal`, `death`, `end_of_term` |
| `departingCivility` string · corps JSON | facultatif | departingCivility Valeurs : `mr`, `mrs` |
| `departingLastName` string · corps JSON | facultatif | departingLastName 100 caractères au plus |
| `departingFirstName` string · corps JSON | facultatif | departingFirstName 100 caractères au plus |
| `incomingCivility` string · corps JSON | facultatif | incomingCivility Valeurs : `mr`, `mrs` |
| `incomingLastName` string · corps JSON | facultatif | incomingLastName 100 caractères au plus |
| `incomingFirstName` string · corps JSON | facultatif | incomingFirstName 100 caractères au plus |
| `newName` string · corps JSON | facultatif | New company name. 200 caractères au plus |
| `newAcronym` string · corps JSON | facultatif | New acronym (optional). 50 caractères au plus |
| `purposeChange` string · corps JSON | facultatif | purposeChange Valeurs : `extension`, `replacement`, `removal` |
| `newPurpose` string · corps JSON | facultatif | Corporate purpose as written in the decision. 2000 caractères au plus |
| `capitalChange` string · corps JSON | facultatif | capitalChange Valeurs : `increase`, `decrease` |
| `newCapital` number · corps JSON | facultatif | Share capital after the operation, in euros. |
| `contributionNature` string · corps JSON | facultatif | contributionNature Valeurs : `cash`, `shareholder_current_account`, `reserves`, `real_estate`, `business`, `securities` |
| `newDurationYears` integer · corps JSON | facultatif | New company duration in years. de 1 à 99 |
| `liquidatorCivility` string · corps JSON | facultatif | liquidatorCivility Valeurs : `mr`, `mrs` |
| `liquidatorLastName` string · corps JSON | facultatif | liquidatorLastName 100 caractères au plus |
| `liquidatorFirstName` string · corps JSON | facultatif | liquidatorFirstName 100 caractères au plus |
| `liquidationSeat` string · corps JSON | facultatif | Where the liquidation is based. Valeurs : `registered_office`, `liquidator`, `other` |
| `deedType` string · corps JSON | facultatif | Creation: form of the articles of association. Valeurs : `private_deed`, `notarial_deed` |
| `deedDate` string · corps JSON | facultatif | Creation: date the articles of association were signed (YYYY-MM-DD). |
| `notaryName` string · corps JSON | facultatif | Creation by notarial deed: name of the notary. 100 caractères au plus |
| `notaryCity` string · corps JSON | facultatif | Creation by notarial deed: city where the notary practises. 100 caractères au plus |
| `companyName` string · corps JSON | facultatif | Creation: name of the company, as in the articles. 200 caractères au plus |
| `acronym` string · corps JSON | facultatif | Creation: acronym (optional). 50 caractères au plus |
| `tradeName` string · corps JSON | facultatif | Creation: trade name (optional). 200 caractères au plus |
| `purpose` string · corps JSON | facultatif | Creation: corporate purpose, as written in the articles. 2000 caractères au plus |
| `profession` string · corps JSON | facultatif | Creation of a société d'exercice libéral (seleurl, selarl, selas, selasu, selafa), optional: profession practised, as in the articles, e.g. avocat. The notice prints it when given. 200 caractères au plus |
| `capital` number · corps JSON | facultatif | Creation: share capital in euros (fixed capital). |
| `initialCapital` number · corps JSON | facultatif | Creation with a variable capital: initial capital in euros. |
| `minimumCapital` number · corps JSON | facultatif | Creation with a variable capital: minimum capital in euros. |
| `maximumCapital` number · corps JSON | facultatif | Creation with a variable capital: maximum capital in euros. |
| `seatStreet` string · corps JSON | facultatif | Creation: registered office, number and street. 200 caractères au plus |
| `seatComplement` string · corps JSON | facultatif | Creation: registered office, building or floor (optional). 200 caractères au plus |
| `seatPostalCode` string · corps JSON | facultatif | Creation: registered office, 5-digit postcode. format `^\d{5}$` |
| `seatCity` string · corps JSON | facultatif | Creation: registered office, city. 100 caractères au plus |
| `seatCourt` string · corps JSON | facultatif | Creation: commercial court (greffe) of registration, e.g. Bobigny; deduced when the department has one court. 100 caractères au plus |
| `shareTransferClause` string · corps JSON | facultatif | Creation of a share company (SAS, SA…): clause on the transfer of shares, as in the articles. 2000 caractères au plus |
| `meetingAdmissionClause` string · corps JSON | facultatif | Creation of a share company (SAS, SA…): clause on admission to meetings and voting rights, as in the articles. 2000 caractères au plus |
| `officers` object\[\] · corps JSON | facultatif | Création seulement : dirigeants et commissaires aux comptes que l'avis nomme, avec le domicile d'une personne physique tel que l'avis le publie. Rôles par formalité : eurl/sarl/sc/sci/sccv/scm/scpi/scp/seleurl/selarl: manager; sasu: president, chief_executive, deputy_chief_executive, other_chief_executive, auditor, substitute_auditor; sas: president, chief_executive, deputy_chief_executive, director, other_chief_executive, auditor, substitute_auditor; snc: manager, partner, co_manager, auditor, substitute_auditor; sa: president, chief_executive, deputy_chief_executive, director, management_board_member, auditor, substitute_auditor; selas/selasu: president, chief_executive, deputy_chief_executive, auditor, substitute_auditor; selafa: president, chief_executive, deputy_chief_executive, director, auditor, substitute_auditor. 20 valeurs au plus |

#### Réponses

- 201Brouillon créé sur legalone.fr.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 404Ressource introuvable ou non diffusable (diffusion restreinte, opposition).
- 422Refusé par legalone.fr (SIREN inconnu, valeur hors des choix du formulaire, formalité incohérente avec les greffes).
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -X POST \
  -H "Authorization: Bearer lo_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{"formality":"transfert-siege-dans-departement","siren":"552032534","decisionBody":"sole_shareholder","decisionDate":"2026-10-20","newSeatStreet":"12 avenue de l'\''Opéra","newSeatPostalCode":"75001","newSeatCity":"Paris"}' \
  https://api.legalone.fr/v1/annonces/brouillons
```

Réponse 201

```
{
  "data": {
    "formality": "transfert-siege-dans-departement",
    "companyName": "Exemple SAS",
    "department": "75",
    "preview": "Exemple SAS\n\nSociété par actions simplifiée au capital de [capital]\n\nSiège : 8 RUE DE LA PAIX 75002 PARIS\n\n552032534 RCS de Paris\n\nPar décision de l'associé unique du 20-10-2026, il a été décidé de transférer le siège social à compter du 20-10-2026 au 12 avenue de l'Opéra 75001 Paris. Mention au RCS de Paris",
    "missing": [
      "Société : capital"
    ],
    "url": "https://legalone.fr/annonces-legales/brouillon#t=Zx1vQe8LkP3mN6sT9wYbC2dF5gH7jK0aR4uV8xA1BcE",
    "expiresAt": "2026-11-05T13:17:35.409Z",
    "draftId": "ckmcpdraft000000000000001",
    "editToken": "Qm9uam91ci1jZWNpLWVzdC11bi1leGVtcGxlLWRlLWp",
    "price": {
      "formality": "transfert-siege-dans-departement",
      "label": "Transfert de siège social dans le département",
      "category": "Modifications",
      "pricing": "flat",
      "department": "75",
      "annex": "V",
      "currency": "EUR",
      "vatRate": 0.2,
      "schedule": {
        "version": "2026-01-01",
        "year": 2026,
        "label": "Arrêté du 19 novembre 2021 modifié (tarifs 2026 des annonces légales)",
        "url": "https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000053177549"
      },
      "amountExclTax": 109,
      "vat": 21.8,
      "amountInclTax": 130.8,
      "characterCount": null,
      "ratePerCharacter": null
    },
    "reviewNotice": "Préparé à partir de vos réponses : relisez l'annonce sur legalone.fr et corrigez-la si besoin avant de payer. Les informations sur les règles et les démarches sont indicatives ; en cas de doute, demandez conseil à un professionnel du droit."
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-01-01T00:00:00.000Z",
    "sources": [
      {
        "name": "Légifrance",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.legifrance.gouv.fr/",
        "updatedAt": "2026-01-01T00:00:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Tarifs et règles : textes officiels (Légifrance, service-public.gouv.fr) — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/annonces/brouillons",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

PATCH`/v1/annonces/brouillons/{id}`Clé d'API obligatoire

### Modifier un brouillon d'annonce préparé par l'API

Modifie un brouillon créé par `POST /v1/annonces/brouillons`, au lieu d'en créer un autre : ajouter un fait oublié (la durée de la société), corriger une date ou un nom. Envoyez le `editToken` reçu à la création, la formalité et seulement les champs à changer ; les autres restent.

**Détails**

Seul le client qui a reçu le jeton peut modifier le brouillon, et seulement tant que l'utilisateur ne l'a pas enregistré sur legalone.fr (409 ensuite) ni laissé expirer (410). Le brouillon reste un brouillon anonyme, sans paiement ; le lien donné à la création l'ouvre toujours. Même quota que la création.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `id` string · chemin | obligatoire | `draftId` renvoyé à la création. format `^[a-z0-9]{20,40}$` |
| `editToken` string · corps JSON | obligatoire | Jeton de modification renvoyé à la création du brouillon (`editToken`). format `^[A-Za-z0-9_-]{43}$` |
| `formality` string · corps JSON | obligatoire | Formalité du brouillon, comme à la création (elle ne change pas). Valeurs : `transfert-siege-dans-departement`, `transfert-siege-hors-departement-depart`, `transfert-siege-hors-departement-arrivee`, `changement-gerant-president-nomination`, `changement-denomination`, `modification-objet-social`, `modification-capital`, `prorogation-duree`, `dissolution-anticipee`, `cloture-liquidation`, `eurl`, `sarl` … |
| `department` string · corps JSON | facultatif | Département de publication, utilisé seulement si le siège ne permet pas de le déduire. 3 caractères au plus |
| `decisionBody` string · corps JSON | facultatif | Body that took the decision: a general meeting; the partners or shareholders deciding collectively (meeting not specified or written consultation) or unanimously (act signed by all); the sole partner; the manager or the management (several managers); the president or the managing director (SAS, SA); the board of directors, the management board (directoire) or the supervisory board (SA, SCA). other: any other body, named in decisionBodyOther. Valeurs : `ordinary_general_meeting`, `extraordinary_general_meeting`, `combined_general_meeting`, `shareholders_collective_decision`, `shareholders_unanimous_decision`, `sole_shareholder`, `manager`, `management`, `president`, `chief_executive`, `board_of_directors`, `management_board` … |
| `decisionBodyOther` string · corps JSON | facultatif | Only when decisionBody is other (sent alone, it implies other): the body as the notice prints it after « Par décision », in French, starting with du, de la, de l' or des, e.g. « du comité de direction ». 200 caractères au plus |
| `decisionDate` string · corps JSON | facultatif | Date of the meeting or decision (YYYY-MM-DD). |
| `effectiveDate` string · corps JSON | facultatif | Date the decision takes effect (YYYY-MM-DD). |
| `companyDurationYears` integer · corps JSON | facultatif | Company duration in years, as in the articles of association. Required for a creation, an extension of duration and a transfer to another registry (the notice prints it), otherwise optional: send it whenever the user knows it; when required and absent, it comes back in missing. de 1 à 99 |
| `newSeatStreet` string · corps JSON | facultatif | New registered office: number and street. 200 caractères au plus |
| `newSeatComplement` string · corps JSON | facultatif | New registered office: building, floor (optional). 200 caractères au plus |
| `newSeatPostalCode` string · corps JSON | facultatif | New registered office: 5-digit postcode. format `^\d{5}$` |
| `newSeatCity` string · corps JSON | facultatif | New registered office: city. 100 caractères au plus |
| `newSeatCourt` string · corps JSON | facultatif | Commercial court (greffe) of the new registered office, e.g. Nanterre; deduced when the department has one court. 100 caractères au plus |
| `representativeRole` string · corps JSON | facultatif | Role of the legal representative named in the arrival notice. Valeurs : `manager`, `president` |
| `representativeCivility` string · corps JSON | facultatif | representativeCivility Valeurs : `mr`, `mrs` |
| `representativeLastName` string · corps JSON | facultatif | representativeLastName 100 caractères au plus |
| `representativeFirstName` string · corps JSON | facultatif | representativeFirstName 100 caractères au plus |
| `officerChange` string · corps JSON | facultatif | appointment: a new officer without departure; replacement: one leaves, one arrives; departure: one leaves without replacement. Valeurs : `appointment`, `replacement`, `departure` |
| `officerRole` string · corps JSON | facultatif | officerRole Valeurs : `manager`, `president`, `chief_executive` |
| `departureCause` string · corps JSON | facultatif | departureCause Valeurs : `resignation`, `dismissal`, `death`, `end_of_term` |
| `departingCivility` string · corps JSON | facultatif | departingCivility Valeurs : `mr`, `mrs` |
| `departingLastName` string · corps JSON | facultatif | departingLastName 100 caractères au plus |
| `departingFirstName` string · corps JSON | facultatif | departingFirstName 100 caractères au plus |
| `incomingCivility` string · corps JSON | facultatif | incomingCivility Valeurs : `mr`, `mrs` |
| `incomingLastName` string · corps JSON | facultatif | incomingLastName 100 caractères au plus |
| `incomingFirstName` string · corps JSON | facultatif | incomingFirstName 100 caractères au plus |
| `newName` string · corps JSON | facultatif | New company name. 200 caractères au plus |
| `newAcronym` string · corps JSON | facultatif | New acronym (optional). 50 caractères au plus |
| `purposeChange` string · corps JSON | facultatif | purposeChange Valeurs : `extension`, `replacement`, `removal` |
| `newPurpose` string · corps JSON | facultatif | Corporate purpose as written in the decision. 2000 caractères au plus |
| `capitalChange` string · corps JSON | facultatif | capitalChange Valeurs : `increase`, `decrease` |
| `newCapital` number · corps JSON | facultatif | Share capital after the operation, in euros. |
| `contributionNature` string · corps JSON | facultatif | contributionNature Valeurs : `cash`, `shareholder_current_account`, `reserves`, `real_estate`, `business`, `securities` |
| `newDurationYears` integer · corps JSON | facultatif | New company duration in years. de 1 à 99 |
| `liquidatorCivility` string · corps JSON | facultatif | liquidatorCivility Valeurs : `mr`, `mrs` |
| `liquidatorLastName` string · corps JSON | facultatif | liquidatorLastName 100 caractères au plus |
| `liquidatorFirstName` string · corps JSON | facultatif | liquidatorFirstName 100 caractères au plus |
| `liquidationSeat` string · corps JSON | facultatif | Where the liquidation is based. Valeurs : `registered_office`, `liquidator`, `other` |
| `deedType` string · corps JSON | facultatif | Creation: form of the articles of association. Valeurs : `private_deed`, `notarial_deed` |
| `deedDate` string · corps JSON | facultatif | Creation: date the articles of association were signed (YYYY-MM-DD). |
| `notaryName` string · corps JSON | facultatif | Creation by notarial deed: name of the notary. 100 caractères au plus |
| `notaryCity` string · corps JSON | facultatif | Creation by notarial deed: city where the notary practises. 100 caractères au plus |
| `companyName` string · corps JSON | facultatif | Creation: name of the company, as in the articles. 200 caractères au plus |
| `acronym` string · corps JSON | facultatif | Creation: acronym (optional). 50 caractères au plus |
| `tradeName` string · corps JSON | facultatif | Creation: trade name (optional). 200 caractères au plus |
| `purpose` string · corps JSON | facultatif | Creation: corporate purpose, as written in the articles. 2000 caractères au plus |
| `profession` string · corps JSON | facultatif | Creation of a société d'exercice libéral (seleurl, selarl, selas, selasu, selafa), optional: profession practised, as in the articles, e.g. avocat. The notice prints it when given. 200 caractères au plus |
| `capital` number · corps JSON | facultatif | Creation: share capital in euros (fixed capital). |
| `initialCapital` number · corps JSON | facultatif | Creation with a variable capital: initial capital in euros. |
| `minimumCapital` number · corps JSON | facultatif | Creation with a variable capital: minimum capital in euros. |
| `maximumCapital` number · corps JSON | facultatif | Creation with a variable capital: maximum capital in euros. |
| `seatStreet` string · corps JSON | facultatif | Creation: registered office, number and street. 200 caractères au plus |
| `seatComplement` string · corps JSON | facultatif | Creation: registered office, building or floor (optional). 200 caractères au plus |
| `seatPostalCode` string · corps JSON | facultatif | Creation: registered office, 5-digit postcode. format `^\d{5}$` |
| `seatCity` string · corps JSON | facultatif | Creation: registered office, city. 100 caractères au plus |
| `seatCourt` string · corps JSON | facultatif | Creation: commercial court (greffe) of registration, e.g. Bobigny; deduced when the department has one court. 100 caractères au plus |
| `shareTransferClause` string · corps JSON | facultatif | Creation of a share company (SAS, SA…): clause on the transfer of shares, as in the articles. 2000 caractères au plus |
| `meetingAdmissionClause` string · corps JSON | facultatif | Creation of a share company (SAS, SA…): clause on admission to meetings and voting rights, as in the articles. 2000 caractères au plus |
| `officers` object\[\] · corps JSON | facultatif | Création seulement : les dirigeants à modifier, chacun avec son rôle, son type et son numéro. Rôles par formalité : eurl/sarl/sc/sci/sccv/scm/scpi/scp/seleurl/selarl: manager; sasu: president, chief_executive, deputy_chief_executive, other_chief_executive, auditor, substitute_auditor; sas: president, chief_executive, deputy_chief_executive, director, other_chief_executive, auditor, substitute_auditor; snc: manager, partner, co_manager, auditor, substitute_auditor; sa: president, chief_executive, deputy_chief_executive, director, management_board_member, auditor, substitute_auditor; selas/selasu: president, chief_executive, deputy_chief_executive, auditor, substitute_auditor; selafa: president, chief_executive, deputy_chief_executive, director, auditor, substitute_auditor. 20 valeurs au plus |
| `siren` string · corps JSON | facultatif | SIREN de la société existante, comme à la création ; absent pour une création. 15 caractères au plus |

#### Réponses

- 200Brouillon modifié.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 401Clé d'API absente, inconnue ou révoquée.
- 404Ressource introuvable ou non diffusable (diffusion restreinte, opposition).
- 409Le brouillon a déjà été enregistré sur legalone.fr : la suite se fait sur le formulaire.
- 410Le brouillon a expiré.
- 422Refusé par legalone.fr (valeur hors des choix du formulaire…).
- 429Quota dépassé.
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -X PATCH \
  -H "Authorization: Bearer lo_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{"editToken":"Qm9uam91ci1jZWNpLWVzdC11bi1leGVtcGxlLWRlLWp","formality":"transfert-siege-dans-departement","siren":"552032534","companyDurationYears":99}' \
  https://api.legalone.fr/v1/annonces/brouillons/ckmcpdraft000000000000001
```

Réponse 200

```
{
  "data": {
    "formality": "transfert-siege-dans-departement",
    "companyName": "Exemple SAS",
    "department": "75",
    "preview": "Exemple SAS\n\nSociété par actions simplifiée au capital de [capital]\n\nSiège : 8 RUE DE LA PAIX 75002 PARIS\n\n552032534 RCS de Paris\n\nPar décision de l'associé unique du 20-10-2026, il a été décidé de transférer le siège social à compter du 20-10-2026 au 12 avenue de l'Opéra 75001 Paris. Mention au RCS de Paris",
    "missing": [],
    "expiresAt": "2026-11-05T13:17:35.409Z",
    "draftId": "ckmcpdraft000000000000001",
    "price": {
      "formality": "transfert-siege-dans-departement",
      "label": "Transfert de siège social dans le département",
      "category": "Modifications",
      "pricing": "flat",
      "department": "75",
      "annex": "V",
      "currency": "EUR",
      "vatRate": 0.2,
      "schedule": {
        "version": "2026-01-01",
        "year": 2026,
        "label": "Arrêté du 19 novembre 2021 modifié (tarifs 2026 des annonces légales)",
        "url": "https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000053177549"
      },
      "amountExclTax": 109,
      "vat": 21.8,
      "amountInclTax": 130.8,
      "characterCount": null,
      "ratePerCharacter": null
    },
    "reviewNotice": "Préparé à partir de vos réponses : relisez l'annonce sur legalone.fr et corrigez-la si besoin avant de payer. Les informations sur les règles et les démarches sont indicatives ; en cas de doute, demandez conseil à un professionnel du droit."
  },
  "meta": {
    "requestId": "3f6c1b8e-6f0a-4c77-9a45-2d1f0f6f8a11",
    "updatedAt": "2026-01-01T00:00:00.000Z",
    "sources": [
      {
        "name": "Légifrance",
        "licence": "Licence Ouverte 2.0",
        "url": "https://www.legifrance.gouv.fr/",
        "updatedAt": "2026-01-01T00:00:00.000Z"
      }
    ],
    "warnings": [],
    "attribution": "Tarifs et règles : textes officiels (Légifrance, service-public.gouv.fr) — via LegalOne",
    "privacy": "https://www.legalone.fr/developers/conditions#confidentialite"
  },
  "links": {
    "self": "https://api.legalone.fr/v1/annonces/brouillons",
    "documentation": "https://www.legalone.fr/developers"
  }
}
```

## Compte développeur

Inscription d'un compte développeur et révocation d'une clé. Les clés se créent dans l'espace développeur (HTML), hors de ce contrat.

POST`/v1/compte`Sans clé

### Inscription d'un compte développeur gratuit

Demande la création d'un compte développeur, qui donne accès aux clés d'API. L'API répond 202 avec le même message, que l'adresse soit connue ou non : si elle peut recevoir un lien, un e-mail valable 30 minutes lui est envoyé.

**Détails**

Si l'e-mail n'a pas pu partir, elle répond 503 (« L'e-mail n'a pas pu être envoyé, réessayez plus tard. »). Un compte par boîte e-mail : une autre forme d'une adresse déjà inscrite (avec « +… », ou avec des points pour Gmail) ne crée pas de second compte. Le lien ouvre l'espace développeur ([https://api.legalone.fr/compte](https://api.legalone.fr/compte), pages HTML qui ne font pas partie de ce contrat), où l'on crée ses clés, suit sa consommation et demande un quota supérieur. Utilisez-la depuis un formulaire d'inscription ; elle n'exige pas de clé. Le compte est soumis aux conditions d'utilisation : `acceptTerms` doit valoir `true`. Au plus 5 demandes par heure et 10 inscriptions par jour (UTC) par adresse IP. Ne sert pas à créer une clé directement.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `email` string · corps JSON | obligatoire | Adresse e-mail du compte, à laquelle le lien est envoyé. |
| `contactName` string · corps JSON | obligatoire | Nom de la personne de contact. 120 caractères au plus |
| `companyName` string · corps JSON | obligatoire | Nom de la société ou de l'organisation. 200 caractères au plus |
| `companySiren` string · corps JSON | facultatif | SIREN de la société (9 chiffres ; les espaces et points sont ignorés). Facultatif. format `^\d{9}$` |
| `usageCategory` string · corps JSON | obligatoire | Usage prévu, parmi : `kyc`, `fraud`, `compliance`, `suppliers`, `crm`, `accounting`, `legal`, `research`, `other`. Les libellés figurent dans le formulaire d'inscription. Valeurs : `kyc`, `fraud`, `compliance`, `suppliers`, `crm`, `accounting`, `legal`, `research`, `other` |
| `usageDescription` string · corps JSON | obligatoire | Description de l'usage prévu. 500 caractères au plus |
| `acceptTerms` boolean · corps JSON | obligatoire | Doit valoir `true` : acceptation des conditions d'utilisation ([https://www.legalone.fr/developers/conditions](https://www.legalone.fr/developers/conditions)). |

#### Réponses

- 202Demande reçue.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 429Trop de demandes depuis cette adresse IP (5 par heure).
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"email":"prenom.nom@exemple.fr","contactName":"Camille Exemple","companyName":"Exemple SAS","companySiren":"552032534","usageCategory":"crm","usageDescription":"Pré-remplir la fiche société lors de l'\''inscription de nos clients professionnels.","acceptTerms":true}' \
  https://api.legalone.fr/v1/compte
```

Réponse 202

```
{
  "data": {
    "status": "email_sent",
    "detail": "Si l'adresse peut recevoir un lien, il vient d'y être envoyé ; il est valable 30 minutes. Pensez aux courriers indésirables."
  }
}
```

POST`/v1/compte/connexion`Sans clé

### Lien de connexion à l'espace développeur

Envoie par e-mail un lien de connexion valable 30 minutes vers l'espace développeur ([https://api.legalone.fr/compte](https://api.legalone.fr/compte)), pour retrouver ou recréer une clé. L'API répond 202 avec le même message, que l'adresse ait un compte ou non ; 503 si l'envoi d'e-mails est désactivé.

**Détails**

Utilisez-la quand un développeur a perdu l'accès à son espace. Elle n'exige pas de clé. Au plus 5 demandes par heure et par adresse IP. Ne sert pas à créer un compte : utilisez `createDeveloperAccount`.

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `email` string · corps JSON | obligatoire | Adresse e-mail du compte. |

#### Réponses

- 202Demande reçue.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 429Trop de demandes depuis cette adresse IP (5 par heure).
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).
- 503Service momentanément indisponible.

Requête curl

```
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"email":"prenom.nom@exemple.fr"}' \
  https://api.legalone.fr/v1/compte/connexion
```

Réponse 202

```
{
  "data": {
    "status": "email_sent",
    "detail": "Si l'adresse peut recevoir un lien, il vient d'y être envoyé ; il est valable 30 minutes. Pensez aux courriers indésirables."
  }
}
```

DELETE`/v1/keys/current`Clé d'API obligatoire

### Révocation de la clé utilisée pour la requête

Révoque immédiatement la clé envoyée avec la requête, sans avoir à se connecter à l'espace développeur : à utiliser si une clé a fuité. La révocation est effective en moins d'une minute.

**Détails**

Les clés se créent et se gèrent dans l'espace développeur ([https://api.legalone.fr/compte](https://api.legalone.fr/compte)). Ne sert pas à lister ni à créer des clés.

#### Paramètres

Aucun paramètre.

#### Réponses

- 204Clé révoquée.
- 401Clé d'API absente, inconnue ou révoquée.
- 429Quota dépassé.

Requête curl

```
curl -X DELETE \
  -H "Authorization: Bearer lo_votre_cle" \
  https://api.legalone.fr/v1/keys/current
```

## Opposition

Demande d'opposition à la diffusion d'une donnée.

POST`/v1/oppositions`Sans clé

### Demande d'opposition à la diffusion d'une donnée

Enregistre une demande d'opposition (droit d'opposition RGPD, article 21) à la diffusion d'une entreprise, d'un établissement, d'un dirigeant ou d'un avis BODACC. Un accusé de réception est envoyé par e-mail ; une personne examine chaque demande sous 5 jours ouvrés et rien n'est masqué automatiquement.

**Détails**

Si elle est acceptée, la donnée disparaît de l'API et du serveur MCP en moins d'une heure. Utilisez-la pour le compte d'une personne ou d'une société concernée ; elle n'exige pas de clé. Au plus 5 demandes par heure et par adresse IP. Ne sert pas à signaler une erreur de la source (corrigez-la auprès de l'INSEE, de l'INPI ou de la DILA).

#### Paramètres

| Nom |   | Description |
| --- | --- | --- |
| `targetKind` string · corps JSON | obligatoire | Nature de la donnée visée : une entreprise, un établissement, un dirigeant ou un avis BODACC. Valeurs : `COMPANY`, `ESTABLISHMENT`, `OFFICER`, `BODACC_NOTICE` |
| `targetId` string · corps JSON | obligatoire | Identifiant de la donnée : SIREN (9 chiffres), SIRET (14 chiffres), identifiant du dirigeant (32 caractères hexadécimaux, `officers[].id`) ou identifiant de l'avis BODACC. |
| `siren` string · corps JSON | facultatif | SIREN de la société. Obligatoire pour un dirigeant. format `^\d{9}$` |
| `email` string · corps JSON | obligatoire | Adresse e-mail à laquelle répondre. |
| `reason` string · corps JSON | facultatif | Motif de l'opposition. 1000 caractères au plus |
| `acceptPrivacy` boolean · corps JSON | obligatoire | Doit valoir `true` : traitement de l'adresse e-mail pour répondre ([https://www.legalone.fr/developers/conditions#confidentialite](https://www.legalone.fr/developers/conditions#confidentialite)). |

#### Réponses

- 202Demande enregistrée.
- 400Paramètre invalide (SIREN, SIRET, identifiant d'avis, `q`, `page`, `per_page`, `limit`, `postcode`, `citycode`, `type`, `lat` ou `lon` hors format ou hors bornes).
- 429Trop de demandes depuis cette adresse IP (5 par heure).
- 500Erreur interne, y compris une réponse bloquée par le contrôle de confidentialité (type `response-blocked`).

Requête curl

```
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"targetKind":"COMPANY","targetId":"552032534","email":"prenom.nom@exemple.fr","reason":"Motif tenant à ma situation particulière.","acceptPrivacy":true}' \
  https://api.legalone.fr/v1/oppositions
```

Réponse 202

```
{
  "data": {
    "status": "received",
    "reference": "3F6C1B8E",
    "acknowledged": true
  }
}
```

## Service

Description de l'API et état du service.

GET`/v1/openapi.json`Sans clé

### Description OpenAPI de l'API

Renvoie ce document OpenAPI 3.1. Utilisez-le pour générer un client ou décrire les outils d'un assistant. Cette route ne consomme pas de quota et n'exige pas de clé.

#### Paramètres

Aucun paramètre.

#### Réponses

- 200Document OpenAPI 3.1.

Requête curl

```
curl \
  https://api.legalone.fr/v1/openapi.json
```

Réponse 200 · générée depuis le schéma

```
{}
```

GET`/v1/health`Sans clé

### État du service et fraîcheur des données

Renvoie l'état du service (`ok`, `degraded` ou `starting`), sa version et la fraîcheur des données copiées depuis les sources. Utilisez-la pour surveiller l'API ou savoir si les données ont du retard.

**Détails**

Ne sert pas à interroger des entreprises. Cette route ne consomme pas de quota et n'exige pas de clé.

#### Paramètres

Aucun paramètre.

#### Réponses

- 200État du service.
- 503Service momentanément indisponible.

Requête curl

```
curl \
  https://api.legalone.fr/v1/health
```

Réponse 200

```
{
  "data": {
    "status": "ok",
    "version": "0.1.0",
    "freshness": {
      "catalogUpdatedAt": "2026-10-29T13:00:24.699Z",
      "mainUpdatedAt": "2026-10-29T12:43:32.035Z",
      "catalogSnapshotDate": "2026-09-01",
      "lagSeconds": 1293,
      "replicaReady": true
    }
  }
}
```

---

Version Markdown de https://legalone.fr/developers/documentation. Index des pages LegalOne pour les assistants IA : https://legalone.fr/llms.txt
