L'AfiniTwin Portable se télécharge depuis le dashboard depuis quelques mois. Ça marche : tu copies le preset, tu le colles dans Claude/ChatGPT/Gemini, et l'IA te parle comme si elle te connaissait depuis le premier tour. Mais copier-coller ne passe pas à l'échelle. Si ton intégration B2B est sérieuse — un CRM, un assistant propre, un pipeline nocturne de traitement —, il te faut autre chose : que l'AfiniTwin entre tout seul, programmatiquement, à chaque appel que ton système fait au LLM.
C'est ce qu'on libère aujourd'hui. Une API REST authentifiée qui sert ton AfiniTwin comme system prompt, prête à être injectée depuis le code que tu écris.
Le geste minimum
Une clé, un appel :
curl -H "X-Twin-Key: atk_live_xxxxxxxx_yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" \
"https://api.afini.ai/v1/public/twin/preset/estandar?format=json&lang=fr"
Renvoie le méta-prompt complet du preset demandé, dans le format demandé. Tu le charges en system dans ton client Anthropic / OpenAI / Mistral / autre, et à partir de là chaque tour est calibré sur ton profil cognitif. Sans réentraînement. Sans fine-tuning. Sans passer par notre infrastructure au-delà de la lecture initiale du snapshot.
Cinq endpoints, une seule idée
/v1/public/twin/health — un ping pour valider que la clé est vivante sans dépenser de quota mensuel. Pour tes health checks de déploiement.
/v1/public/twin/me — identité de la clé, plan du propriétaire, quota utilisé/restant, dernier Twin disponible. Ce que tu appelleras au démarrage de ton intégration pour détecter une rétrogradation de plan ou une révocation de clé.
/v1/public/twin/historic — listing de tes snapshots (un par achat d'AfiniTwin ou par trimestriel gratuit du plan Professionnel). Utile si ton intégration veut laisser l'utilisateur choisir parmi plusieurs.
/v1/public/twin/snapshots/:id — métadonnées d'un snapshot précis.
/v1/public/twin/preset/:slug?format=...&lang=...&variant=...&includeNarratives=... — l'endpoint avec de la viande. Renvoie l'artefact en .txt, .md, .json ou .yaml, en six langues, avec ou sans narratifs Opus intégrés.
Tous les endpoints sauf /health comptent pour le quota mensuel. Par défaut 10 000 requêtes/mois, configurable jusqu'à 1 million par clé. Chaque réponse inclut les en-têtes X-Twin-Quota-{Limit,Used,Remaining} pour que ton intégration sache combien il lui reste.
Pourquoi clé API, pas OAuth
OAuth aurait du sens si l'intégration était un tiers accédant au profil d'un autre utilisateur. Ce n'est pas le cas. L'API B2B sert TON AfiniTwin à TON intégration — ton CRM, ton assistant, ton agent. Une clé API personnelle, générée dans ton dashboard, copiée dans le coffre de ton intégration, est le modèle qui colle le mieux : zéro friction de consentement, révocation instantanée, une clé par intégration pour borner le rayon d'explosion d'une fuite.
Les clés sont des secrets au sens fort : en BDD on garde uniquement le hash SHA-256 (format atk_live_<8 hex>_<32 hex>). Le plaintext n'est montré qu'une fois à la création. Si tu le perds, révoque et crée-en une autre. Si tu publies la clé par accident dans un repo public — ça arrive, tu n'es pas le premier — révoque depuis le dashboard et c'est hors ligne en millisecondes.
Plan Professionnel, pas par caprice
La génération de clés est réservée au plan Professionnel (abonnement Stripe actif ou voucher Professionnel vivant). Les endpoints publics servent indistinctement, à condition que ta clé ait été émise sur un compte Professionnel à la création. Si tu redescends de plan, les clés restent stockées mais les endpoints renvoient 403 jusqu'à ce que tu remontes. On ne les supprime pas : on les laisse en pause.
Pourquoi pas Essential ou Premium ? Parce que les intégrations B2B impliquent une charge soutenue sur notre infrastructure (le snapshot vit dans notre BDD, les en-têtes viennent de notre proxy), et le coût marginal par intégration ne cadre qu'au prix Professionnel. Pas une restriction artificielle : de l'ingénierie honnête.
Quota, rate-limit, deux ceintures
Le quota mensuel mesure le volume agrégé. Le rate-limit par IP/clé mesure les rafales. Aujourd'hui on te sert 60 requêtes par minute sur chaque endpoint lourd, 120 par minute sur /health. Si ton intégration tombe dans une boucle infinie accidentelle, le rate-limit l'attrape avant de drainer ton quota mensuel. Pas une seule ligne de défense.
Ce qu'on n'EST PAS
Ce n'est pas un endpoint « ramène-moi le profil de l'utilisateur X » où X est quelqu'un d'autre que le titulaire de la clé. La clé authentifie le propriétaire et renvoie toujours SON AfiniTwin. Pas de chemins multi-tenant. Pas d'admin distant.
Ce n'est pas non plus un endpoint pour entraîner des modèles aux dépens de l'utilisateur. Ce qu'on sert est ce qui est déjà dans son snapshot immuable. Si notre fournisseur d'inférence (Anthropic) change sa politique de rétention, ça n'affecte pas rétroactivement les snapshots déjà générés.
Et ce n'est pas un substitut au journaling, au coaching ni à la thérapie. C'est un composant technique pour intégrateurs. Les questions humaines restent humaines.
Comment commencer aujourd'hui
- Abonne-toi ou utilise un voucher Professionnel sur
https://afini.ai/preciossi tu ne l'as pas encore. - Achète ton AfiniTwin depuis le dashboard si ce n'est pas déjà fait. L'API fonctionne sans Twin (renvoie 403 NO_TWIN_PURCHASED), mais sans Twin il n'y a pas grand-chose à servir.
- Génère ta première clé sur
https://afini.ai/fr/dashboard/twin/api. Copie-la dans le coffre de ton intégration. NE LA committe PAS dans un repo. - Appelle
/v1/public/twin/healthpour vérifier qu'elle est vivante. Ne consomme pas de quota. - Lis la documentation complète sur
https://afini.ai/fr/afinitwin/api. Exemples cURL, Node.js et Python, table complète des erreurs, recommandations de sécurité.
Si ton cas d'intégration a des exigences particulières — quotas supérieurs à 1M/mois, scopes spécifiques, support SLA —, écris à info@afini.ai. Il y a de la marge de négociation.
Roadmap honnête
Aujourd'hui (v1.0) : les 5 endpoints ci-dessus, scope unique twin:read, plan Professionnel, quota configurable jusqu'à 1M.
Prochaines semaines : webhooks (te notifier quand un nouveau snapshot est ready, sans polling), scope twin:write pour intégrations voulant ensemencer des faits vitaux (avec consentement explicite), métriques d'usage depuis le dashboard.
Quand il le faudra : SDK officiel TypeScript et Python, exemples canoniques d'intégration avec Anthropic et OpenAI, plan Enterprise avec SLA et quotas au-delà du million.
On ne promet pas ce qui n'existe pas. Si tu en as besoin et que ce n'est pas encore là, dis-le et c'est priorisé.
— Ricardo