openapi: 3.0.3 info: title: illico API — Web Services annonces légales version: "1.29" description: | Référence de l'API illico (IDM Solutions), version 1.29, préparée par CAIRN Media pour ses partenaires prescripteurs. ## Utilisation Architecture RESTful. Les paramètres sont transmis dans le corps de la requête au format JSON encodé en UTF-8. Les réponses sont au format JSON encodé en UTF-8. Toutes les réponses contiennent le champ `resultat` (`succes` | `erreur`). En cas d'erreur, le tableau `erreurs` contient un ou plusieurs codes (voir le schéma `CodeErreur`). **Tous les appels renvoient le code HTTP `200`**, y compris en cas d'erreur métier, de signature invalide ou de dépassement de quota. Le seul indicateur fiable est donc le champ `resultat` : les réponses succès et erreur sont modélisées sur un `200` unique avec un `oneOf` discriminé par `resultat`. ## Sécurisation Couple **clé publique / clé secrète** fourni par IDM Solutions. Tous les appels doivent être effectués **de serveur à serveur** — jamais depuis du JavaScript client (les clés seraient exposées). Trois en-têtes HTTP obligatoires sur chaque appel : - `Application` : la clé publique. - `Timestamp` : entier, secondes écoulées depuis le 01/01/1970 (Unix). Écart maximum de **5 secondes** avec l'heure de Paris. - `Signature` : chaîne hexadécimale calculée comme suit. ### Calcul de la signature ``` sha256("{cle_secrete}+{methode_http}+{chemin}+{body}+{timestamp}") ``` - `methode_http` : `GET` / `POST` / `PUT` / `DELETE` - `chemin` : chemin de l'API **sans les paramètres d'URL** (query string exclue), ex. `/annonce-legale/api/externe/publications` - `body` : le body **exactement tel qu'envoyé**, octets bruts, espaces et retours à la ligne inclus (chaîne vide pour un GET). Le serveur vérifie la signature en lisant le body brut avant tout traitement ; ne pas re-sérialiser le JSON entre la signature et l'envoi. - Les éléments sont assemblés avec le caractère `+`. **Exemple 1 (GET, body vide)** ``` sha256("f539e7fe-9f89-48cf-ac0e-e7378d6eda31+GET+/annonce-legale/api/externe/publications++1656679723") → cf594748bbd1e820cf71b37d903b9bc6a88ad9e86fa7f142184fdd761680331a ``` **Exemple 2 (POST avec body)** ``` sha256('f539e7fe-9f89-48cf-ac0e-e7378d6eda31+POST+/annonce-legale/api/externe/devis+{"publication":1,"departement":"33","date_parution":"2022-12-31","categorie":"CONSTI","forfait":"SARL","texte":"

Aux termes d'un acte sous ssp
en date du …

","justificatifs_papiers":1,"justificatif_numerique":true}+1656679723') → 060ae4ee2a0a2771b882301ce72fc96c818859fd9d5df474cd0539d1be9bb5c5 ``` ## Limitation **300 requêtes par minute** (au-delà : `err_requetes_max`). ## Texte et styles (annonces et en-têtes) - Le texte doit être du HTML. **Seule la balise `

` est autorisée** comme balise de contenu ; le texte de toute autre balise de contenu et le texte hors `

` sont ignorés. - Balises en ligne autorisées dans un `

` : `` / `` (gras), `
` / `
` (saut de ligne), et `` pour les feuilles de style de type `caractere`. - Plage de caractères autorisée : **Windows-1252**. Tout caractère hors plage déclenche une erreur précisant le caractère fautif. - Les classes de style (`class="fs-..."`) sont fournies par `GET /feuilles-styles` et, par catégorie, par `GET /categories`. Sans classe ou avec une classe incorrecte, la classe par défaut de la catégorie (généralement `fs-texte`) ou de l'en-tête (généralement `fs-prescripteur_adresse`) est appliquée. Si un paragraphe possède plusieurs classes valides, celle de **plus petit rang** l'emporte. - **Filets** : si au moins une feuille de style de type `filet` existe, `


` peut remplacer `

`. Le texte d'un `

` portant une classe de type filet n'est pas traité et n'apparaît pas. ## Délai de bouclage Le délai de bouclage est en général identique quel que soit le jour de parution. Si un jour non ouvré se situe entre le jour de bouclage et le jour de parution, le bouclage est reculé de 24h, puis à nouveau jusqu'au premier jour ouvré. Exemple (parution mardi/jeudi, bouclage la veille 16h) : semaine du lundi de Pentecôte → bouclage vendredi 16h ; semaine du jeudi de l'Ascension → bouclage mardi 16h. Le journal peut aussi modifier exceptionnellement ses délais (ponts de mai, fermeture annuelle) : `GET /dates-parutions` retourne le bouclage réellement configuré. ## Modifier une annonce L'API ne propose pas de modification d'une annonce commandée : il n'y a pas d'endpoint `PUT`. Pour corriger une annonce, le parcours est **annuler puis recommander** : 1. `DELETE /annonce/{reference}` annule l'annonce. Si elle avait déjà été facturée, la réponse renvoie la facture et l'avoir correspondant. 2. `POST /commande` enregistre la nouvelle annonce avec le texte corrigé (et, si vous le souhaitez, un nouveau `numero_commande` pour tracer le remplacement côté prescripteur). Pour éviter les corrections après commande, calculez d'abord un `POST /devis` : il renvoie le texte composé tel qu'il sera publié (classes de style résolues) et permet de faire valider le rendu et le tarif avant de commander. ## Publications autorisées La clé API est rattachée à un compte client illico. Les publications accessibles à ce compte sont configurées par le journal, et cette configuration s'applique à `GET /publications` comme à `POST /devis` et `POST /commande`. Concrètement : les identifiants renvoyés par `GET /publications?departement=XX` sont les seuls titres dans lesquels la clé peut commander, et ce sont ceux couverts par l'accord commercial avec CAIRN Media. Une commande sur un autre identifiant renvoie une erreur (`err_publication_non_habilite` ou `err_publication_introuvable`). ## Formats de dates `AAAA-MM-JJ` (date) et `AAAA-MM-JJ HH:MM:SS` (date et heure de bouclage, 24h) partout : Devis, Commande et Dates de parutions. ## Codes départements Corse-du-Sud : `2A` — Haute-Corse : `2B`. ## Historique des versions | Date | Version | Évolution | |---|---|---| | 18/10/2022 | 1.00 | Première version publiée | | 02/11/2022 | 1.01 | Catégories ; paramètres d'URL retirés du calcul de signature | | 15/12/2022 | 1.05 | Champ `contact` à la commande ; API Contacts | | 20/12/2022 | 1.06 | Limite de 300 requêtes/minute ; API Statut ; logo par publication | | 20/02/2023 | 1.09 | API Annulation ; statut et documents d'une annonce ; codes d'erreur | | 23/03/2023 | 1.12 | Styles et disposition des en-têtes | | 13/06/2023 | 1.13 | Plage de caractères autorisée (Windows-1252) | | 15/09/2023 | 1.16 | API Dates de parutions | | 11/12/2023 | 1.17 | Forfaits 2024 : catégorie `MODIF` et ses forfaits ; `AUTRE` devient `CONSTI_AUTRE` | | 26/01/2024 | 1.18 | Motif des annonces suspendues ; suivi par `numero_commande` | | 28/02/2024 | 1.19 | Création de contacts ; `/dates-parution` déprécié au profit de `/dates-parutions` | | 02/07/2024 | 1.20 | Routes `/annonces/documents` et `/annonces/statuts` ; API Factures | | 05/08/2024 | 1.21 | `envoi_justificatif` à la commande ; lignes de factures | | 30/10/2024 | 1.22 | Objet `remises` sur les factures | | 20/11/2024 | 1.23 | `envoi_justificatif` passe à `false` par défaut | | 24/12/2024 | 1.24 | Forfait `MOD_NON_DISSOL` | | 12/02/2025 | 1.26 | API Client ; "clé privée" renommée "clé secrète" | | 01/09/2025 | 1.27 | Email de l'annonceur non obligatoire | | 19/03/2026 | 1.28 | API Feuilles de styles ; classes par catégorie ; texte composé au retour du devis | | 08/09/2026 | 1.29 | API Forfaits ; `date_bouclage` au retour du devis ; corrections des exemples et des types | contact: name: IDM Solutions — support email: support@idm-solutions.com servers: - url: https://fr-cairn-test.illico.io description: Instance de test CAIRN Media — clés fournies séparément - url: https://fr-cairn.illico.io description: Production CAIRN Media security: - Application: [] Timestamp: [] Signature: [] tags: - name: Annonces description: Devis, commande, annulation et suivi des annonces - name: Factures description: Factures et avoirs liés aux annonces - name: Documents description: Attestations, justificatifs, factures et avoirs (liens de téléchargement) - name: Publications description: Publications habilitées et dates de parution - name: Compte description: Compte client et contacts associés à la clé API - name: Référentiels description: Pays, départements, feuilles de styles, catégories, forfaits paths: /annonce-legale/api/externe/devis: post: tags: [Annonces] summary: Devis — calcul du tarif d'une annonce operationId: calculerDevis description: | Calcule le tarif d'une annonce sans l'enregistrer. - Si `date_parution` n'est pas précisée, la prochaine date est proposée en tenant compte du délai de bouclage. - Si la date demandée ne respecte pas le bouclage, la prochaine date est calculée et retournée dans `date_parution`. - `forfait` est obligatoire selon la catégorie (`CONSTI`, `MODIF`). - Justificatifs papier : 0 par défaut si la publication propose le justificatif numérique, sinon 1. - Retourne également le `texte` composé après traitement (classes de style résolues). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DevisRequete' example: publication: 1 departement: "33" date_parution: "2022-12-31" categorie: CONSTI forfait: SARL entete: mime_type: image/jpeg data: ZGF0YV9iYXNlNjRfZW50ZXRl texte: '

AVIS

Aux termes d''un acte

En date du…

' justificatifs_papiers: 1 justificatif_numerique: true responses: '200': description: Résultat du devis (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/DevisReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/DevisReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes date_parution: "2022-12-31" date_bouclage: "2022-12-29 16:00:00" tarif: annonce: { quantite: 1, prix_unitaire: 144, montant_ht: 144, taux_tva: 20 } justificatif_papier: { quantite: 1, prix_unitaire: 2.15, montant_ht: 2.15, taux_tva: 2.1 } justificatif_numerique: { quantite: 1, prix_unitaire: 1.47, montant_ht: 1.47, taux_tva: 2.1 } frais_port: { quantite: 1, prix_unitaire: 2.92, montant_ht: 2.92, taux_tva: 20 } totaux: { montant_ht: 150.54, montant_tva: 29.46, montant_ttc: 180 } tva: - { taux: 2.1, montant: 0.08 } - { taux: 20, montant: 29.38 } texte: "

AVIS

\r\n

Aux termes d'un acte

\r\n

En date du…

" erreur: value: resultat: erreur erreurs: [err_categorie_absent, err_forfait_absent] /annonce-legale/api/externe/commande: post: tags: [Annonces] summary: Commande — enregistre la commande d'une annonce operationId: commanderAnnonce description: | Enregistre la commande d'une annonce. - Si `date_parution` n'est pas précisée, la prochaine date est automatiquement affectée en tenant compte du délai de bouclage. - `forfait` est obligatoire selon la catégorie (`CONSTI`, `MODIF`). - `facturation` est **obligatoire si `mode_facturation` = `annonceur`**. - Si `contact` n'est pas spécifié, le contact par défaut du compte API est utilisé. - `numero_commande` (50 caractères max.) permet ensuite d'utiliser ce numéro à la place de la `reference` illico dans tous les endpoints de suivi. - Justificatifs papier : 0 par défaut si la publication propose le justificatif numérique, sinon 1. - `largeur` / `largeur_texte` : leur prise en compte dépend du paramétrage du journal et de la clé API. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CommandeRequete' example: publication: 1 departement: "33" date_parution: "2022-12-31" categorie: CONSTI forfait: SARL numero_commande: COMMANDE001 dossier: CONSTITUTION/IDM SOLUTIONS entete: mime_type: image/jpeg data: ZGF0YV9iYXNlNjRfZW50ZXRl texte: '

AVIS DE CONSTITUTION

Aux termes d''un acte sous ssp
en date du 31/12/2022

' mode_facturation: annonceur facturation: nom_raison_sociale: IDM SOLUTIONS adresse: 7 rue du bois d'Huré adresse_complement: 2ème étage Bâtiment 2 bis code_postal: "17138" ville: LAGORD pays: FRA telephone: "0972500404" email: support@idm-solutions.com justificatifs_papiers: 1 responses: '200': description: Résultat de la commande (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/CommandeReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/CommandeReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes reference: L22EJ00001 date_parution: "2022-12-31" tarif: annonce: { quantite: 1, prix_unitaire: 144, montant_ht: 144, taux_tva: 20 } justificatif_papier: { quantite: 1, prix_unitaire: 2.15, montant_ht: 2.15, taux_tva: 2.1 } frais_port: { quantite: 1, prix_unitaire: 2.92, montant_ht: 2.92, taux_tva: 20 } totaux: { montant_ht: 149.07, montant_tva: 29.43, montant_ttc: 178.5 } tva: - { taux: 2.1, montant: 0.05 } - { taux: 20, montant: 29.38 } erreur: value: resultat: erreur erreurs: [err_facturation_absent] /annonce-legale/api/externe/annonce/{reference}: delete: tags: [Annonces] summary: Annulation — annule une annonce operationId: annulerAnnonce description: | Annule une annonce. Le tableau `documents` (facture + avoir) peut être absent si l'annonce n'avait pas été facturée avant l'annulation. Route `DELETE /annonce/{reference}`. parameters: - $ref: '#/components/parameters/Reference' responses: '200': description: Résultat de l'annulation (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/AnnulationReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/AnnulationReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes reference: L2200001 documents: - type: facture numero: F22-00001 url: "{url_environnement}/telechargement/pdf/facture/F22-00001?uuid=16a01902-c26e-40a6-a16d-d709982af57c" - type: avoir numero: F22-00002 url: "{url_environnement}/telechargement/pdf/facture/F22-00002?uuid=f90f72f9-61a0-487e-ba83-edec7b76b4fb" erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: resultat: erreur erreurs: [err_annonce_introuvable] /annonce-legale/api/externe/annonces/statuts: post: tags: [Annonces] summary: Statuts en lot — statuts d'un tableau d'annonces operationId: getStatutsLot description: | Récupère les statuts d'un ensemble d'annonces identifiées par leur référence illico **ou** par le `numero_commande` fourni à la commande. Route `/annonces/statuts`. L'ancienne route `/statut` reste servie pour compatibilité. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReferencesRequete' example: references: [L2200001, L2200145, L2200084] responses: '200': description: Statuts (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/StatutsLotReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/StatutsLotReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes annonces: - { reference: L2200001, statut: parue } - { reference: L2200145, statut: a-paraitre } - { reference: L2200084, statut: suspendue } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: resultat: erreur erreurs: [err_reference_absent] /annonce-legale/api/externe/annonce/{reference}/statut: get: tags: [Annonces] summary: Statut d'une annonce operationId: getStatutAnnonce parameters: - $ref: '#/components/parameters/Reference' responses: '200': description: Statut (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/StatutAnnonceReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/StatutAnnonceReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: { resultat: succes, reference: L2200001, statut: parue } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_annonce_introuvable] } /annonce-legale/api/externe/annonces/factures: post: tags: [Factures] summary: Factures en lot — factures/avoirs d'un tableau d'annonces operationId: getFacturesLot description: | Récupère les factures et avoirs d'un ensemble d'annonces identifiées par leur référence illico **ou** par le `numero_commande` fourni à la commande. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReferencesRequete' example: references: [L2200001, L2200345] responses: '200': description: Factures (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/FacturesLotReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/FacturesLotReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes annonces: - reference: L2200001 factures: - type: facture numero: F22-00001 date_facture: "2023-01-01" date_echeance: "2023-01-15" montant_ht: 145.47 montant_ttc: 174.3 url: "{url_environnement}/telechargement/pdf/facture/F22-00001?uuid=16a01902-c26e-40a6-a16d-d709982af57c" lignes: - reference: L2200001 annonce: { quantite: 1, prix_unitaire: 144, taux_tva: 20, montant_ht: 144 } justificatif_numerique: { quantite: 1, prix_unitaire: 1.47, taux_tva: 2.1, montant_ht: 1.47 } totaux: { montant_ht: 145.47, montant_tva: 28.83, montant_ttc: 174.3 } tva: - { taux: 2.1, montant: 0.03 } - { taux: 20, montant: 28.8 } - reference: L2200345 factures: - type: facture numero: F22-00009 date_facture: "2023-01-01" date_echeance: "2023-01-31" montant_ht: 122.47 montant_ttc: 146.7 url: "{url_environnement}/telechargement/pdf/facture/F22-00009?uuid=16a01902-c26e-40a6-a16d-d709982af57c" lignes: - reference: L2200345 annonce: { quantite: 1, prix_unitaire: 121, taux_tva: 20, montant_ht: 121 } justificatif_numerique: { quantite: 1, prix_unitaire: 1.47, taux_tva: 2.1, montant_ht: 1.47 } totaux: { montant_ht: 122.47, montant_tva: 24.23, montant_ttc: 146.7 } tva: - { taux: 2.1, montant: 0.03 } - { taux: 20, montant: 24.2 } - type: avoir numero: A22-000010 date_facture: "2023-01-01" date_echeance: "2023-01-31" montant_ht: -122.47 montant_ttc: -146.7 url: "{url_environnement}/telechargement/pdf/facture/A22-000010?uuid=65baaca5-1f82-43d6-b5c9-27eab1bee78b" lignes: - reference: L2200345 annonce: { quantite: 1, prix_unitaire: -121, taux_tva: 20, montant_ht: -121 } justificatif_numerique: { quantite: 1, prix_unitaire: -1.47, taux_tva: 2.1, montant_ht: -1.47 } totaux: { montant_ht: -122.47, montant_tva: -24.23, montant_ttc: -146.7 } tva: - { taux: 2.1, montant: -0.03 } - { taux: 20, montant: -24.2 } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_reference_absent] } /annonce-legale/api/externe/annonce/{reference}/factures: get: tags: [Factures] summary: Factures d'une annonce operationId: getFacturesAnnonce parameters: - $ref: '#/components/parameters/Reference' responses: '200': description: Factures (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/FacturesAnnonceReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/FacturesAnnonceReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes reference: L2200001 factures: - type: facture numero: F22-00001 date_facture: "2023-01-01" date_echeance: "2023-01-15" montant_ht: 145.47 montant_ttc: 174.3 url: "{url_environnement}/telechargement/pdf/facture/F22-00001?uuid=16a01902-c26e-40a6-a16d-d709982af57c" lignes: - reference: L2200001 annonce: { quantite: 1, prix_unitaire: 144, taux_tva: 20, montant_ht: 144 } justificatif_numerique: { quantite: 1, prix_unitaire: 1.47, taux_tva: 2.1, montant_ht: 1.47 } totaux: { montant_ht: 145.47, montant_tva: 28.83, montant_ttc: 174.3 } tva: - { taux: 2.1, montant: 0.03 } - { taux: 20, montant: 28.8 } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_annonce_introuvable] } /annonce-legale/api/externe/annonces/documents: post: tags: [Documents] summary: Documents en lot — liens de téléchargement pour un tableau d'annonces operationId: getDocumentsLot description: | Récupère les liens de téléchargement des documents (attestation, justificatif, facture, avoir) liés à un ensemble d'annonces commandées. Le champ `numero` est absent pour les justificatifs. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReferencesRequete' example: references: [L2200001, L2200145, L2200084] responses: '200': description: Documents (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/DocumentsLotReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/DocumentsLotReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes annonces: - reference: L2200001 documents: - type: attestation numero: L2200001 url: "{url_environnement}/telechargement/pdf/attestation/L2200001?uuid=f831ae3d-2d05-4417-8e1a-b22b8a2d7dbe" - type: facture numero: F22-00001 url: "{url_environnement}/telechargement/pdf/facture/F22-00001?uuid=16a01902-c26e-40a6-a16d-d709982af57c" - type: justificatif url: "{url_environnement}/telechargement/pdf/justificatif/L2200001?uuid=f831ae3d-2d05-4417-8e1a-b22b8a2d7dbe" - reference: L2200084 documents: - type: attestation numero: L2200084 url: "{url_environnement}/telechargement/pdf/attestation/L2200084?uuid=ce660844-9a80-4ee1-80e6-8286549cf110" erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_reference_absent] } /annonce-legale/api/externe/annonce/{reference}/documents: get: tags: [Documents] summary: Documents d'une annonce operationId: getDocumentsAnnonce description: Récupère les documents d'une annonce. Le champ `numero` est absent pour les justificatifs. parameters: - $ref: '#/components/parameters/Reference' responses: '200': description: Documents (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/DocumentsAnnonceReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/DocumentsAnnonceReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes reference: L2200001 documents: - type: attestation numero: L2200001 url: "{url_environnement}/telechargement/pdf/attestation/L2200001?uuid=f831ae3d-2d05-4417-8e1a-b22b8a2d7dbe" - type: facture numero: F22-00001 url: "{url_environnement}/telechargement/pdf/facture/F22-00001?uuid=16a01902-c26e-40a6-a16d-d709982af57c" - type: justificatif url: "{url_environnement}/telechargement/pdf/justificatif/L2200001?uuid=f831ae3d-2d05-4417-8e1a-b22b8a2d7dbe" erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_annonce_introuvable] } /annonce-legale/api/externe/publications: get: tags: [Publications] summary: Publications habilitées sur un département operationId: getPublications description: | Liste des publications (papier ou web) habilitées sur le département demandé. La liste est mise à jour régulièrement. Le tableau `publications` peut être vide s'il n'y a aucune publication dans ce département. **Sans le paramètre `departement`, l'endpoint retourne la liste complète des publications**. **Publications autorisées** : la clé API est rattachée à un compte client illico sur lequel les publications accessibles sont configurées. Cet endpoint ne renvoie que ces publications, et Devis/Commande refusent toute autre publication. Pour un prescripteur, la liste renvoyée est donc la liste contractuelle : il n'y a pas à filtrer côté client. parameters: - name: departement in: query required: false description: Code du département souhaité (2 à 3 caractères). Corse-du-Sud `2A`, Haute-Corse `2B`. schema: type: string minLength: 2 maxLength: 3 example: "33" responses: '200': description: Publications (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/PublicationsReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/PublicationsReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes publications: - id: 1 departement: "33" libelle: LIBELLE JOURNAL periodicite: hebdomadaire type: papier entete: true justificatif_papier: true justificatif_numerique: true erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_departement_incorrect] } /annonce-legale/api/externe/dates-parutions: get: tags: [Publications] summary: Dates de parution à venir operationId: getDatesParutions description: | Liste des prochaines dates de parution (et bouclage réellement configuré) de toutes les publications, ou filtrée par publication/département. L'ancienne route `/dates-parution` (dépréciée en v1.19) reste servie pour compatibilité ; utiliser `/dates-parutions`. parameters: - name: quantite in: query required: false description: Nombre de dates de parution souhaitées. schema: type: integer default: 1 minimum: 1 maximum: 20 - name: publication in: query required: false description: Filtre sur l'identifiant de la publication. Si présent, `departement` devient obligatoire. schema: type: integer - name: departement in: query required: false description: Filtre sur le code du département (2 à 3 caractères). **Obligatoire si `publication` est présent.** schema: type: string minLength: 2 maxLength: 3 responses: '200': description: Dates de parution (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/DatesParutionsReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/DatesParutionsReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes publications: - id: 1 departement: "33" dates: - { date_parution: "2022-01-01", date_bouclage: "2022-01-01 12:00:00" } - { date_parution: "2022-01-08", date_bouclage: "2022-01-08 12:00:00" } - id: 2 departement: "75" dates: - { date_parution: "2022-01-01", date_bouclage: "2022-01-01 16:00:00" } - { date_parution: "2022-01-08", date_bouclage: "2022-01-08 16:00:00" } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_departement_absent] } /annonce-legale/api/externe/client: get: tags: [Compte] summary: Client — informations du compte associé à la clé API operationId: getClient responses: '200': description: Client (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/ClientReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/ClientReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes numero_compte: C0001 raison_sociale: IDM SOLUTIONS adresse: 7 rue du Bois d'Hure adresse_complement: Batiment B - 2eme etage code_postal: "17140" ville: LAGORD email: support@idm-solutions.com mode_facturation: prescripteur entetes: - mime_type: application/pdf data: JVBERi0…PRg0K erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_client_inactif] } /annonce-legale/api/externe/contacts: get: tags: [Compte] summary: Contacts associés à la clé API operationId: getContacts responses: '200': description: Contacts (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/ContactsReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/ContactsReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes contacts: - { id: 1, nom: DURAND, prenom: Jean, email: jean.durand@domaine.ext } - { id: 2, nom: DUPONT, prenom: Pierre, email: pierre.dupont@domaine.ext } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_client_inactif] } /annonce-legale/api/externe/contact: post: tags: [Compte] summary: Contact — création d'un nouveau contact operationId: creerContact description: | Crée un contact associé à la clé API. - Si `mot_passe` est fourni, un accès au portail web est également créé. - Si l'email est déjà associé à un contact, ce contact est retourné. - S'il existe plusieurs contacts avec ce même email, une erreur `err_multiple_contact` est retournée. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ContactRequete' example: nom: DURAND prenom: Jean email: jean.durand@domaine.ext responses: '200': description: Contact (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/ContactReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/ContactReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: { resultat: succes, id: 1, nom: DURAND, prenom: Jean, email: jean.durand@domaine.ext } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_multiple_contact] } /annonce-legale/api/externe/pays: get: tags: [Référentiels] summary: Pays (codes ISO 3166 alpha-3) operationId: getPays responses: '200': description: Pays (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaysReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/PaysReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes pays: - { code: FRA, libelle: FRANCE } - { code: GBR, libelle: ROYAUME-UNI } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_cle_inconnue] } /annonce-legale/api/externe/departements: get: tags: [Référentiels] summary: Départements operationId: getDepartements description: Liste des départements. Corse-du-Sud `2A`, Haute-Corse `2B`. responses: '200': description: Départements (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/DepartementsReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/DepartementsReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes departements: - { code: "01", libelle: AIN, libelle_enrichi: Ain } erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_cle_inconnue] } /annonce-legale/api/externe/feuilles-styles: get: tags: [Référentiels] summary: Feuilles de styles — classes HTML disponibles et propriétés CSS operationId: getFeuillesStyles description: | Récupère les feuilles de styles du journal permettant de mettre en forme les annonces. - Types `paragraphe`, `filet`, `entete` : s'appliquent sur la balise `

` (et `


` pour `filet`). - Type `caractere` : s'applique via `` à l'intérieur d'un `

`. Le retour est un tableau `feuilles_styles` dont chaque élément porte un champ `classe`. parameters: - name: type in: query required: false description: Filtre sur le type de feuille de style. schema: $ref: '#/components/schemas/TypeFeuilleStyle' responses: '200': description: Feuilles de styles (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/FeuillesStylesReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/FeuillesStylesReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes feuilles_styles: - libelle: Titre classe: fs-titre definition_css: "color: #000; text-align: center; font-size: 1.8em; font-weight: bold; padding-bottom: 2px; padding-top: 0px; margin: 0px;" rang: 1 type: paragraphe - libelle: Texte centré classe: fs-texte_centre definition_css: "color: #000; text-align: center; font-size: 1.4em; font-weight: normal; padding-bottom: 4px; padding-top: 0px; margin-bottom: 0px;" rang: 2 type: paragraphe - libelle: Filet centre classe: fs-petit-filet definition_css: "border-color: #000; background-color: #000; height: 1px; line-height: 0px; width: 20%; margin-top: 10px !important; margin-bottom: 10px !important; margin-left: auto !important; margin-right: auto !important;" rang: 5 type: paragraphe erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_cle_inconnue] } /annonce-legale/api/externe/categories: get: tags: [Référentiels] summary: Catégories d'annonces et classes de style disponibles operationId: getCategories description: | Liste des catégories, avec pour chacune les classes HTML de feuilles de style disponibles et la classe par défaut. Les catégories `SUC_VAC` et `SUC_DES` sont réservées aux confrères habilités. responses: '200': description: Catégories (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/CategoriesReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/CategoriesReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes categories: - code: ADDITI libelle: ADDITIF classes_html: [fs-titre, fs-texte] classe_html_defaut: fs-texte - code: VNT_ENC libelle: VENTES AUX ENCHÈRES classes_html: [fs-ve_titre, fs-ve_texte] classe_html_defaut: fs-ve_texte erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_cle_inconnue] } /annonce-legale/api/externe/forfaits: get: tags: [Référentiels] summary: Forfaits et catégories associées operationId: getForfaits description: | Liste des forfaits (constitutions et modifications) avec, pour chacun, le code de la catégorie à laquelle il s'applique. Disponible depuis la v1.29. Le retour est un tableau `forfaits`. responses: '200': description: Forfaits (succès ou erreur) content: application/json: schema: oneOf: - $ref: '#/components/schemas/ForfaitsReponse' - $ref: '#/components/schemas/ReponseErreur' discriminator: propertyName: resultat mapping: succes: '#/components/schemas/ForfaitsReponse' erreur: '#/components/schemas/ReponseErreur' examples: succes: value: resultat: succes forfaits: - code: CONSTI_AUTRE libelle: Autre constitution categorie_code: CONSTI - code: MOD_ACT libelle: Mouvement d'activité categorie_code: MODIF erreur: description: Exemple illustratif — le code d'erreur présenté est plausible pour cet endpoint ; la liste complète figure dans le schéma CodeErreur. value: { resultat: erreur, erreurs: [err_cle_inconnue] } components: securitySchemes: Application: type: apiKey in: header name: Application description: Clé publique fournie par IDM Solutions. Timestamp: type: apiKey in: header name: Timestamp description: Entier Unix (secondes depuis le 01/01/1970). Écart maximum de 5 secondes avec l'heure de Paris. Signature: type: apiKey in: header name: Signature description: | Hexadécimal de `sha256("{cle_secrete}+{methode_http}+{chemin}+{body}+{timestamp}")`. Le chemin est pris **sans** paramètres d'URL. Voir la description générale de l'API. parameters: Reference: name: reference in: path required: true description: Référence interne de l'annonce au système illico (ex. `L2200001`) **ou** `numero_commande` fourni lors de l'appel à l'API Commande. schema: type: string example: L2200001 schemas: # ------------------------------------------------------------------ Enums Resultat: type: string description: Type du résultat. enum: [succes, erreur] CodeErreur: type: string description: | Codes d'erreur (annexe "Codes d'erreurs"). **Erreurs de contrôles** - `err_annonce_introuvable` : l'annonce est introuvable - `err_annonce_commandee` : l'annonce est déjà commandée (numéro de commande déjà enregistré) - `err_publication_introuvable` : la parution est introuvable - `err_bouclage_depasse` : le bouclage pour cette date de parution a été dépassé - `err_date_indisponible` : la date de parution n'est pas disponible - `err_client_inactif` : l'accès n'est pas finalisé - `err_forfait_inconnu` : le forfait n'existe pas - `err_categorie_inconnu` : la catégorie n'existe pas - `err_publication_non_habilite` : la publication n'est pas habilitée à diffuser dans le département souhaité - `err_mode_facturation_non_autorisee` : le mode de facturation choisi n'est pas disponible pour le client - `err_annonce_suspendue` : l'annonce est suspendue - `err_multiple_contact` : il existe plusieurs contacts avec cet email **Erreurs de champs manquants** : `err_{champ}_absent` — le paramètre `{champ}` est absent. **Erreurs de champs incorrects** : `err_{champ}_incorrect` — le paramètre `{champ}` est incorrect. **Erreurs d'environnement** - `err_internal_server` : erreur interne du serveur - `err_timestamp_controle` : écart de timestamp trop grand (> 5 s) - `err_signature_calculee` : la signature envoyée ne correspond pas à la signature calculée - `err_body_incorrect` : le body de la requête est incorrect - `err_cle_inconnue` : la clé envoyée ne correspond à aucune clé de l'API - `err_requetes_max` : nombre maximal de requêtes par minute atteint (300) - `err_application_absent` / `err_signature_absent` / `err_timestamp_absent` : header absent - `err_application_incorrect` / `err_signature_incorrect` : header incorrect enum: # Erreurs de contrôles - err_annonce_introuvable - err_annonce_commandee - err_publication_introuvable - err_bouclage_depasse - err_date_indisponible - err_client_inactif - err_forfait_inconnu - err_categorie_inconnu - err_publication_non_habilite - err_mode_facturation_non_autorisee - err_annonce_suspendue - err_multiple_contact # Erreurs de champs manquants - err_reference_absent - err_publication_absent - err_departement_absent - err_categorie_absent - err_texte_absent - err_forfait_absent - err_mode_facturation_absent - err_dossier_absent - err_facturation_absent - err_nom_raison_sociale_absent - err_adresse_absent - err_code_postal_absent - err_ville_absent - err_pays_absent - err_email_absent - err_nom_absent - err_prenom_absent - err_mot_passe_absent # Erreurs de champs incorrects - err_reference_incorrect - err_publication_incorrect - err_departement_incorrect - err_categorie_incorrect - err_texte_incorrect - err_forfait_incorrect - err_mode_facturation_incorrect - err_disposition_incorrect - err_date_parution_incorrect - err_sous_categorie_incorrect - err_data_incorrect - err_chaine_incorrect - err_quantite_incorrect - err_justificatifs_papiers_incorrect - err_justificatif_numerique_incorrect - err_numero_commande_incorrect - err_dossier_incorrect - err_contact_incorrect - err_facturation_incorrect - err_nom_raison_sociale_incorrect - err_prenom_nom_complement_incorrect - err_adresse_incorrect - err_adresse_complement_incorrect - err_code_postal_incorrect - err_ville_incorrect - err_pays_incorrect - err_email_incorrect - err_telephone_incorrect - err_nom_incorrect - err_prenom_incorrect - err_mot_passe_incorrect - err_mobile_incorrect # Erreurs d'environnements - err_internal_server - err_timestamp_controle - err_signature_calculee - err_body_incorrect - err_cle_inconnue - err_requetes_max - err_application_absent - err_signature_absent - err_timestamp_absent - err_application_incorrect - err_signature_incorrect CodeCategorie: type: string description: | Codes de catégorie (annexe "Catégories"). La liste à jour est disponible via `GET /categories`. | Catégorie | Code | Forfait obligatoire | |---|---|---| | ADDITIF | `ADDITI` | | | AUTRE ANNONCE | `AUTRE` | | | CHANGEMENT DE NOM PATRONYMIQUE | `CHG_PAT` | | | CHANGEMENT DE RÉGIME MATRIMONIAL | `CHG_REG` | | | CLÔTURE DE LIQUIDATION | `CLOTUR` | | | CONSTITUTION | `CONSTI` | **Oui** | | CONVOCATION | `CONVOC` | | | DISSOLUTION DE SOCIÉTÉ | `DISSOL` | | | FONDS DE COMMERCE | `FONDS` | | | FUSION | `FUSION` | | | LOCATION GÉRANCE | `LOC_GER` | | | MODIFICATION | `MODIF` | **Oui** | | POURSUITE ACTIVITÉ | `PRS_ACT` | | | RECTIFICATIF | `RECTIF` | | | TRANSMISSION UNIVERSELLE DE PATRIMOINE | `TUP` | | | SUCCESSION VACANTE (réservé confrères habilités) | `SUC_VAC` | | | SUCCESSION EN DÉSHÉRENCE (réservé confrères habilités) | `SUC_DES` | | enum: - ADDITI - AUTRE - CHG_PAT - CHG_REG - CLOTUR - CONSTI - CONVOC - DISSOL - FONDS - FUSION - LOC_GER - MODIF - PRS_ACT - RECTIF - TUP - SUC_VAC - SUC_DES CodeForfait: type: string description: | Forfaits (annexe "Forfaits"). Obligatoire pour les catégories `CONSTI` et `MODIF`. **Forfaits de constitution (`CONSTI`)** | Forme juridique | Valeur | |---|---| | EURL | `EURL` | | SA | `SA` | | SARL, SELARL | `SARL` | | SAS | `SAS` | | SASU | `SASU` | | EARL, SC, SCEA, SCP, SCPI | `SC` | | SCI, SCCV | `SCI` | | SNC | `SNC` | | Toute autre forme juridique | `CONSTI_AUTRE` | **Forfaits de modification (`MODIF`)** | Type de modification | Valeur | |---|---| | Autre modification / modifications multiples (caractère) | `MOD_AUTRE` | | Transfert du siège social | `MOD_TRS_SIE` | | Mouvement des dirigeants | `MOD_DIR` | | Nomination du commissaire aux comptes | `MOD_CAC_NOM` | | Cessation du commissaire aux comptes | `MOD_CAC_CES` | | Modification de la durée | `MOD_DUREE` | | Modification de la date de clôture des comptes | `MOD_DATE_CLOT` | | Modification de la date de début d'activité | `MOD_DATE_DEB` | | Reconstitution de l'actif net ou des capitaux propres | `MOD_REC_ACTIF` | | Modification de capital | `MOD_CAP` | | Modification de l'objet social | `MOD_OBJET` | | Mouvement d'activité | `MOD_ACT` | | Nomination d'un administrateur judiciaire | `MOD_JUD_NOM` | | Modification de la dénomination | `MOD_DENOM` | | Modification de la forme juridique | `MOD_FORME` | | Mouvement d'associés | `MOD_ASSO` | | Cession de parts sociales | `MOD_CESSION` | | Résiliation de bail | `MOD_RES_BAIL` | | Non dissolution | `MOD_NON_DISSOL` | La liste à jour est disponible via `GET /forfaits` (documenté depuis la v1.29). enum: # Constitution - EURL - SA - SARL - SAS - SASU - SC - SCI - SNC - CONSTI_AUTRE # Modification - MOD_AUTRE - MOD_TRS_SIE - MOD_DIR - MOD_CAC_NOM - MOD_CAC_CES - MOD_DUREE - MOD_DATE_CLOT - MOD_DATE_DEB - MOD_REC_ACTIF - MOD_CAP - MOD_OBJET - MOD_ACT - MOD_JUD_NOM - MOD_DENOM - MOD_FORME - MOD_ASSO - MOD_CESSION - MOD_RES_BAIL - MOD_NON_DISSOL DispositionEntete: type: string description: | Disposition de l'en-tête (annexe "Disposition en-tête"). - `carton_texte_sans_image` : texte sans image - `carton_image_sans_texte` : image sans texte - `carton_image_texte_droite` : image à gauche, texte à droite - `carton_image_texte_bas` : image en haut centrée, texte en bas enum: - carton_texte_sans_image - carton_image_sans_texte - carton_image_texte_droite - carton_image_texte_bas StatutAnnonce: type: string description: Statut de l'annonce. enum: [a-paraitre, parue, suspendue] ModeFacturation: type: string description: | Destinataire de la facture. - `prescripteur` : facturation au prescripteur - `annonceur` : facturation à l'annonceur (nécessite l'objet `facturation`) enum: [prescripteur, annonceur] TypeFeuilleStyle: type: string description: Niveau d'application d'une feuille de style. enum: [paragraphe, filet, entete, caractere] TypeDocument: type: string description: Type de document. enum: [attestation, justificatif, facture, avoir] TypeFacture: type: string description: Type de document de facturation. enum: [facture, avoir] # ------------------------------------------------------------------ Réponse d'erreur ReponseErreur: type: object description: Réponse retournée en cas d'erreur (`resultat` = `erreur`). required: [resultat, erreurs] properties: resultat: type: string enum: [erreur] erreurs: type: array description: Codes d'erreurs (cf. `CodeErreur`). items: $ref: '#/components/schemas/CodeErreur' # ------------------------------------------------------------------ Tarification LigneTarif: type: object description: Détail tarifaire d'un poste (annonce, justificatif, frais de port, remise). properties: quantite: type: integer description: Quantité d'éléments facturés. prix_unitaire: type: number format: double description: Prix d'un élément (HT). montant_ht: type: number format: double description: Montant HT du poste. taux_tva: type: number format: double description: Taux de TVA à appliquer au montant du poste (ex. `20`, `2.1`). Totaux: type: object properties: montant_ht: type: number format: double description: Montant hors taxe total. montant_tva: type: number format: double description: Montant total de TVA. montant_ttc: type: number format: double description: Montant TTC total. VentilationTva: type: object properties: taux: type: number format: double description: Taux de TVA. montant: type: number format: double description: Montant total de TVA au taux exprimé. Tarif: type: object description: Tarif détaillé d'une annonce (devis ou commande). Les postes `justificatif_papier`, `justificatif_numerique` et `frais_port` sont absents s'ils ne s'appliquent pas. properties: annonce: $ref: '#/components/schemas/LigneTarif' justificatif_papier: $ref: '#/components/schemas/LigneTarif' justificatif_numerique: $ref: '#/components/schemas/LigneTarif' frais_port: $ref: '#/components/schemas/LigneTarif' totaux: $ref: '#/components/schemas/Totaux' tva: type: array items: $ref: '#/components/schemas/VentilationTva' # ------------------------------------------------------------------ En-tête / facturation Entete: type: object description: En-tête (carton) de l'annonce, avec logo et/ou texte. properties: mime_type: type: string description: Format du logo. enum: [image/jpeg, image/png, application/pdf] data: type: string format: byte description: Chaîne base64 du logo. **Obligatoire si `mime_type` est présent.** disposition: $ref: '#/components/schemas/DispositionEntete' texte: type: string description: | Texte de l'en-tête au format HTML. Chaque paragraphe doit être encadré de `

` et `

` ; retours à la ligne forcés par `
`. Classes de type `entete` disponibles via `GET /feuilles-styles?type=entete` (généralement `fs-prescripteur_nom` rang 1 et `fs-prescripteur_adresse` rang 2 / défaut). example: '

CABINET DURAND

1 rue de la Paix
33000 BORDEAUX

' Facturation: type: object description: Coordonnées de facturation. Obligatoire si `mode_facturation` = `annonceur`. required: [nom_raison_sociale, adresse, code_postal, ville, pays] properties: nom_raison_sociale: type: string description: Nom ou raison sociale. prenom_nom_complement: type: string description: Prénom ou complément de nom. adresse: type: string adresse_complement: type: string description: Complément d'adresse. code_postal: type: string ville: type: string pays: type: string description: Code pays ISO 3166 alpha-3, fourni par `GET /pays`. example: FRA email: type: string format: email description: Email. Non obligatoire depuis la v1.27. telephone: type: string description: Numéro de téléphone. mobile: type: string description: Numéro de téléphone mobile. # ------------------------------------------------------------------ Devis DevisRequete: type: object required: [publication, departement, categorie, texte] properties: publication: type: integer description: Identifiant de la publication (cf. `GET /publications`). departement: type: string description: Département de parution (`2A` / `2B` pour la Corse). example: "33" date_parution: type: string format: date description: Date de parution souhaitée (`AAAA-MM-JJ`). Si absente, la prochaine date est proposée en tenant compte du délai de bouclage. categorie: $ref: '#/components/schemas/CodeCategorie' forfait: $ref: '#/components/schemas/CodeForfait' entete: $ref: '#/components/schemas/Entete' texte: type: string description: Texte de l'annonce au format HTML (`

` uniquement, `
` pour les retours forcés, classes `fs-*`). justificatifs_papiers: type: integer minimum: 0 description: Nombre de justificatifs papier souhaités, si la publication les propose. Défaut 0 si la publication propose le justificatif numérique, sinon 1. justificatif_numerique: type: boolean description: Demande la génération d'un justificatif numérique. DevisReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] date_parution: type: string format: date description: Date de parution retenue (`AAAA-MM-JJ`). Égale à la date demandée si le bouclage est respecté, sinon la prochaine date calculée. date_bouclage: type: string description: Date et heure de bouclage au format `AAAA-MM-JJ HH:MM:SS`. example: "2022-12-29 16:00:00" texte: type: string description: Texte de l'annonce composé après traitement (classes résolues). tarif: $ref: '#/components/schemas/Tarif' # ------------------------------------------------------------------ Commande CommandeRequete: type: object required: [publication, departement, categorie, dossier, texte, mode_facturation] properties: publication: type: integer description: Identifiant de la publication. departement: type: string description: Département de parution (`2A` / `2B` pour la Corse). example: "33" date_parution: type: string format: date description: Date de parution souhaitée (`AAAA-MM-JJ`). Si absente, la prochaine date est affectée en tenant compte du délai de bouclage. categorie: $ref: '#/components/schemas/CodeCategorie' forfait: $ref: '#/components/schemas/CodeForfait' contact: type: integer description: Identifiant du contact (cf. `GET /contacts`). Si absent, le contact par défaut du compte API est utilisé. numero_commande: type: string maxLength: 50 description: N° de commande unique de l'annonce dans la base du prescripteur. S'il est fourni, il peut remplacer la référence illico pour le suivi. example: COMMANDE001 dossier: type: string description: Référence du dossier du prescripteur. example: CONSTITUTION/IDM SOLUTIONS entete: $ref: '#/components/schemas/Entete' texte: type: string description: Texte de l'annonce au format HTML (`

` uniquement, `
` pour les retours forcés, classes `fs-*`). mode_facturation: $ref: '#/components/schemas/ModeFacturation' facturation: $ref: '#/components/schemas/Facturation' justificatifs_papiers: type: integer minimum: 0 description: Nombre de justificatifs papier souhaités, si la publication les propose. Défaut 0 si la publication propose le justificatif numérique, sinon 1. justificatif_numerique: type: boolean description: Demande la génération d'un justificatif numérique. envoi_justificatif: type: boolean default: false description: Demande l'envoi du justificatif numérique par email lorsqu'il est généré. largeur: type: number format: double description: Nombre total de colonnes sur lesquelles l'annonce sera publiée. Application dépendante du paramétrage du journal et de la clé API. largeur_texte: type: number format: double description: Largeur d'une colonne de texte, en nombre de colonnes journal. Application dépendante du paramétrage du journal et de la clé API. CommandeReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] reference: type: string description: Référence unique interne au système illico. example: L22EJ00001 numero_commande: type: string description: N° de commande du prescripteur. Présent s'il a été fourni à l'appel. date_parution: type: string format: date date_bouclage: type: string description: Date et heure de bouclage au format `AAAA-MM-JJ HH:MM:SS`. example: "2022-12-30 16:00:00" tarif: $ref: '#/components/schemas/Tarif' # ------------------------------------------------------------------ Annulation Document: type: object description: Document téléchargeable. `numero` est absent pour les justificatifs. required: [type, url] properties: type: $ref: '#/components/schemas/TypeDocument' numero: type: string description: Numéro de l'attestation, de la facture ou de l'avoir. url: type: string format: uri description: URL de téléchargement du document (PDF). AnnulationReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] reference: type: string description: Référence interne de l'annonce au système illico. numero_commande: type: string description: N° de commande du prescripteur. Présent s'il a été fourni à la commande. documents: type: array description: Facture et avoir générés. Absent si l'annonce n'avait pas été facturée avant l'annulation. items: allOf: - $ref: '#/components/schemas/Document' - type: object properties: type: $ref: '#/components/schemas/TypeFacture' # ------------------------------------------------------------------ Statuts ReferencesRequete: type: object required: [references] properties: references: type: array description: Références internes illico des annonces, ou numéros de commande fournis lors de l'appel à l'API Commande. items: type: string example: [L2200001, L2200145, L2200084] StatutAnnonceItem: type: object properties: reference: type: string description: Référence interne de l'annonce au système illico. numero_commande: type: string description: Présent s'il a été fourni à la commande. statut: $ref: '#/components/schemas/StatutAnnonce' motif: type: string description: Si l'annonce a été suspendue, un motif peut être fourni. StatutsLotReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] annonces: type: array items: $ref: '#/components/schemas/StatutAnnonceItem' StatutAnnonceReponse: allOf: - type: object required: [resultat] properties: resultat: type: string enum: [succes] - $ref: '#/components/schemas/StatutAnnonceItem' # ------------------------------------------------------------------ Factures LigneFacture: type: object description: Ligne de facture (une annonce facturée). properties: reference: type: string description: Référence de l'annonce facturée par la ligne. annonce: $ref: '#/components/schemas/LigneTarif' justificatif_papier: $ref: '#/components/schemas/LigneTarif' justificatif_numerique: $ref: '#/components/schemas/LigneTarif' frais_port: $ref: '#/components/schemas/LigneTarif' remises: type: array description: Remises appliquées (montants HT de remise). items: $ref: '#/components/schemas/LigneTarif' totaux: $ref: '#/components/schemas/Totaux' tva: type: array items: $ref: '#/components/schemas/VentilationTva' Facture: type: object description: | Facture ou avoir. Pour un avoir, les montants sont négatifs. Les montants sont des nombres réels. properties: type: $ref: '#/components/schemas/TypeFacture' numero: type: string description: Numéro de la facture ou de l'avoir. example: F22-00001 date_facture: type: string format: date date_echeance: type: string format: date description: Date d'échéance de la facture. montant_ht: type: number format: double description: Montant HT total de la facture (annonce + justificatifs + frais de port + autres majorations éventuelles). montant_ttc: type: number format: double description: Montant TTC de la facture. url: type: string format: uri description: URL de téléchargement du document (PDF). lignes: type: array items: $ref: '#/components/schemas/LigneFacture' FacturesLotReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] annonces: type: array items: type: object properties: reference: type: string numero_commande: type: string description: Présent s'il a été fourni à la commande. factures: type: array items: $ref: '#/components/schemas/Facture' FacturesAnnonceReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] reference: type: string numero_commande: type: string description: Présent s'il a été fourni à la commande. factures: type: array items: $ref: '#/components/schemas/Facture' # ------------------------------------------------------------------ Documents DocumentsLotReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] annonces: type: array items: type: object properties: reference: type: string numero_commande: type: string description: Présent s'il a été fourni à la commande. documents: type: array items: $ref: '#/components/schemas/Document' DocumentsAnnonceReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] reference: type: string numero_commande: type: string description: Présent s'il a été fourni à la commande. documents: type: array items: $ref: '#/components/schemas/Document' # ------------------------------------------------------------------ Publications Publication: type: object properties: id: type: integer description: Identifiant unique de la publication. departement: type: string description: Code du département d'habilitation de la publication. libelle: type: string periodicite: type: string description: Libellé de la périodicité (ex. `hebdomadaire`). type: type: string enum: [papier, web] entete: type: boolean description: En-tête autorisée. justificatif_papier: type: boolean description: Envoi des justificatifs au format papier. justificatif_numerique: type: boolean description: Envoi des justificatifs au format numérique (PDF). logo_web: type: object properties: mime_type: type: string enum: [image/jpeg, image/png] data: type: string format: byte description: Chaîne base64 du logo. PublicationsReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] publications: type: array description: Peut être vide s'il n'y a aucune publication dans ce département. items: $ref: '#/components/schemas/Publication' DatesParutionsReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] publications: type: array items: type: object properties: id: type: integer description: Identifiant de la publication. departement: type: string description: Code du département d'habilitation. dates: type: array items: type: object properties: date_parution: type: string format: date description: "`AAAA-MM-JJ`" date_bouclage: type: string description: Date et heure de bouclage réellement configurées, au format `AAAA-MM-JJ HH:MM:SS`. example: "2022-01-01 12:00" # ------------------------------------------------------------------ Compte ClientReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] numero_compte: type: string description: Numéro du compte client interne au système illico. raison_sociale: type: string nom_complement: type: string description: Complément de la raison sociale. adresse: type: string adresse_complement: type: string code_postal: type: string ville: type: string email: type: string format: email description: Email affecté au client. Peut différer de l'email associé au contact. mode_facturation: type: string description: Mode de facturation par défaut (`aucun` = pas de facturation par défaut). enum: [prescripteur, annonceur, aucun] entetes: type: array description: En-têtes enregistrées sur le client. items: type: object properties: mime_type: type: string enum: [image/jpeg, image/png, application/pdf] data: type: string format: byte description: Chaîne base64 du logo. Contact: type: object properties: id: type: integer description: Identifiant unique du contact. nom: type: string prenom: type: string email: type: string format: email ContactsReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] contacts: type: array items: $ref: '#/components/schemas/Contact' ContactRequete: type: object description: Tous les champs sont optionnels. Si l'email est déjà associé à un contact, celui-ci est renvoyé ; s'il existe plusieurs contacts avec cet email, une erreur `err_multiple_contact` est renvoyée. properties: nom: type: string prenom: type: string email: type: string format: email mot_passe: type: string format: password description: Mot de passe pour l'accès au portail web. Si fourni, un accès portail est également créé. ContactReponse: allOf: - type: object required: [resultat] properties: resultat: type: string enum: [succes] - $ref: '#/components/schemas/Contact' # ------------------------------------------------------------------ Référentiels PaysReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] pays: type: array items: type: object properties: code: type: string description: Code ISO 3166 alpha-3. example: FRA libelle: type: string example: FRANCE DepartementsReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] departements: type: array items: type: object properties: code: type: string description: Code unique du département (`2A` / `2B` pour la Corse). example: "01" libelle: type: string example: AIN libelle_enrichi: type: string example: Ain FeuilleStyle: type: object properties: libelle: type: string description: Libellé de la feuille de style. classe: type: string description: Classe HTML à utiliser (`class="..."`). example: fs-titre definition_css: type: string description: Définition CSS de la classe. rang: type: integer description: Rang de la feuille de style (en cas de classes multiples, le plus petit rang l'emporte). type: $ref: '#/components/schemas/TypeFeuilleStyle' FeuillesStylesReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] feuilles_styles: type: array items: $ref: '#/components/schemas/FeuilleStyle' Categorie: type: object properties: code: type: string description: Code de la catégorie (cf. `CodeCategorie`). L'API peut retourner des codes non listés dans l'annexe (ex. `VNT_ENC`). example: CONSTI libelle: type: string example: CONSTITUTION classes_html: type: array description: Classes HTML disponibles pour cette catégorie. items: type: string classe_html_defaut: type: string description: Classe appliquée par défaut si aucune classe (ou une classe incorrecte) n'est précisée. example: fs-texte CategoriesReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] categories: type: array items: $ref: '#/components/schemas/Categorie' Forfait: type: object properties: code: $ref: '#/components/schemas/CodeForfait' libelle: type: string description: Libellé du forfait. example: Autre constitution categorie_code: $ref: '#/components/schemas/CodeCategorie' ForfaitsReponse: type: object required: [resultat] properties: resultat: type: string enum: [succes] forfaits: type: array items: $ref: '#/components/schemas/Forfait'