Référence
API REST v1
Consulte les opérations REST, leur coût et le contrat OpenAPI : paramètres, réponses, erreurs et objets à interpréter sans ambiguïté.
Barème par geste
Kaneme écrit dans ton outil : sans quota, 3 crédits par texte, tout format et tout canal.
Voix compacte dans ton outil : ton modèle écrit, 10 portages offerts par mois à chaque compte ou siège Business, puis 1 crédit par appel. Un appel = un portage.
10 crédits et 10 portages offerts chaque mois en Gratuit et Crédits. Remise au jour anniversaire de l’inscription, sans cumul ; allocation consommée avant les crédits achetés.
Accorde un visa « Mesurer » ou « Mesurer et écrire » à un compte Kaneme. Celui qui agit paie. Le titulaire voit qui, quand, quel geste et quel verdict, jamais le texte ; il peut retirer le visa à tout moment. Seul le titulaire publie un certificat. Le visa ne remplace pas la portée OAuth voice:measure.
La surface, comptée
- Opérations
- 48
- Familles
- 8
- Sans clé
- 3
- Contrat
- OpenAPI · v5.4.0
Contrat 2.11.0 : GET /api/v1/me et get_account annoncent business quand une organisation activée paie par défaut. credits reste le solde personnel. organization vaut null hors équipe, sinon expose id, name, role, pays, le solde commun dans credits et memberBudget. Ce budget vaut actuellement null pour éviter de parcourir les usages du mois. Une voix reçue par visa n’est jamais la voix active de son destinataire.
Les 48 opérations
Header Authorization: Bearer kaneme_… sur chaque appel. Réponses JSON, erreurs explicites — le tableau des codes est dans les règles d'appel.
Voix22 opérations
/api/v1/changesProposer un changement à valider par le propriétaire via approvalUrl
/api/v1/changes/{changeId}Suivre une décision vérifiée
/api/v1/historyLire les versions et décisions conservées
/api/v1/exportsExporter une copie privée datée sans synchronisation
/api/v1/voicesListe tes voix (id, laquelle est active, maturité) — pour choisir laquelle utiliser
/api/v1/voicesCrée une voix depuis tes vrais textes (100 mots au moins, provenance:"human") — l’entretien vient ensuite
/api/v1/voice/interviewEntretien d’une voix existante : lire les questions, préparer la synthèse, l’appliquer après accord
/api/v1/voicePasseport d’UNE voix : version, provenance, formats appris, gouvernance, accès et carte publique des brins
/api/v1/voice/contextPorte la voix compacte vers ton modèle ; les portages offerts sont consommés avant les crédits
/api/v1/voice/referencesListe les vrais textes qui enrichissent la référence mesurée d’une voix
/api/v1/voice/referencesAjoute un vrai texte humain au corpus mesuré et historise la nouvelle révision
/api/v1/voice/references/{referenceId}Retire une référence du corpus sans l’effacer ; elle reste restaurable
/api/v1/voice/references/{referenceId}/restoreRestaure une référence retirée et crée une nouvelle révision de voix
/api/v1/voice/revision-proposalsListe les changements de voix proposés, leurs preuves, leur expiration et les décisions permises
/api/v1/voice/revision-proposalsPropose un changement mono-champ de la voix, sans jamais l’appliquer
/api/v1/voice/revision-proposals/{proposalId}/decisionApplique, refuse ou reporte une proposition ; appliquer exige l’accord explicite du propriétaire
/api/v1/voice/languageChoisit, confirme ou corrige la langue d’une voix ; seule issue d’une ancienne voix mêlée
/api/v1/voice/assetsLe Coffre d’une voix : les cas et témoignages qui étayent tes idées
/api/v1/voice/assetsVerse une preuve au Coffre — kind requis, provenance:"human" exigée sur les preuves
/api/v1/voice/beliefsTes convictions : les positions injectées à chaque génération (lecture seule)
/api/v1/voice/subvoicesTes sous-voix par canal — pourquoi un texte sort autrement selon le format
/api/v1/signalFais APPRENDRE la voix : accepté / rejeté / rejet qualifié — gratuit
Compte3 opérations
/api/v1/mePalier + crédits du compte
/api/v1/estimateCe qu’une action coûtera AVANT de la lancer — sans argument, tout le tarif
/api/v1/voice/executions/estimateConfirme le coût de vérification dans un parcours portable suivi
Mesure7 opérations
/api/v1/measurements/{measurementId}Relit un relevé privé, lié au texte et à sa référence
/api/v1/scoreRelevé d’automatismes et écarts locaux — score historique, aucune probabilité d’attribution
/api/v1/verifyPaternité en PROBABILITÉ calibrée — ta voix face à celle de l’IA, ou face à un autre humain
/api/v1/compareCompare un texte à une référence FOURNIE (autre auteur collé, ou une autre voix)
/api/v1/certifyÉmet le certificat PUBLIC d’un document (« ce texte signe ma voix »)
/api/v1/verdictMesure d’essai, sans compte : un texte contre trois textes de référence collés dans l’appel
/api/v1/observatory/signalsLecture de l’Observatoire, sans compte ni crédit : passages à relire, leur critère et leur position (ni détecteur d’IA, ni preuve d’auteur)
Certificat3 opérations
/api/v1/certificates/preparePrépare et chiffre une publication de certificat, sans débit ni publication
/api/v1/certificates/publishPublie un certificat préparé et approuvé ; renvoie page, JSON et badge SVG
/api/v1/certificate/{token}Vérifie un certificat par son token (public, sans crédit) — « ce texte est-il attesté de X ? »
Écriture2 opérations
/api/v1/generateKaneme écrit dans ta voix (coût dérivé du barème : draft, outline, section, challenge, bar-test, workflow)
/api/v1/improveKaneme corrige un TEXTE EXISTANT dans ta voix (coût dérivé du barème) — « améliore ce contenu »
Projets4 opérations
/api/v1/projectsListe tes projets — pour savoir où ranger
/api/v1/projectsCrée un projet (mémoire de marque) relié à une voix
/api/v1/sourcesAjoute au CONTEXTE d’un projet (recherche web, notes) — nourrit le RAG du projet
/api/v1/projects/{projectId}/contextsListe la matière vectorisée d’un projet, active, archivée ou à la corbeille
Documents5 opérations
/api/v1/documentsCherche et liste tes documents (titre, projet, canal)
/api/v1/documentsCrée un document (Markdown, voix, canal, provenance)
/api/v1/documents/{id}Lit un document (texte + HTML)
/api/v1/documents/{id}Corrige un document existant plutôt que d’en créer un second
/api/v1/documents/{id}Met le document à la corbeille (restaurable 30 jours)
Cycle de vie2 opérations
/api/v1/trashListe la corbeille restaurable ; aucune purge définitive par API/MCP
/api/v1/lifecyclePrévisualise ou applique jusqu’à 10 archivages, mises à la corbeille, restaurations ou révocations
Exemple — écrire un post LinkedIn dans ta voix
Générer
format (optionnel) cadre le canal : linkedin_post, newsletter, blog, thread, tweet_short, instagram, tiktok_script, marketing_page (page de vente), academic_article (article académique), email, slack, internal_note et executive_communication. Ces quatre formats professionnels peuvent apprendre une sous-voix sans être pour autant mesurables contre une IA générique.
La même surface, en OpenAPI
/.well-known/openapi.json décrit ces 48 opérations en OpenAPI 3.1 — paramètres, corps, en-tête d'idempotence, codes d'erreur, codes d'abstention, le coût, la cadence et le budget de chacune, et un exemple d'appel et de réponse. De quoi générer un client ou brancher un agent sans lire cette page — et sans clé pour le lire. Le document est calculé depuis la même source que le tableau ci-dessus, et un test le compare aux routes réelles : il ne peut pas dériver.
Les objets, et les contresens
Cinq choses que la liste d'endpoints ne dit pas, et dont chacune a déjà coûté une intégration ratée.
Deux nombres, deux questions
/score mesure une fidélité de style : ce texte sonne-t-il travaillé et personnel ? Il ne dit pas qui a écrit — un texte de quelqu'un d'autre peut obtenir 90. /verify répond à la question d'auteur, et rend une probabilité calibrée plutôt qu'un score : question="q1" (ta voix vs celle de l'IA, la mesure principale, posée par défaut quand question est omise) ou question="q2" (toi vs un autre humain, mesuré seulement si tu le demandes ; lecture indicative en français, signature au-dessus du seuil scellé en anglais). Un même score ne vaut pas la même probabilité selon la question. Comparée à des imitations IA des auteurs du banc, réalisées à partir de leurs textes de référence.
C'est un indice, jamais une preuve opposable : face à un texte machine retravaillé pour passer, le moteur servi n'a pas encore été remesuré, et on ne recopie pas le chiffre de l'ancien (détail sur /methode).
Sur q2, la réponse porte aussi explanation : quatre écarts observés — cadence, registre, structure et lexique. Chaque facteur donne une direction lisible, jamais un sous-score causal. Ces observations éclairent la décision ; elles ne décomposent pas la probabilité produite surtout par la couche profonde.
Écrire, ou améliorer ce qui existe déjà
/generate PART d'un sujet et rédige dans ta voix. /improve PART d'un texte déjà écrit — celui que ton agent vient de produire — et le réécrit dans ta voix : « améliore ce contenu avec ma voix ». C'est une passe corrective bornée (elle corrige les défauts constatés, préserve le fond et la longueur) et renvoie le texte + le score avant/après. Rien à corriger ? Le texte revient inchangé, sans débit.
/compare répond à « ce texte est-il de la même main que celui-ci ? » contre une référence que TU fournis — un autre auteur collé, ou une autre de tes voix. Même honnêteté que /verify : probabilité calibrée, abstention si la mesure ne tranche pas, plancher hors de ton genre.
Le Coffre — et pourquoi une preuve s'atteste
Deux endroits différents, à ne pas confondre : /sources nourrit la mémoire d'un projet (ce dont tu parles), et /voice/assets est le Coffre d'une voix : ce avec quoi tu étayes tes idées.
kind est requis et fermé (preuve · cas_client · temoignage · resultat · histoire) — c'est lui qui distingue une preuve d'une note. Sur les quatre types de preuve, provenance:"human" est exigée : cette matière sera citée comme vérifiable, donc elle doit être réelle. Un agent n'invente pas un cas client à ta place.
Tes convictions et tes sous-voix se lisent, mais ne s'écrivent pas depuis l'API : une conviction posée par un agent n'est pas une conviction, et activer une sous-voix change tous tes textes sur ce canal. Ces deux gestes restent les tiens, dans l'app.
Créer une voix — et pourquoi la provenance compte
POST /api/v1/voices compile une nouvelle voix depuis de vrais textes déjà écrits, 100 mots au moins. Ils deviennent la cadence de référence de la voix, réinjectée à chaque génération. Un entretien ne crée pas de voix : sous 100 mots, demande davantage de textes.
L'appel exige provenance:"human". Ce n'est pas une formalité : une voix ancrée sur de l'IA n'est plus ta voix, c'est une IA-en-voix qui se mesurerait elle-même. Un agent ne doit jamais y coller un texte qu'il vient de générer. Sans l'attestation, l'appel est refusé, pas dégradé en silence. L'ancien mode:"interview" est refusé de la même façon (samples_required).
Puis l'entretien. Les textes disent comment tu écris, pas pour qui, ni ce que tu défends ou refuses. POST /api/v1/voice/interview (interview_voice côté MCP) complète une voix qui existe, quand tu veux après sa création : avec le seul profileId, il rend les huit questions et l'état de la séance ; avec answers, il prépare une synthèse sans toucher la voix ; avec applyPreviewId et ownerApproved:true, il l'applique. C'est la même séance que dans l'app ; les convictions restent des propositions que tu confirmes toi-même. Gratuit.
Une voix = une langue. Chaque moteur ne mesure que la sienne : une voix écrit en français ou en anglais. Passe language:"fr" ou "en" pour la choisir, sinon elle est lue sur les textes. Un texte de l'autre langue — ou qui en porte une phrase entière — est refusé en 422, avant tout débit, avec les passages à corriger. Une citation entre guillemets ne compte pas : citer n'est pas changer de langue. Chaque voix rendue porte language et languageSource. Pour confirmer ou corriger la langue d'une voix existante — seule issue d'une ancienne voix mêlée (voice_language_required) — POST /api/v1/voice/language, avec ownerApproved:true : la langue est le choix de l'auteur.
Un projet, sa mémoire, sa preuve
/projects crée un projet relié à une voix ; /sources y verse ce que ton agent a trouvé (recherche web, notes) — le texte est vectorisé et récupéré ensuite par le RAG. Il suffit alors de passer projectId à /generate pour écrire en héritant de cette mémoire.
/certify émet la page publique d'un document — « ce texte signe ma voix ». Elle n'est délivrée que si la paternité est réellement mesurée et affirmée : sinon le certificat est refusé, sans débit. Le public ne voit qu'une bande (label + affirmation), jamais de score. À n'appeler que sur ta demande : ça publie.
Vérifier un certificat hors ligne
Contrat 2.12 : textDigest est le SHA-256 de kaneme-text-v1. supprimer U+200B, U+2060 et U+FEFF (garder U+200D) ; NFC ; toute suite de blancs ECMAScript (/\s+/gu, NBSP compris) → U+0020 ; trim ; UTF-8 sans BOM ; SHA-256 en hexadécimal minuscule. Ce calcul peut se faire localement sans envoyer le texte.
Vecteur de test (apostrophe droite, sans saut de ligne) :
Bonjour à tous ! Rock & roll, l'été.
SHA-256: cd58fb5dcf1722b9f2520eddeebedca163883466388f2dbdf5e3b7fb61f08b99Récupérer /.well-known/kaneme-certificate-key chez l’émetteur de confiance. Choisir dans keys la clé correspondant à trust.signature.keyId, y compris retirée. Trier récursivement les clés de signedCore, conserver l’ordre des tableaux, sérialiser en JSON compact (sorted-keys-json) exactement comme JSON.stringify d’ECMAScript — les caractères non ASCII restent non échappés (Python : json.dumps(core, sort_keys=True, separators=(",", ":"), ensure_ascii=False)) —, encoder en UTF-8, décoder la signature base64url et vérifier Ed25519 avec publicKeyPem. Les libellés traduits de claims et l’enveloppe sont hors signature. Les anciens certificats sans signature gardent trust.model=origin ; leur empreinte reste null. Un certificat de voix n’atteste aucun texte.
Une signature stockée atteste que Kaneme a mesuré ce texte à cette date, avec ce résultat. Elle n’établit pas qui l’a écrit. Un certificat est un indice, jamais une preuve. La confiance dans la clé téléchargée et l’état actuel de révocation demandent toujours l’émetteur.
Pour un certificat signé, comparer le texte à signedCore.textDigest après vérification de la signature, de l’émetteur et du token attendu. Contrôler que textDigest dans l’enveloppe correspond : un champ hors du cœur n’est pas authentifié par la signature.