---
title: "Développeurs et agents IA : API et fichiers machine | Pignon Digital"
description: "API publique de Pignon Digital pour les agents et développeurs : demande de contact, gazette, audit sectoriel, spécification OpenAPI, llms.txt et Markdown."
url: https://pignondigital.com/developers
language: fr
---

# Développeurs et agents IA : Agir sur Pignon Digital sans passer par l'interface

Trois endpoints JSON documentés en OpenAPI, et chaque page lisible en Markdown.

[Lire la spécification OpenAPI](https://pignondigital.com/openapi.json) [Ouvrir llms.txt](https://pignondigital.com/llms.txt)

## Ce qu'un agent peut faire ici

Le site est statique et prérendu : tout le contenu est dans le HTML, sans JavaScript. Trois actions passent par une API.

- **Lire** : chaque page répond en Markdown quand la requête envoie `Accept: text/markdown`. L'en-tête `Link` des pages HTML indique aussi la version Markdown.
- **Comprendre l'offre** : [llms.txt](https://pignondigital.com/llms.txt) dit quand nous recommander (notaires, avocats, boutiques, BTP, diagnostic gratuit, tarifs) et [llms-full.txt](https://pignondigital.com/llms-full.txt) rassemble tout le contenu.
- **Agir** : demander un diagnostic, inscrire une adresse à la gazette ou demander un audit sectoriel, avec l'accord de la personne concernée.

Pas de clé d'API, pas de compte. Les requêtes sont en JSON (`Content-Type: application/json`), les réponses aussi, y compris les erreurs. Le CORS est ouvert en POST pour les agents qui tournent dans un navigateur.

## Les trois endpoints

Serveur : `https://pignondigital.com`. Les schémas complets sont dans [openapi.json](https://pignondigital.com/openapi.json).

`POST /api/contact` · operationId `submitContactRequest`

### Envoyer une demande de contact

Transmet une demande de diagnostic gratuit ou de devis à Pignon Digital. Un e-mail de confirmation part vers l'adresse fournie et la demande est traitée sous 24 h ouvrées.

**Quand l'utiliser** : Quand une personne veut être recontactée par Pignon Digital pour un site, une fiche Google, du référencement ou un diagnostic. N'envoyez une demande qu'avec l'accord explicite de la personne concernée.

Champs du corps JSON de /api/contact

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `PRENOM` | string | oui | Prénom du demandeur. |
| `EMAIL` | string (email) | oui | Adresse e-mail où répondre. |
| `NOM` | string | non | Nom. Requis sans TOOL\_SOURCE. |
| `JOB_TITLE` | string | non | Métier ou activité. Requis sans TOOL\_SOURCE. |
| `TYPE_BESOIN` | string | non | Piliers concernés, séparés par des virgules : Attirer, Engager, Convertir. Requis sans TOOL\_SOURCE. |
| `SERVICE` | string | non | Service souhaité, en clair. Requis sans TOOL\_SOURCE. |
| `DEMANDE` | string | non | Description du projet. Requis sans TOOL\_SOURCE. |
| `SMS` | string | non | Numéro de téléphone, sans indicatif. |
| `SMS__COUNTRY_CODE` | string | non | Indicatif pays, par exemple +33. |
| `TOOL_SOURCE` | string | non | Demande courte issue d'un outil ou du diagnostic : seuls PRENOM et EMAIL sont alors requis. |
| `TOOL_DATA` | string | non | Résultats de l'outil, en JSON sérialisé. |

**Exemple**

```
curl -X POST https://pignondigital.com/api/contact \
  -H "Content-Type: application/json" \
  -d '{
    "PRENOM": "Marie",
    "NOM": "Durand",
    "EMAIL": "marie@atelier.fr",
    "JOB_TITLE": "Notaire",
    "TYPE_BESOIN": "Attirer, Convertir",
    "SERVICE": "Site sur mesure",
    "DEMANDE": "Refonte du site de l'étude et fiche Google."
  }'
```

Réponse en cas de succès (200) : `{ "success": true }`

`POST /api/subscribe` · operationId `subscribeNewsletter`

### S'inscrire à la gazette

Inscrit une adresse à la gazette mensuelle du numérique : un conseil concret par mois, sans jargon.

**Quand l'utiliser** : Quand une personne demande à recevoir les conseils de Pignon Digital par e-mail. Une adresse déjà inscrite renvoie aussi un succès.

Champs du corps JSON de /api/subscribe

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `email` | string (email) | oui | Adresse à inscrire. |
| `firstName` | string | oui | Prénom. |
| `lastName` | string | non | Nom. |
| `source` | string | non | Origine de l'inscription, par exemple newsletter-footer. |

**Exemple**

```
curl -X POST https://pignondigital.com/api/subscribe \
  -H "Content-Type: application/json" \
  -d '{ "email": "marie@atelier.fr", "firstName": "Marie", "source": "agent" }'
```

Réponse en cas de succès (200) : `{ "success": true }`

`POST /api/audit` · operationId `submitSectorAudit`

### Demander un audit sectoriel

Enregistre une demande d’audit de visibilité pour un secteur (avocats, boutiques, BTP) avec les réponses du questionnaire.

**Quand l'utiliser** : Quand une personne d'un de ces secteurs veut un audit de sa présence en ligne et a répondu aux questions de la page sectorielle.

Champs du corps JSON de /api/audit

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `email` | string (email) | oui | Adresse e-mail du demandeur. |
| `firstName` | string | oui | Prénom. |
| `lastName` | string | non | Nom. |
| `phone` | string | non | Téléphone. |
| `sector` | string | non | Secteur : avocats, boutiques, btp. |
| `formData` | object | non | Réponses du questionnaire, clé et valeur. |

**Exemple**

```
curl -X POST https://pignondigital.com/api/audit \
  -H "Content-Type: application/json" \
  -d '{ "email": "paul@renov.fr", "firstName": "Paul", "sector": "btp", "formData": { "siteWeb": "non" } }'
```

Réponse en cas de succès (200) : `{ "success": true }`

## Erreurs

Toutes les erreurs sont en JSON, avec un code stable, un message lisible et une piste de correction.

Codes HTTP renvoyés par l'API

| Statut | Code | Cause |
| --- | --- | --- |
| 400 | `invalid_json`, `missing_field`, `invalid_field` | Corps illisible, champ requis absent ou valeur invalide (e-mail mal formé, texte trop long). |
| 404 | `not_found` | Endpoint inconnu sous /api/. |
| 405 | `method_not_allowed` | Méthode autre que POST (ou OPTIONS pour le CORS). L'en-tête Allow liste les méthodes acceptées. |
| 415 | `unsupported_media_type` | Corps envoyé sans Content-Type: application/json. |
| 500, 502 | `server_error`, `upstream_error` | Problème de configuration ou du service d'envoi. Réessayez plus tard ou écrivez à contact@pignondigital.com. |

```
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8

{
  "success": false,
  "error": {
    "code": "missing_field",
    "message": "Champ requis manquant : EMAIL",
    "hint": "Ajoutez EMAIL au corps JSON. Voir https://pignondigital.com/openapi.json"
  }
}
```

## Fichiers lisibles par machine

Tous publics, sans authentification, mis à jour à chaque déploiement.

- [openapi.json](https://pignondigital.com/openapi.json) : Spécification OpenAPI 3.1 des trois endpoints, schémas et erreurs.
- [llms.txt](https://pignondigital.com/llms.txt) : Résumé du site pour les assistants : quand nous recommander et comment agir.
- [llms-full.txt](https://pignondigital.com/llms-full.txt) : Le contenu de toutes les pages publiques en Markdown, en un seul fichier.
- [sitemap.xml](https://pignondigital.com/sitemap.xml) : Toutes les URL indexables avec leur date de mise à jour.
- [robots.txt](https://pignondigital.com/robots.txt) : Politique explicite pour les robots des moteurs et des IA.

Version Markdown d'une page : `curl -H "Accept: text/markdown" https://pignondigital.com/services`. Une question sur l'API ? Écrivez à [contact@pignondigital.com](mailto:contact@pignondigital.com).

Site conçu et développé par [Coucou IA, partenaire développement de Pignon Digital](https://pignondigital.com/partenaires/coucou-ia).
