Ce que l’écosystème INO a gagné, du plus récent au plus ancien. Seules les évolutions qui touchent une surface publique — un script embarquable, une API, une page hébergée — figurent ici : c’est ce journal qu’un intégrateur relit avant de mettre à jour son site.
Nouveau. Une facture émise par l’une de nos entités s’ouvre désormais à l’adresse /f/{jeton}, transmise par email. Rien à intégrer : c’est un lien qu’on reçoit.
/f/{jeton}
Lecture seule. Contrairement à un devis, une facture ne se décide pas. La page affiche le document, ses règlements déjà reçus, son reste dû, et les instructions d’encaissement de l’entité qui facture.
Le lien est stable. Il ne change pas d’un envoi à l’autre, ni après une relance : un lien de facture finit chez un comptable, dans un email transféré, dans un dossier. Il peut être révoqué explicitement, et l’ancien cesse alors de fonctionner.
Le document est figé. Les montants, le taux de change, la mention fiscale et l’échéance sont ceux du jour de l’émission. Relue dans deux ans, la page affichera exactement le même document.
Nouveau. Deux surfaces machine deviennent disponibles pour les applications tierces.
Les battements (POST /api/inowatch/beat/{slug}) : une tâche prouve qu’elle a tourné, par une ligne de curl. C’est le silence qui alerte, pas l’erreur — une tâche morte n’émet aucun message, elle disparaît. La clé de battement n’autorise qu’une chose : dire « j’ai tourné ». C’est ce qui la rend acceptable dans une URL, pour les panneaux de cron qui n’offrent qu’un champ « URL à appeler ».
POST /api/inowatch/beat/{slug}
curl
Les pages de statut publiques (/status/{slug}) : un lien à donner à un client, rien à intégrer. Disponibilité, latence, interruptions récentes.
/status/{slug}
Guides : brancher une tâche, cron, Docker, Laravel, référence de l’API.
Nouveau. Un formulaire d’inscription à poser sur n’importe quel site, avec sa propre clé de marque et son contrôle d’origine.
inocampagne.js
data-inocampagne-form
GET /ping
GET /config
POST /subscribe
La mention de consentement est servie par CONTROL, pas laissée à l’intégrateur : c’est elle qui rend l’opt-in défendable.
POST /subscribe répond 202 dans tous les cas — adresse connue, inconnue, désinscrite ou soumission de robot. Sans cela, un formulaire public devient un oracle sur notre base de profils.
202
Guides : le formulaire en 5 minutes, HTML, WordPress, Next.js, référence de l’API.
/news
Nouveau. Inscription, confirmation et désinscription brandées par marque, hébergées par CONTROL. Rien à intégrer : ce sont des liens.
La désinscription en un clic est présente dans chaque email, conformément aux exigences des messageries.
Nouveau. Trois surfaces publiques s’ajoutent au widget de contact.
Le mur d’avis embarquable (inodesk-reviews.js) : un fichier séparé du widget, pour qu’un site vitrine qui ne veut qu’un badge de note n’ait pas à télécharger le panneau de contact complet. Le balisage schema.org qui fait apparaître les étoiles dans les résultats de recherche est documenté.
inodesk-reviews.js
Le suivi de commande (POST /api/inodesk/order-lookup) — avec un débit volontairement bas et un plancher de temps de réponse : une recherche qui aboutit et une qui échoue prennent le même temps.
POST /api/inodesk/order-lookup
Guides : avis clients et référencement, référence de l’API.
Nouveau. Le widget de relation client et son API.
inodesk.js
data-inodesk-form
/care/…
ping
config
submissions
tickets
tracking
Le widget échoue toujours en silence : pas de clé, pas de réseau, domaine non déclaré — la page du client continue de fonctionner.
POST /tracking
Chaque formulaire vit dans son propre shadow DOM : le thème du site ne peut pas le déformer, et le nôtre ne peut pas fuir chez lui.
Guides : démarrage en 5 minutes, HTML, WordPress, Next.js, Laravel.
Nouveau. Rien à installer côté site : six métadonnées à poser sur la commande au moment du paiement, pour que Meta reconnaisse l’acheteur.
Guide : les métas à poser sur la commande.
Nouveau. La mesure de conversion s’ajoute à la mesure d’audience.
POST /api/inotrack/funnel : un franchissement d’étape. Contrairement à /collect, les erreurs y sont explicites — une étape mal nommée doit se voir pendant l’intégration, pas une semaine plus tard devant un tunnel vide.
POST /api/inotrack/funnel
/collect
POST /api/inotrack/order-status : le statut d’une commande, en lots de 200. Clé secrète obligatoire — ce canal décide du taux de livraison affiché.
POST /api/inotrack/order-status
Guides : Next.js, guide complet, Laravel, référence de l’API.
Nouveau. inotrack.js, la mesure d’audience de n’importe quel site.
inotrack.js
Une balise, un attribut data-site, et la navigation SPA est comptée (le traqueur intercepte history.pushState).
data-site
history.pushState
data-inotrack
Transport en text/plain avec la clé en ?k= : une requête simple au sens CORS, donc sans requête préliminaire. Une page vue coûte un aller-retour au lieu de deux.
text/plain
?k=
Guide : brancher un site en 5 minutes.
Changé. Le dépôt accepte, en plus des bases, des archives de chemins (uploads/, .env, dossiers de configuration). Champ kind : database (défaut) ou files.
uploads/
.env
kind
database
files
db_name
Attention. La rotation (quotidiennes / hebdomadaires / mensuelles conservées) et la supervision s’appliquent par base, pas par application.
Guide : déposer ses sauvegardes.
Nouveau. POST /api/inobackup/upload et GET /api/inobackup/ping, authentifiés par clé CTRLBK_….
POST /api/inobackup/upload
GET /api/inobackup/ping
CTRLBK_…
Le principe : dump → gzip → sha256 → POST authentifié. CONTROL conserve la sauvegarde en double — son propre disque et un stockage objet hors-site —, applique la rétention et alerte par email si une sauvegarde attendue n’arrive pas.
Deux intégrations livrées : un script bash pour n’importe quel serveur Linux, et un package Laravel (inovertix/control-backup).
inovertix/control-backup
Guides : déposer ses sauvegardes, package Laravel.
Nouveau. La première surface publique de l’écosystème.
POST /api/v1/emails
POST /api/v1/emails/batch
inv_…
List-Unsubscribe
Format d’erreur { "statusCode", "name", "message" } — celui que tous les modules suivants ont repris.
{ "statusCode", "name", "message" }
Guide : envoyer un email par l’API.