Pajemploi sans clicodrome
Un particulier qui emploie une garde d’enfants à domicile déclare son salaire chaque mois sur un téléservice de l’Urssaf. La même déclaration existe en API. Nous avons écrit le client, puis nous l’avons exposé aux agents conversationnels.
Quinze champs, douze fois par an
Le formulaire compte une quinzaine de champs. La plupart ne varient pas d’un mois sur l’autre : les heures d’un contrat mensualisé, le salaire net, l’enfant rattaché. L’accès demande une authentification à deux facteurs par courriel, et l’application web se fige au bout de quelques minutes. La saisie elle-même prend cinq minutes.
Le téléservice est conçu pour une visite occasionnelle. La déclaration revient douze fois par an, à date fixe. L’Urssaf publie par ailleurs une API gratuite qui couvre exactement ce besoin, appelée Tierce Déclaration Pajemploi.
Cinq mois et trois attestations
L’API n’est pas ouverte aux particuliers. Le dossier de référencement demande un extrait K ou Kbis de la personne morale, une attestation de régularité fiscale et une attestation de compte à jour des cotisations sociales. Le contractant devient tiers déclarant au sens de l’article L133-11 du code de la sécurité sociale, et déclare pour le compte d’employeurs qui lui ont donné mandat.
- Souscription déposée
- 19 février 2026, sur le portail des API de l’Urssaf.
- Accès au bac à sable
- 28 mai 2026, après remise des pièces et signature de la licence.
- Accès en production
- 29 juillet 2026, après envoi du récapitulatif des tests.
Cinq mois séparent la demande de la mise en production, dont la plus grande part en attente de traitement.
Six pièges que la spécification ne dit pas
La spécification n’est pas publique. Elle est remise aux partenaires une fois le dossier accepté. Voici ce qui nous a retenus, dans l’ordre où les difficultés se présentent.
Le préfixe de routage. La passerelle route chaque API par un chemin qui ne figure ni dans les identifiants, ni dans les courriels d’accès, ni dans la découverte OpenID. Nous avons essayé environ deux cent cinquante variantes avant de recevoir la spécification.
Deux formes de corps pour les mêmes champs. L’estimation les attend à la racine, la déclaration sous un objet parent. Une déclaration à plat laisse cet objet nul côté serveur et rend une erreur 500 sans détail.
Un champ facultatif au schéma, obligatoire en pratique. Une déclaration sans enfant rattaché rend 500, avec un enfant elle rend 200. Le complément de mode de garde se calcule par enfant, ce qui explique la règle sans qu’elle soit écrite.
Les erreurs métier arrivent dans un tableau JSON. Un client qui n’attend qu’un objet affiche un 400 sans code ni message, alors que le serveur a nommé le problème.
La fenêtre déclarative ouvre le 25 du mois d’emploi. Avant cette date, la déclaration est rejetée. Après, il n’y a pas de date butoir.
Le mandat conditionne tout et ne se lit pas. Son enregistrement rend 200 avec un corps vide, et aucun point d’accès ne permet de vérifier qu’il existe. Il faut appeler autre chose et observer le résultat.
Chacun de ces points se règle en quelques lignes une fois connu. Ensemble, ils représentent plusieurs semaines. C’est la raison de publier le client.
Ce que l’agent n’a pas le droit de faire
Un script mensuel aurait suffi pour un dossier. Nous avons exposé le domaine comme un serveur MCP, le protocole par lequel les assistants conversationnels appellent des outils. Un agent lit la feuille de calcul, compare au mois précédent, signale un écart et demande confirmation avant d’envoyer.
Une déclaration engage des cotisations et ne se corrige en ligne que pendant un mois. Quatre règles encadrent le serveur.
- L’employeur n’est pas un paramètre
- Un tiers déclarant détient un seul jeu d’identifiants, valable pour tous les employeurs qui l’ont mandaté. L’employeur sur lequel un appel agit est déduit du compte appelant. Aucun outil ne l’accepte en argument, et un test relit l’arbre syntaxique du module pour le vérifier.
- La déclaration exige une empreinte
- La prédéclaration, qui ne valide rien, rend l’empreinte du corps qu’elle a calculé. La déclaration réelle la réclame. Un corps modifié entre les deux appels produit une empreinte différente et la déclaration est refusée.
- Le mandat reste manuel
- Son enregistrement est un acte juridique qui suit un mandat écrit. Il n’est pas exposé dans le serveur.
- Les appels sont journalisés
- Le compte, l’outil et le corps envoyé, pour les refus comme pour les appels aboutis.
Un exemple montre pourquoi la confirmation humaine reste nécessaire. Pour un contrat mensualisé, on déclare les heures du contrat, et non les heures réellement travaillées, qui varient avec le calendrier. Sur un mois de notre jeu d’essai, quatre heures d’écart déplacent les cotisations patronales et l’exonération de six euros chacune. Une feuille de calcul mal calibrée reproduirait cet écart tous les mois.
Le client ne s’installe pas chez un particulier
Les administrations françaises publient de plus en plus d’API. Elles s’adressent à des éditeurs qui intègrent une fois pour toutes. Le protocole MCP demande quelques centaines de lignes pour ouvrir la même API à un agent, avec une décision explicite sur ce que l’agent n’a pas le droit de faire.
Sans référencement, il ne démarre pas. Il s’adresse aux éditeurs, aux plateformes et aux mandataires, c’est-à-dire à ceux que l’API vise.
Le code
Le client, la ligne de commande et le serveur MCP sont publiés sous licence MIT : github.com/benoitperrin/comptine. Les règles métier et les notes de reconnaissance y figurent aussi. Le dépôt ne contient ni identifiants, ni spécification remise sous licence, ni donnée échangée avec l’Urssaf.
Une API métier à ouvrir à vos agents ? Écrivez-nous.