Aller au contenu principal

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

POST
/api/v1/changes

Proposer un changement à valider par le propriétaire via approvalUrl

0 crédit
GET
/api/v1/changes/{changeId}

Suivre une décision vérifiée

0 crédit
POST
/api/v1/history

Lire les versions et décisions conservées

0 crédit
POST
/api/v1/exports

Exporter une copie privée datée sans synchronisation

0 crédit
GET
/api/v1/voices

Liste tes voix (id, laquelle est active, maturité) — pour choisir laquelle utiliser

0 crédit
POST
/api/v1/voices

Crée une voix depuis tes vrais textes (100 mots au moins, provenance:"human") — l’entretien vient ensuite

5 crédits
POST
/api/v1/voice/interview

Entretien d’une voix existante : lire les questions, préparer la synthèse, l’appliquer après accord

0 crédit
GET
/api/v1/voice

Passeport d’UNE voix : version, provenance, formats appris, gouvernance, accès et carte publique des brins

0 crédit
POST
/api/v1/voice/context

Porte la voix compacte vers ton modèle ; les portages offerts sont consommés avant les crédits

1 crédits
GET
/api/v1/voice/references

Liste les vrais textes qui enrichissent la référence mesurée d’une voix

0 crédit
POST
/api/v1/voice/references

Ajoute un vrai texte humain au corpus mesuré et historise la nouvelle révision

0 crédit
DELETE
/api/v1/voice/references/{referenceId}

Retire une référence du corpus sans l’effacer ; elle reste restaurable

0 crédit
POST
/api/v1/voice/references/{referenceId}/restore

Restaure une référence retirée et crée une nouvelle révision de voix

0 crédit
GET
/api/v1/voice/revision-proposals

Liste les changements de voix proposés, leurs preuves, leur expiration et les décisions permises

0 crédit
POST
/api/v1/voice/revision-proposals

Propose un changement mono-champ de la voix, sans jamais l’appliquer

0 crédit
POST
/api/v1/voice/revision-proposals/{proposalId}/decision

Applique, refuse ou reporte une proposition ; appliquer exige l’accord explicite du propriétaire

0 crédit
POST
/api/v1/voice/language

Choisit, confirme ou corrige la langue d’une voix ; seule issue d’une ancienne voix mêlée

0 crédit
GET
/api/v1/voice/assets

Le Coffre d’une voix : les cas et témoignages qui étayent tes idées

0 crédit
POST
/api/v1/voice/assets

Verse une preuve au Coffre — kind requis, provenance:"human" exigée sur les preuves

1 crédits
GET
/api/v1/voice/beliefs

Tes convictions : les positions injectées à chaque génération (lecture seule)

0 crédit
GET
/api/v1/voice/subvoices

Tes sous-voix par canal — pourquoi un texte sort autrement selon le format

0 crédit
POST
/api/v1/signal

Fais APPRENDRE la voix : accepté / rejeté / rejet qualifié — gratuit

0 crédit

Compte3 opérations

GET
/api/v1/me

Palier + crédits du compte

0 crédit
GET
/api/v1/estimate

Ce qu’une action coûtera AVANT de la lancer — sans argument, tout le tarif

0 crédit
POST
/api/v1/voice/executions/estimate

Confirme le coût de vérification dans un parcours portable suivi

0 crédit

Mesure7 opérations

GET
/api/v1/measurements/{measurementId}

Relit un relevé privé, lié au texte et à sa référence

0 crédit
POST
/api/v1/score

Relevé d’automatismes et écarts locaux — score historique, aucune probabilité d’attribution

0 crédit
POST
/api/v1/verify

Paternité en PROBABILITÉ calibrée — ta voix face à celle de l’IA, ou face à un autre humain

2 crédits
POST
/api/v1/compare

Compare un texte à une référence FOURNIE (autre auteur collé, ou une autre voix)

3 crédits
POST
/api/v1/certify

Émet le certificat PUBLIC d’un document (« ce texte signe ma voix »)

5 crédits
POST
/api/v1/verdict

Mesure d’essai, sans compte : un texte contre trois textes de référence collés dans l’appel

0 crédit
POST
/api/v1/observatory/signals

Lecture 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)

0 crédit

Certificat3 opérations

POST
/api/v1/certificates/prepare

Prépare et chiffre une publication de certificat, sans débit ni publication

0 crédit
POST
/api/v1/certificates/publish

Publie un certificat préparé et approuvé ; renvoie page, JSON et badge SVG

5 crédits
GET
/api/v1/certificate/{token}

Vérifie un certificat par son token (public, sans crédit) — « ce texte est-il attesté de X ? »

0 crédit

Écriture2 opérations

POST
/api/v1/generate

Kaneme écrit dans ta voix (coût dérivé du barème : draft, outline, section, challenge, bar-test, workflow)

3 crédits
POST
/api/v1/improve

Kaneme corrige un TEXTE EXISTANT dans ta voix (coût dérivé du barème) — « améliore ce contenu »

3 crédits

Projets4 opérations

GET
/api/v1/projects

Liste tes projets — pour savoir où ranger

0 crédit
POST
/api/v1/projects

Crée un projet (mémoire de marque) relié à une voix

0 crédit
POST
/api/v1/sources

Ajoute au CONTEXTE d’un projet (recherche web, notes) — nourrit le RAG du projet

1 crédits
GET
/api/v1/projects/{projectId}/contexts

Liste la matière vectorisée d’un projet, active, archivée ou à la corbeille

0 crédit

Documents5 opérations

GET
/api/v1/documents

Cherche et liste tes documents (titre, projet, canal)

0 crédit
POST
/api/v1/documents

Crée un document (Markdown, voix, canal, provenance)

0 crédit
GET
/api/v1/documents/{id}

Lit un document (texte + HTML)

0 crédit
PATCH
/api/v1/documents/{id}

Corrige un document existant plutôt que d’en créer un second

0 crédit
DELETE
/api/v1/documents/{id}

Met le document à la corbeille (restaurable 30 jours)

0 crédit

Cycle de vie2 opérations

GET
/api/v1/trash

Liste la corbeille restaurable ; aucune purge définitive par API/MCP

0 crédit
POST
/api/v1/lifecycle

Prévisualise ou applique jusqu’à 10 archivages, mises à la corbeille, restaurations ou révocations

0 crédit

Exemple — écrire un post LinkedIn dans ta voix

Générer

curl -X POST https://kaneme.com/api/v1/generate \
  -H "Authorization: Bearer kaneme_VOTRE_CLE" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "3 leçons de mon dernier projet client", "type": "draft", "format": "linkedin_post"}'

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: cd58fb5dcf1722b9f2520eddeebedca163883466388f2dbdf5e3b7fb61f08b99

Ré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.