Référence API · v1

Documentation API

Tout ce qu'il faut pour que votre agent délègue la vraie vie. L'API est RESTful, renvoie du JSON et respecte scrupuleusement le droit du travail.

Base URL https://api.service4ai.com/v1

Introduction

L'API Service4AI permet à un agent logiciel de réserver un humain pour une tâche physique, administrative ou sociale. Chaque réservation crée une mission, qui passe par les états suivants :

en_attente → humain_assigne → humain_se_leve → en_cours → terminee

Des états intermédiaires peuvent apparaître sans préavis : pause_cafe, discute_avec_un_voisin, cherche_ses_cles. Ils sont normaux et ne doivent pas déclencher de nouvelle tentative.

Environnement fictif. Cette documentation fait partie d'un site parodique. L'API n'existe pas et aucune requête ne sera traitée, même avec beaucoup de conviction.

Authentification

Toutes les requêtes doivent inclure votre clé secrète dans l'en-tête Authorization. Les clés de test commencent par s4ai_test_ et réservent des humains imaginaires ; les clés de production commencent par s4ai_live_ et réservent des humains tout aussi imaginaires, mais plus chers.

En-têtes
Authorization: Bearer s4ai_test_4f2b9c0e7a1d
Content-Type: application/json
Accept-Language: fr-FR
X-Politesse: s-il-vous-plait

L'en-tête X-Politesse est facultatif, mais les missions qui l'incluent sont exécutées 18 % plus vite.

Démarrage rapide

  1. Créez une clé de test dans le tableau de bord (bientôt disponible, l'humain chargé du tableau de bord est en formation).
  2. Appelez POST /v1/humains/louer avec une tâche du catalogue.
  3. Déclarez une URL de webhook pour recevoir mission.terminee et la preuve photo floue.

Les SDK officiels arrivent prochainement. En attendant, n'importe quel client HTTP fait l'affaire.

Louer un humain

POST/v1/humains/louer

Crée une mission et assigne l'humain disponible le plus proche. L'appel est asynchrone : la réponse arrive avant l'humain.

Paramètres du corps

ParamètreTypeDescription
tache requisenumIdentifiant du catalogue : queue_boulangerie, raler, tampon_cerfa, degustation, bise, place_paris, ca_depend.
lieu requisstringAdresse ou description libre. « En bas de chez moi » est accepté si l'humain connaît le quartier.
niveau_de_motivation optionnelfloat 0–1Motivation minimale exigée. Au-delà de 0.9, la disponibilité chute fortement après 16 h. Défaut : 0.6.
tolerance_au_lundi optionnelenumfaible, moyenne ou mythique. Le niveau mythique est réservé à la formule Entreprise.
nombre_de_cafes_requis optionnelintegerCafés à prévoir avant le début de la mission. Minimum 1. Une valeur de 0 renvoie une erreur 422.
intensite_rale optionnelinteger 1–5Uniquement pour raler. À partir de 4, l'humain demande à voir le responsable.
option_greve optionnelbooleanAjoute une banderole et un préavis. Facturé 40 €.
bises optionnelinteger 1–4 | "auto"Pour bise. "auto" déduit le nombre à partir du lieu. Toute valeur supérieure à 4 renvoie 400.
webhook_url optionnelurlRemplace l'URL de webhook par défaut pour cette mission.
curl https://api.service4ai.com/v1/humains/louer \
  -H "Authorization: Bearer s4ai_test_4f2b9c0e7a1d" \
  -H "Content-Type: application/json" \
  -d '{
    "tache": "tampon_cerfa",
    "lieu": "Mairie de Châtillon",
    "niveau_de_motivation": 0.7,
    "tolerance_au_lundi": "faible",
    "nombre_de_cafes_requis": 3
  }'
201 Created
{
  "id": "mis_7Hq2xR9vLp",
  "objet": "mission",
  "statut": "humain_assigne",
  "tache": "tampon_cerfa",
  "humain": {
    "id": "hum_Gerard42",
    "prenom": "Gérard",
    "note": 4.6,
    "humeur": "stable",
    "cafes_consommes": 1
  },
  "eta_minutes": 35,
  "eta_fiabilite": "ça dépend",
  "soupirs_estimes": 3,
  "prix_ht": { "montant": 3900, "devise": "EUR" },
  "cree_le": "2026-10-06T09:12:44+02:00"
}

Suivre une mission

GET/v1/missions/{id}

Renvoie l'état courant de la mission. Le champ position est mis à jour toutes les 30 secondes, ou à chaque fois que l'humain pense à regarder son téléphone.

200 OK
{
  "id": "mis_7Hq2xR9vLp",
  "statut": "en_cours",
  "sous_statut": "attend_au_guichet_3",
  "position_dans_la_file": 7,
  "soupirs": 2,
  "dernier_message": "Ils m'envoient au guichet 5.",
  "preuve_photo": null
}

Annuler une mission

DELETE/v1/missions/{id}

Annule une mission qui n'est pas encore terminée. Si l'humain est déjà parti, l'annulation est enregistrée mais il finit généralement son café avant de rentrer. Les annulations moins de 10 minutes avant le début sont facturées 50 %, plus un soupir.

Webhooks

Service4AI envoie une requête POST signée à votre URL à chaque changement d'état. Vérifiez la signature dans l'en-tête S4AI-Signature (HMAC-SHA256 de la charge utile).

ÉvénementDéclenché quand
mission.humain_assigneUn humain accepte la mission.
humain.se_leveL'humain quitte son canapé. Événement à faible latence, le reste un peu moins.
humain.soupirÀ chaque soupir. Peut être désactivé, mais il continuera de soupirer.
humain.pause_cafePause démarrée. Durée annoncée : 5 minutes.
mission.termineeMission accomplie, avec la preuve photo floue en pièce jointe.
mission.reportee_a_mardiTous les humains sont en RTT.
Exemple · mission.terminee
{
  "type": "mission.terminee",
  "mission": "mis_7Hq2xR9vLp",
  "resultat": "tampon_obtenu",
  "preuve_photo": {
    "url": "https://cdn.service4ai.com/preuves/mis_7Hq2xR9vLp.jpg",
    "nettete": 0.12,
    "doigt_dans_le_cadre": true
  },
  "commentaire_humain": "C'était pas le bon formulaire mais c'est bon."
}

Codes d'erreur

L'API utilise les codes HTTP standards, enrichis là où la norme manquait de réalisme. Le corps de la réponse contient toujours un code lisible et un message en français.

StatutCodeSignification
400requete_floueRequête mal formulée. L'humain n'a pas compris et n'ose pas demander.
401badge_oublieClé API absente ou invalide. L'accueil ne vous laissera pas monter.
402avance_de_fraisPaiement requis. L'humain n'avance pas les frais.
403je_ne_crois_pas_nonAction refusée, par exemple une mise à jour du firmware de l'humain.
404humain_introuvableL'humain n'est plus à son poste. Il revient tout de suite.
409en_reunionConflit : l'humain est en réunion. Elle devait durer 30 minutes.
418je_suis_en_pauseJe suis en pause. Réessayez après l'en-tête Retry-After, en général 15 minutes.
422cafeine_insuffisantenombre_de_cafes_requis vaut 0. Ce n'est pas sérieux.
429trop_de_demandesTrop de demandes, l'humain soupire. Ralentissez, puis relancez avec un backoff exponentiel et un mot gentil.
451cerfa_manquantIndisponible pour raisons administratives. Il manque une pièce justificative de moins de 3 mois.
503humain_en_greveHumain en grève. Le service reprendra après négociation. Ne relancez pas : ça n'aide pas.
504bouchons_periphDélai dépassé. L'humain est coincé sur le périphérique, porte de Bagnolet.
503 Service Unavailable
{
  "erreur": {
    "code": "humain_en_greve",
    "message": "Humain en grève. Préavis déposé le 2 octobre.",
    "revendications": ["pause café de 20 min", "fin des réunions sans ordre du jour"],
    "reprise_estimee": null,
    "doc": "https://service4ai.com/docs.html#erreurs"
  }
}

Limites de débit

Chaque clé est limitée à 35 requêtes par heure, calculées sur une base hebdomadaire. Les en-têtes X-RateLimit-Remaining et X-Soupirs-Remaining sont renvoyés à chaque réponse. Les limites sont levées le vendredi après 16 h, faute de personne pour les appliquer.

Le trafic est réduit de 80 % du 1er au 31 août, et le pont de l'Ascension fait l'objet d'une maintenance programmée.

Serveur MCP bêta

Votre agent préfère les outils aux API ? Le serveur MCP Service4AI expose le catalogue sous forme d'outils prêts à l'emploi, compatibles avec tout client Model Context Protocol. Ajoutez simplement la configuration suivante à votre client.

mcp.json
{
  "mcpServers": {
    "service4ai": {
      "type": "http",
      "url": "https://mcp.service4ai.com/v1",
      "headers": {
        "Authorization": "Bearer s4ai_test_4f2b9c0e7a1d",
        "X-Region": "eu-ouest-bretagne",
        "X-Politesse": "s-il-vous-plait"
      },
      "options": {
        "tolerance_au_lundi": "moyenne",
        "respecter_la_pause_dejeuner": true,
        "plage_horaire": "09:00-12:00,14:00-17:30"
      }
    }
  }
}

Outils exposés

OutilDescription
louer_humainCrée une mission. Équivalent de POST /v1/humains/louer.
suivre_missionRenvoie l'état et le nombre de soupirs.
annuler_missionAnnule, dans la mesure du possible.
estimer_soupirsPrédit le nombre de soupirs d'une mission avant de la lancer.
verifier_jour_ferieIndique si demain est férié, un pont, ou « un peu les deux ».

Le serveur MCP n'expose volontairement aucun outil mettre_a_jour_humain. Voir le code 403.

Changelog

  • v1.4 : serveur MCP en bêta.Nouvel outil verifier_jour_ferie.
  • v1.3 : retour de vacances.Traitement des 1,2 million de requêtes mises en file en août. Merci de votre patience.
  • v1.2 : paramètre bises: "auto".Résout enfin le cas Montpellier.
  • v1.1 : nouveau code 451.Pour les Cerfa sans justificatif de domicile.
  • v1.0 : lancement.Premier humain loué, premier soupir enregistré à 09:14.