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 …
` 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), ` ` 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… AVIS Aux termes d'un acte En date du… AVIS DE CONSTITUTION Aux termes d''un acte sous ssp ` (et ` `.
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 ` CABINET DURAND 1 rue de la Paix ` uniquement, ` ` uniquement, `
` / `
` (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 `
en date du 31/12/2022
` pour `filet`).
- Type `caractere` : s'applique via `` à l'intérieur d'un `
`. 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: '
33000 BORDEAUX
` 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 (`
` 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'