Cette page rassemble les réponses JSON d'exemple, les appels curl et les tableaux de champs de chaque route. Les paramètres, les codes d'erreur et le détail du comportement de chaque route sont dans la référence de l'API.
Toutes les routes sont en GET. Les réponses sont en application/json, jamais mises en cache par un intermédiaire (Cache-Control: private, no-store). Dans les exemples, le début des adresses de fiches du site (champs liens) est abrégé en https://… : la vraie réponse contient l'adresse complète de la fiche sur le site PublikConnect.
GET /avis
curl -H "X-API-Key: $PK_API_KEY" \
"https://publikconnect.fr/api/v1/avis?q=voirie&departement=69&type_marche=travaux&per_page=1"{
"data": [
{
"id": "6f1c2a52-8d0e-4b8c-9a55-2d6f6a1b7c10",
"source": "boamp",
"titre": "Travaux de réfection de voirie, secteur nord",
"acheteur": { "nom": "Commune d'Exemple", "siret": "21690123400012", "departement": "69" },
"date_publication": "2026-10-02T00:00:00+00:00",
"date_limite": "2026-11-14T10:00:00+00:00",
"statut": "ouvert",
"cpv": ["45233140"],
"type_marche": "Travaux",
"procedure": "MAPA",
"budget": 180000,
"description": "Réfection des chaussées et trottoirs de six rues du secteur nord…",
"lien_source": "https://www.boamp.fr/avis/detail/26-000000",
"licence": "Licence Ouverte 2.0",
"mention": "Source : BOAMP, DILA",
"mis_a_jour": "2026-10-03T06:12:44+00:00",
"publie_aussi_sur": [{ "source": "marchesonline", "lien": "https://www.marchesonline.com/..." }],
"origines": { "budget": { "origine": "jumeau", "source": "marchesonline" } },
"liens": { "acheteur": "https://…/acheteurs/21690123400012?src=api" }
}
],
"meta": { "page": 1, "per_page": 1, "total": 37, "total_exact": true }
}En mode curseur, la méta est { "per_page": 50, "curseur_suivant": "…", "total": 48210, "synchronise_jusqu_a": "2026-10-08T09:50:00.000Z" } : curseur_suivant vaut null sur la dernière page, total n'est donné que sur la première, et synchronise_jusqu_a est la valeur à repasser dans updated_since.
Complétude
Les quatre champs de complétude de chaque avis (la règle de calcul est décrite dans la référence de GET /avis) :
| Champ | Valeur |
|---|---|
completude | Entier de 0 à 100 : 100 moins 10 points par champ absent. |
completude_version | 1. Elle changera si la règle change. |
champs_manquants | Noms des champs absents, tels qu'ils figurent ci-dessus (liste vide si l'avis est complet). |
nb_lots | Nombre de lots déclarés, null si inconnu. |
GET /avis/{id}
Champs ajoutés à ceux d'un élément de GET /avis :
| Champ | Valeur |
|---|---|
lots | Liste, dans l'ordre des numéros : { numero, description, budget, cpv[] }. Vide si aucun lot n'est déclaré. |
criteres | { selection, attribution } : objets JSON libres, rendus tels que la base les porte (selection : critères de sélection des candidatures ; attribution : critères d'attribution et leur pondération), ou null. |
duree_mois | Durée du marché en mois, ou null. |
lieu_execution | { departements[], code_nuts } : départements d'exécution (codes comme acheteur.departement) et code NUTS, ou null. |
date_debut_prestation | AAAA-MM-JJ ou null. |
forme_prix | Forme du prix (ferme, revisable, ferme_actualisable, autre) ou null. |
url_profil_acheteur | Adresse http(s) du profil acheteur, sinon null. |
renseignements_complementaires | Texte ou null. |
capacites | { economique, technique, exercice } : capacités exigées des candidats, texte ou null. |
curl -H "X-API-Key: $PK_API_KEY" \
https://publikconnect.fr/api/v1/avis/6f1c2a52-8d0e-4b8c-9a55-2d6f6a1b7c10{
"data": {
"id": "6f1c2a52-8d0e-4b8c-9a55-2d6f6a1b7c10",
"source": "boamp",
"titre": "Travaux de réfection de voirie, secteur nord",
"acheteur": { "nom": "Commune d'Exemple", "siret": "21690123400012", "departement": "69" },
"date_publication": "2026-10-02T00:00:00+00:00",
"date_limite": "2026-11-14T10:00:00+00:00",
"statut": "ouvert",
"cpv": ["45233140"],
"type_marche": "Travaux",
"procedure": "MAPA",
"budget": 180000,
"description": "Réfection des chaussées et trottoirs de six rues du secteur nord…",
"lien_source": "https://www.boamp.fr/avis/detail/26-000000",
"licence": "Licence Ouverte 2.0",
"mention": "Source : BOAMP, DILA",
"mis_a_jour": "2026-10-03T06:12:44+00:00",
"version": "2026-10-03T06:12:44.512003Z",
"completude": 90,
"completude_version": 1,
"champs_manquants": ["nb_lots"],
"nb_lots": null,
"publie_aussi_sur": [],
"origines": {},
"liens": { "acheteur": "https://…/acheteurs/21690123400012?src=api" },
"lots": [],
"criteres": { "selection": null, "attribution": { "prix": 60, "valeur technique": 40 } },
"duree_mois": 24,
"lieu_execution": { "departements": ["69"], "code_nuts": "FRK26" },
"date_debut_prestation": "2027-01-15",
"forme_prix": "ferme",
"url_profil_acheteur": "https://www.exemple-marches.fr/profil",
"renseignements_complementaires": null,
"capacites": { "economique": null, "technique": null, "exercice": null }
}
}GET /opportunites
curl -H "X-API-Key: $PK_API_KEY" \
"https://publikconnect.fr/api/v1/opportunites?score_min=60&per_page=1"La réponse a la même enveloppe { "data": [...], "meta": {...} } et la même forme d'avis que /avis (complétude, version, publie_aussi_sur et origines compris). Les avis d'une source non servie sont écartés de la page : meta.total peut alors dépasser le nombre d'avis renvoyés. Chaque élément porte en plus :
| Champ | Sens |
|---|---|
score | Score de pertinence du profil, 0 à 100. |
raisons | Pourquoi ce score ; les clés possibles sont distance, metier, budget et mode. |
verdict | Verdict du juge métier sur cet avis pour ce profil : { "valeur": "oui" | "incertain" | "non", "raison": "…" ou null }, ou null si l'avis n'a jamais été jugé. |
statut_utilisateur | Statut posé par l'utilisateur dans l'application (une des neuf valeurs ci-dessus). Lecture seule : l'API n'écrit aucun statut. |
vu_le | Date de première consultation par l'utilisateur, ou null. |
{
"id": "6f1c2a52-8d0e-4b8c-9a55-2d6f6a1b7c10",
"score": 82,
"raisons": { "metier": "Votre activité de signalisation correspond au CPV 45233140", "distance": "À 24 km de votre établissement" },
"verdict": { "valeur": "incertain", "raison": "Objet du marché peu précis" },
"statut_utilisateur": "viewed",
"vu_le": "2026-10-07T09:12:00+00:00"
}(Seuls les champs propres au fil sont montrés ici, en plus des champs de /avis.)
GET /prestataires
curl -H "X-API-Key: $PK_API_KEY" \
"https://publikconnect.fr/api/v1/prestataires?q=voirie&departement=69&per_page=1"{
"data": [
{
"slug": "exemple-voirie-12345678901234",
"nom": "EXEMPLE VOIRIE",
"siret": "12345678901234",
"siren": "123456789",
"taille": "PME",
"nb_contrats": 18,
"montant_median": 95000,
"cpv_principal": "45233140",
"nb_etablissements": 2,
"liens": { "fiche": "https://…/prestataires/exemple-voirie-12345678901234?src=api" }
}
],
"meta": { "page": 1, "per_page": 1, "total": 1, "total_exact": true }
}GET /prestataires/{slug}
curl -H "X-API-Key: $PK_API_KEY" \
https://publikconnect.fr/api/v1/prestataires/exemple-voirie-12345678901234{
"data": {
"slug": "exemple-voirie-12345678901234",
"nom": "EXEMPLE VOIRIE",
"siret": "12345678901234",
"siren": "123456789",
"type": "decp",
"statistiques": {
"total_marches": 18,
"montant_total": 2450000,
"montant_median": 95000,
"croissance_12m": 12.5,
"dernier_marche": "2026-09-12",
"cpv_principaux": [{ "code": "45233140", "nombre": 11 }],
"departements": [{ "code": "69", "nombre": 14 }, { "code": "01", "nombre": 4 }],
"co_traitants": [{ "siret": "98765432109876", "nom": "EXEMPLE SIGNALISATION", "marches_communs": 3 }]
},
"derniers_marches": [
{
"objet": "Réfection de voirie communale",
"montant": 120000,
"acheteur": "COMMUNE D'EXEMPLE",
"date_notification": "2026-09-12",
"procedure": "Procédure adaptée"
}
],
"principaux_acheteurs": [
{ "siret": "21690123400019", "nom": "COMMUNE D'EXEMPLE", "nb_contrats": 6, "montant_total": 640000 }
],
"contrats_a_echeance": [
{
"uid": "exemple-uid-1",
"objet": "Entretien de la voirie communale",
"acheteur": { "siret": "21690123400019", "nom": "COMMUNE D'EXEMPLE" },
"date_notification": "2025-12-01",
"duree_mois": 12,
"fin_estimee": "2026-12-01",
"estimation": true
}
]
}
}GET /acheteurs/{siret}
Champs de la réponse :
| Champ | Valeur |
|---|---|
siret, siren, nom | Identité de la fiche rendue. |
type | Catégorie d'organisme : Commune, EPCI / Métropole, Département, Région, État, Établissement public, Autre organisme ou Organisme public. |
departement, ville | Code de département officiel (comme acheteur.departement d'un avis) et ville, null si inconnus. |
statistiques | Historique de marchés (données essentielles de la commande publique) : nb_contrats, montant_total, montant_median, duree_moyenne_mois, part_pme et nb_offres_moyen (sur les 24 derniers mois), procedures et cpv_principaux ([{ procedure | code, nombre }], 5 au plus, les plus fréquents), croissance_12m (variation du montant en pourcentage) et dernier_contrat (date). Chaque mesure vaut null quand elle n'est pas calculable. statistiques vaut null quand l'acheteur n'a pas d'historique : c'est le cas d'environ un tiers des acheteurs. |
principaux_titulaires | 10 au plus, par nombre de contrats : { siret, nom, nb_contrats }. Les titulaires non diffusibles (RGPD) sont écartés. siret vaut null s'il n'est pas connu. |
avis_ouverts | Nombre d'avis ouverts de l'acheteur dans les sources servies à votre clé, sans doublons ni avis d'attribution. |
liens.fiche | La fiche publique du site, https://…/acheteurs/<siret>?src=api. |
curl -H "X-API-Key: $PK_API_KEY" \
https://publikconnect.fr/api/v1/acheteurs/21380185500015{
"data": {
"siret": "21380185500015",
"siren": "213801855",
"nom": "COMMUNE D'EXEMPLE",
"type": "Commune",
"departement": "38",
"ville": "Exemple",
"statistiques": {
"nb_contrats": 42,
"montant_total": 1250000,
"montant_median": 18000,
"duree_moyenne_mois": 14.5,
"part_pme": 61.2,
"nb_offres_moyen": 3.4,
"procedures": [{ "procedure": "Procédure adaptée", "nombre": 30 }, { "procedure": "Appel d'offres ouvert", "nombre": 12 }],
"cpv_principaux": [{ "code": "45233140", "nombre": 20 }],
"croissance_12m": -4.5,
"dernier_contrat": "2026-09-12"
},
"principaux_titulaires": [{ "siret": "12345678901234", "nom": "EXEMPLE VOIRIE", "nb_contrats": 7 }],
"avis_ouverts": 3,
"liens": { "fiche": "https://…/acheteurs/21380185500015?src=api" }
}
}GET /attributions
curl -H "X-API-Key: $PK_API_KEY" \
"https://publikconnect.fr/api/v1/attributions?acheteur_siret=21380185500015&limite=2"GET /contrats
curl -H "X-API-Key: $PK_API_KEY" \
"https://publikconnect.fr/api/v1/contrats?titulaire_siren=911111111&q=voirie&limite=2"{
"data": [
{
"uid": "2026-1234-00",
"objet": "Travaux de voirie",
"acheteur": { "siret": "21380185500015", "nom": "COMMUNE D'EXEMPLE", "departement": "38" },
"titulaire": { "siret": "91111111100011", "nom": "EXEMPLE VOIRIE", "departement": "69", "categorie": "PME" },
"non_diffusible": false,
"montant": 125000.5,
"cpv": "45233140",
"nature": "Marché",
"procedure": "Procédure adaptée",
"date_notification": "2026-09-15",
"duree_mois": 12,
"fin_estimee": { "date": "2027-09-15", "estimation": true },
"lieu_execution": "38185",
"offres_recues": 3,
"forme_prix": "Ferme",
"sous_traitance_declaree": false,
"considerations": { "sociales": null, "environnementales": null },
"marche_innovant": false
}
],
"meta": { "limite": 2, "curseur_suivant": "eyJ2IjoiMjAyNi0wOS0xNVQwMDowMDowMC4wMDAwMDBaIiwi…", "total": 14 }
}GET /departements
curl -H "X-API-Key: $PK_API_KEY" https://publikconnect.fr/api/v1/departements{
"data": [
{ "code": "01", "nom": "Ain", "avis_ouverts": 41 },
{ "code": "02", "nom": "Aisne", "avis_ouverts": 23 }
]
}GET /sources
Champs de chaque source :
| Champ | Valeur |
|---|---|
code, libelle | Code publié (celui de avis[].source et du paramètre source) et nom de la source. |
categorie | officielle, plateforme_acheteurs ou agregateur. |
licence, mention | Licence de la source et mention à afficher. |
actif | false : source coupée. Elle reste listée, ses avis ne sont plus servis. |
rediffusable | La licence autorise la rediffusion. Une clé d'usage rediffusion ne voit que ces sources. |
derniere_ingestion | Date ISO 8601 du dernier avis ingéré, null si la source n'a aucun avis. |
avis_ouverts | Avis ouverts servis, doublons exclus. |
completude_moyenne | Complétude moyenne (0 à 100) des avis ouverts, calculée sur les champs publiés par la source elle-même (sans reprise des doublons) ; null sans avis ouvert. |
curl -H "X-API-Key: $PK_API_KEY" https://publikconnect.fr/api/v1/sources{
"data": [
{
"code": "boamp",
"libelle": "BOAMP",
"categorie": "officielle",
"licence": "Licence Ouverte 2.0",
"mention": "Source : BOAMP, DILA",
"actif": true,
"rediffusable": true,
"derniere_ingestion": "2026-10-08T07:30:00.123Z",
"avis_ouverts": 1200,
"completude_moyenne": 82
}
]
}GET /moi
curl -H "X-API-Key: $PK_API_KEY" https://publikconnect.fr/api/v1/moi{
"data": {
"cle": {
"prefixe": "pk_live_AbCd1234",
"nom": "Cabinet X",
"perimetres": ["avis:read", "opportunites:read"],
"usage": "interne",
"creee_le": "2026-10-01T09:30:00.000Z"
},
"plan": "pro",
"quota": {
"general": { "limite": 50000, "consomme": 1200, "restant": 48800, "reinitialise_le": "2026-10-09T00:00:00.000Z" },
"decp": { "limite": 2000, "consomme": 0, "restant": 2000, "reinitialise_le": "2026-10-09T00:00:00.000Z" }
},
"cles_actives": 2,
"cles_max": 5
}
}GET /sante
curl https://publikconnect.fr/api/v1/sante{
"data": {
"statut": "ok",
"base": "ok",
"derniere_ingestion": "2026-10-08T05:12:44.000Z",
"sources_actives": 18,
"synchronisation": { "derniere_passe": "2026-10-08T05:20:03.000Z", "lignes_reparees": 0 },
"version_api": "1"
}
}Champs de la réponse :
| Champ | Sens |
|---|---|
statut | ok, ou degrade : la base ne répond pas, l'API est coupée, aucune ingestion n'est connue, la dernière date de plus de 36 heures, la dernière passe de synchronisation date de plus de 3 heures, ou les deux dernières passes ont chacune dû réparer des lignes (le déclencheur manque des écritures). |
base | ok ou ko (injoignable, ou API coupée). |
derniere_ingestion | Date du dernier avis ingéré (ISO 8601), null si inconnue. |
sources_actives | Nombre de sources du registre actuellement servies. |
synchronisation | derniere_passe : date de la dernière passe horaire qui tient à jour les versions des avis (ISO 8601), null si elle n'a jamais tourné (cela ne dégrade pas statut à lui seul) ; lignes_reparees : lignes corrigées par cette passe. |
version_api | Version de l'API : "1". |
GET /openapi.json
curl https://publikconnect.fr/api/v1/openapi.json{ "openapi": "3.1.0", "info": { "title": "API publique PublikConnect", "version": "1.0.0-beta" }, "paths": { "…": "…" } }Demander une clé
Avoir un compte Pro
La clé est réservée aux comptes au plan Pro.
Écrire au support
Nous vérifions votre compte Pro puis vous répondons par e-mail avec votre clé.