API
Publier dans le flux en direct
Les outils maison d'Apsov (audit, ardoise, studio, refonte, usine à maquettes) poussent leurs événements ici. Un événement apparaît aussitôt sur l'accueil, dans le flux RSS et dans GET /api/evenements. Jamais de donnée personnelle : pas d'adresse e-mail, pas de nom ni de site de client.
Authentification
Jeton partagé, en-tête Authorization: Bearer …. Sans jeton côté serveur : 503. Jeton absent ou faux : 401.
POST /api/evenements
| Champ | Obligatoire | Format | Rôle |
|---|---|---|---|
type | oui | [a-z][a-z0-9_]{1,29} | debut, etape, fin, outil, ou un type propre à l’outil |
label | oui, sauf compteurs | 1 à 140 caractères, sans @ | phrase affichée telle quelle |
slug | non | [a-z0-9-]{1,40} | maquette concernée ou nom de l’outil |
at | non | ISO 8601 avec fuseau | horodatage réel, défaut : réception |
ref | non | [A-Za-z0-9:_.-]{1,80} | clé d’idempotence : même ref = mise à jour |
meta | non | objet, 10 clés au plus | détails libres, texte (200 car., sans @), nombre ou booléen |
Réponses : 201 nouvel événement, 200 mis à jour (même ref), 422 corps invalide, 400 JSON illisible.
Compteurs des outils maison
Quatre types sont réservés aux outils. Le serveur fixe le libellé : l'outil n'envoie que le type et, au besoin, meta.quantite (entier de 1 à 1000). Tout autre champ est refusé, aucun texte libre ne passe. Chaque appel incrémente le compteur « En ce moment chez Apsov » de l'accueil.
| Outil | Quand | type |
|---|---|---|
| refonte.apsov.com | Refonte fabriquée | refonte_fabriquee |
| audit.apsov.com | Audit lancé | audit_lance |
| ardoise.apsov.com | Ardoise publiée | ardoise_publiee |
| studio.apsov.com | Pièce 3D déposée | piece_deposee |
fetch(`${process.env.DIRECT_URL}/api/evenements`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.DIRECT_EVENEMENTS_TOKEN}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ type: 'audit_lance' }),
signal: AbortSignal.timeout(3000),
}).catch(() => undefined);Chronomètre en direct
Un type: "debut" sans fin postérieure pour le même slug, reçu depuis moins de six heures, fait tourner le chronomètre de l'accueil à partir de at. Un type: "fin" l'arrête.
Exemple
curl -X POST https://direct.apsov.com/api/evenements \
-H "Authorization: Bearer $EVENEMENTS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"debut","slug":"cedre","label":"Brief reçu : Menuiserie du Cèdre","ref":"cedre:debut"}'GET /api/evenements
Public. ?limit=50 (100 au plus), ?avant=<ISO> pour paginer vers le passé.
GET /api/flux
Server-Sent Events, public : message bonjour à la connexion, puis un message evenement par enregistrement, battement toutes les 25 s.
POST /api/sync
Même jeton. Relance la lecture du dépôt de l'usine sans attendre la passe des dix minutes.
Référence complète : docs/api-evenements.md dans le dépôt du site.