{"openapi":"3.1.0","x-kaneme-contract-version":"1.16.0","info":{"title":"Kaneme — API","version":"1.16.0","description":"API REST de Kaneme : écrire dans ta voix, mesurer la fidélité d’un texte, attribuer sa paternité en probabilité calibrée, et gérer projets et documents. Les mêmes opérations, les mêmes bornes et les mêmes crédits que l’application. Deux axes distincts sont mesurés et jamais fusionnés : l’identité (mesurée) et la composition (déclarée, jamais détectée). Le VERDICT d’auteur est calibré sur le français uniquement. Sur un texte lu comme confidemment non français, la vérification s’abstient et rend `probability: null` avec `unavailable: \"unsupported_language\"` — ce n’est PAS une panne, et le code se distingue de `embedding_layer` (couche indisponible) et `out_of_distribution` (registre non couvert). Une abstention n’est jamais facturée. Le SCORE de style, lui, sort dans toutes les langues outillées : il compte des marqueurs d’automatisme dans la langue qu’il a lue et rend `markerLanguage` pour dire lequel il a appliqué. Le champ `language` de chaque réponse porte la langue lue, `inDomain` dit si un verdict serait valide. L’API et le MCP s’ouvrent de deux façons : un abonnement Kaneme (Essentiel ou Pro), ou un solde de crédits acheté — le prépayé suffit, sans abonnement. Dans les deux cas, la mesure se paie ensuite en crédits, exactement comme dans l’app : aucun second compteur. Les crédits offerts d’un compte gratuit, eux, n’ouvrent pas la surface. L’essai de 7 jours ouvre la même surface : ta clé fonctionne dès le premier jour, avant tout prélèvement."},"servers":[{"url":"https://kaneme.com"}],"x-kaneme-rate-limits":[{"scope":"Toute la surface","countedBy":"par clé (ou par client OAuth)","limit":60,"windowSeconds":60,"detail":"Compté sur l’ensemble des appels /api/v1 et /api/mcp du même porteur."},{"scope":"Générer et rejouer une recette","countedBy":"par compte","limit":10,"windowSeconds":10,"detail":"Fenêtre PARTAGÉE avec l’éditeur de l’app : la clé ne contourne pas la cadence."},{"scope":"Créer un document","countedBy":"par compte","limit":10,"windowSeconds":10,"detail":"Gratuit en crédits — la cadence est sa seule borne."},{"scope":"Créer un projet","countedBy":"par compte","limit":10,"windowSeconds":10,"detail":"Gratuit en crédits — la cadence est sa seule borne."},{"scope":"Déposer une source (boîte de réception)","countedBy":"par compte","limit":30,"windowSeconds":60,"detail":"Gratuit et réversible : borné pour éviter qu’un script remplisse la boîte."},{"scope":"Archiver, mettre à la corbeille ou restaurer","countedBy":"par clé (ou client OAuth)","limit":10,"windowSeconds":60,"detail":"Lots de 10 maximum, prévisualisables avec dryRun. Aucune purge définitive par API/MCP."},{"scope":"Vérifier un certificat (sans clé)","countedBy":"par adresse IP","limit":60,"windowSeconds":60,"detail":"La seule opération ouverte sans compte — donc le seul plafond qui se compte sur l’appelant lui-même, pas sur un porteur."}],"x-kaneme-rate-limit-headers":{"description":"Toute réponse — succès compris — porte X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Window : ralentis en lisant Remaining, plutôt qu’en te cognant. Retry-After ne part QUE sur un 429 : c’est un en-tête de refus, et sur un succès il se lirait comme un ordre d’attendre. Remaining vaut ce qu’il valait au passage de la garde — le jeton de la requête en cours est déjà décompté. Pas de X-RateLimit-Reset : le limiteur ne connaît l’instant de remise à zéro qu’au refus, et un Reset approximatif ferait dormir un client à côté. Exception : GET /certificate/{token} est la seule réponse partageable de la surface (Cache-Control public) — elle omet Remaining, qui appartient à un appelant et non à un cache.","emittedOn":["toutes les réponses"],"headers":["X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Window"],"refusalOnly":["Retry-After"]},"security":[{"apiKey":[]},{"oauth2":["openid","offline_access"]}],"tags":[{"name":"Compte"},{"name":"Voix"},{"name":"Mesure"},{"name":"Certificat"},{"name":"Écriture"},{"name":"Projets"},{"name":"Documents"},{"name":"Cycle de vie"}],"paths":{"/api/v1/me":{"get":{"operationId":"getAccount","summary":"Palier + crédits du compte","tags":["Compte"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"get_account","x-kaneme-timeout-seconds":10,"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountStatus"},"example":{"tier":"free","credits":{"used":2,"limit":4,"remaining":12,"purchased":10,"exhausted":false},"meters":{"voice":{"meter":"voice","window":"daily","resetAt":"2026-08-23T00:00:00.000Z","used":2,"limit":4,"remaining":12,"exhausted":false,"topup":10}}}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/estimate":{"get":{"operationId":"estimateCost","summary":"Ce qu’une action coûtera AVANT de la lancer — sans argument, tout le tarif","tags":["Compte"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"estimate_cost","x-kaneme-timeout-seconds":15,"parameters":[{"name":"operation","in":"query","required":false,"schema":{"type":"string","enum":["generate","improve","run_recipe","verify","compare","score","certify","create_voice","add_project_context","add_voice_asset","create_document","create_project","save_source","record_signal","read"]},"description":"Opération à chiffrer (ex. « generate »). Sans elle, la réponse rend TOUT le tarif."},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["draft","outline","section","challenge","bar-test","workflow"]},"description":"Variante de l’opération, quand elle en a une (operation=\"generate\")."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostEstimate"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/voices":{"get":{"operationId":"listVoices","summary":"Liste tes voix (id, laquelle est active, maturité) — pour choisir laquelle utiliser","tags":["Voix"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_voices","x-kaneme-timeout-seconds":60,"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"operationId":"createVoice","summary":"Crée une voix (interview, ou tes vrais textes — provenance:\"human\" exigée)","tags":["Voix"],"x-kaneme-credits":"5","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:write","x-kaneme-risk":"write","x-kaneme-mcp-tool":"create_voice","x-kaneme-timeout-seconds":60,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["interview","samples"],"description":"Mode de création (interview ou textes fournis)."},"text":{"type":"string","description":"Tes vrais textes, quand le mode en attend."},"name":{"type":"string","description":"Nom de la voix."},"provenance":{"type":"string","enum":["human"],"description":"« human » exigé : une voix apprise sur du texte de machine n’apprend pas une voix. Le refus est le travail de la route, pas un défaut."}},"additionalProperties":{},"required":["text"]},"example":{"mode":"samples","name":"Ma voix LinkedIn","text":"Trois textes que j’ai vraiment écrits, collés bout à bout…","provenance":"human"}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceCreated"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/voice":{"get":{"operationId":"getVoice","summary":"Carte d’UNE voix : génome public, maturité, calibrage, et ce qui a changé dans le temps","tags":["Voix"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"get_voice","x-kaneme-timeout-seconds":15,"parameters":[{"name":"profileId","in":"query","required":false,"schema":{"type":"string"},"description":"Voix visée. Par défaut, la voix active du compte."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Voice"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/voice/assets":{"get":{"operationId":"listVoiceAssets","summary":"Le COFFRE d’une voix : ce avec quoi tu prouves (preuves, cas clients, témoignages…)","tags":["Voix"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_voice_assets","x-kaneme-timeout-seconds":60,"parameters":[{"name":"profileId","in":"query","required":false,"schema":{"type":"string"},"description":"Voix visée. Par défaut, la voix active du compte."},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["preuve","cas_client","temoignage","resultat","histoire"]},"description":"Filtre par nature de pièce."},{"name":"limit","in":"query","required":false,"schema":{"type":"number"},"description":"Taille de page (max 100)."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur de pagination rendu par l’appel précédent. Un curseur illisible est une ERREUR, jamais un retour au début — sans quoi l’appelant boucle sur la première page en croyant avancer."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceAssetList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"operationId":"addVoiceAsset","summary":"Verse une preuve au Coffre — kind requis, provenance:\"human\" exigée sur les preuves","tags":["Voix"],"x-kaneme-credits":"1","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:write","x-kaneme-risk":"write","x-kaneme-mcp-tool":"add_voice_asset","x-kaneme-timeout-seconds":60,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Contenu de la pièce."},"kind":{"type":"string","enum":["preuve","cas_client","temoignage","resultat","histoire"],"description":"Nature de la pièce."},"title":{"type":"string","description":"Intitulé."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."},"provenance":{"type":"string","enum":["human"],"description":"« human » exigé sur les preuves."}},"additionalProperties":{},"required":["text","kind"]},"example":{"text":"En six semaines, l’équipe est passée de 40 à 12 tickets ouverts par jour.","kind":"resultat","title":"Réduction du backlog — client industrie","provenance":"human"}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceAssetAdded"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/voice/beliefs":{"get":{"operationId":"listBeliefs","summary":"Tes convictions : les positions injectées à chaque génération (lecture seule)","tags":["Voix"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_beliefs","x-kaneme-timeout-seconds":15,"parameters":[{"name":"profileId","in":"query","required":false,"schema":{"type":"string"},"description":"Voix visée. Par défaut, la voix active du compte."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["proposed","confirmed","rejected","archived"]},"description":"Filtre par statut."},{"name":"limit","in":"query","required":false,"schema":{"type":"number"},"description":"Taille de page (max 100)."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur de pagination rendu par l’appel précédent. Un curseur illisible est une ERREUR, jamais un retour au début — sans quoi l’appelant boucle sur la première page en croyant avancer."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeliefList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/voice/subvoices":{"get":{"operationId":"listSubvoices","summary":"Tes sous-voix par canal — pourquoi un texte sort autrement selon le format","tags":["Voix"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_subvoices","x-kaneme-timeout-seconds":15,"parameters":[{"name":"profileId","in":"query","required":false,"schema":{"type":"string"},"description":"Voix visée. Par défaut, la voix active du compte."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubvoiceList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/signal":{"post":{"operationId":"recordSignal","summary":"Fais APPRENDRE la voix : accepté / rejeté / rejet qualifié — gratuit","tags":["Voix"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:write","x-kaneme-risk":"write","x-kaneme-mcp-tool":"record_signal","x-kaneme-timeout-seconds":15,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["accept","reject","reject_reason"],"description":"« accept » (la sortie lui ressemble), « reject » (pas tout à fait), « reject_reason » (qualifie un rejet déjà envoyé — n’ajoute PAS un second signal)."},"reason":{"type":"string","enum":["trop_corporate","trop_long","pas_assez_direct","trop_generique","mauvais_angle"],"description":"Raison du rejet, pour « reject_reason » seulement. Une raison inconnue est refusée."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."},"format":{"type":"string","enum":["newsletter","linkedin_post","tweet_short","thread","tiktok_script","instagram","blog","marketing_page","academic_article"],"description":"Canal du texte jugé. C’est LUI qui nourrit le compteur par format, donc la sous-voix de ce canal — sans lui, le signal ne compte que globalement."},"projectId":{"type":"string","description":"Projet concerné, pour le journal de la voix."},"documentId":{"type":"string","description":"Document concerné, pour le journal de la voix."},"sourceTitle":{"type":"string","description":"Intitulé lisible dans le journal."},"proposed":{"type":"string","description":"Le TEXTE que la machine avait proposé (avec « reject »). À envoyer avec `kept` : le signal de réécriture est dérivé serveur des deux textes, jamais reçu tout fait."},"kept":{"type":"string","description":"Le TEXTE remis à la place par l’auteur. Sans lui, `proposed` est ignoré."}},"additionalProperties":{},"required":["kind"]},"example":{"kind":"reject","format":"linkedin_post","proposed":"Le texte que la machine avait proposé.","kept":"Le texte que j’ai remis à la place."}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalRecorded"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/score":{"post":{"operationId":"scoreText","summary":"Fidélité de style 0-100 — ne dit PAS qui a écrit","tags":["Mesure"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:measure","x-kaneme-risk":"measure","x-kaneme-mcp-tool":"score_text","x-kaneme-timeout-seconds":15,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Texte à mesurer."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."}},"additionalProperties":{},"required":["text"]},"example":{"text":"Le texte à mesurer, en français, d’au moins quelques phrases."}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceScore"},"example":{"profileId":"5b7e2c10-8a44-4f39-9d02-6c1b3a7e8f21","score":{"score":61,"scored":true,"confidence":"medium","wordCount":214,"version":"vms-2.1","language":"fr","label":"Quelques automatismes"},"measures":"Fidélité de style (rythme, lexique, mots-robots) — PAS une attribution d’auteur.","authorshipVia":"verify","dimensions":[{"id":"rythme","label":"Rythme","measured":true,"score":54,"detail":"Phrases plus régulières que dans tes textes."},{"id":"lexique","label":"Lexique","measured":true,"score":72,"detail":"Vocabulaire proche du tien."},{"id":"structure","label":"Structure","measured":true,"score":66,"detail":"Découpage un peu plus scolaire."},{"id":"signature","label":"Signature","measured":false,"score":null,"detail":"Demande un corpus de référence."}],"dimensionsVersion":"dim-1.1"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/verify":{"post":{"operationId":"verifyAuthorship","summary":"Paternité en PROBABILITÉ calibrée — ta voix face à celle de l’IA, ou face à un autre humain","tags":["Mesure"],"x-kaneme-credits":"1","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:measure","x-kaneme-risk":"measure","x-kaneme-mcp-tool":"verify_authorship","x-kaneme-timeout-seconds":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Texte à attribuer."},"question":{"type":"string","enum":["q1","q2","human","author"],"description":"q1 = ta voix contre celle de l’IA ; q2 = toi contre un autre humain. Mesuré face à des IA à qui on avait donné tes textes pour écrire comme toi. Les aliases historiques human/author restent acceptés."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."}},"additionalProperties":{},"required":["text"]},"example":{"text":"Le texte dont on veut savoir s’il est de ma main.","question":"q1"}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorshipVerdict"},"example":{"axis":"q1","question":"human","probability":null,"unavailable":"unsupported_language","profileId":"5b7e2c10-8a44-4f39-9d02-6c1b3a7e8f21","score":38,"version":"vms-2.1+panel-1.0+fusion-1.4","carries":false,"selfOverlap":0.04,"label":"Vérification impossible","confidence":"none","creditsUsed":0,"disclaimer":"Indice, jamais une preuve opposable. Aucun crédit débité : une mesure qu’on refuse de rendre n’a pas à être payée."}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/compare":{"post":{"operationId":"compareTexts","summary":"Compare un texte à une référence FOURNIE (autre auteur collé, ou une autre voix)","tags":["Mesure"],"x-kaneme-credits":"2","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:measure","x-kaneme-risk":"measure","x-kaneme-mcp-tool":"compare_texts","x-kaneme-timeout-seconds":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Texte à comparer."},"reference":{"type":"string","description":"Référence collée telle quelle."},"referenceProfileId":{"type":"string","description":"Ou l’id d’une voix servant de référence."},"question":{"type":"string","enum":["q1","q2","human","author"],"description":"q1 (contre IA) ou q2 (contre un autre humain). Aliases human/author acceptés."}},"additionalProperties":{},"required":["text"]},"example":{"text":"Le texte à attribuer.","reference":"Un texte dont on est sûr qu’il vient de la personne de référence.","question":"q2"}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComparisonVerdict"},"example":{"axis":"q2","question":"author","probability":0.67,"score":76,"stylometricSimilarity":71,"label":"Auteur plausible","confidence":"medium","referenceKind":"text","selfOverlap":0.03,"creditsUsed":1,"disclaimer":"Indice, jamais une preuve opposable.","explanation":{"version":"q2-explain-1.0","summary":"Les écarts observables principaux portent sur la cadence et le registre.","caveat":"Ces écarts décrivent la couche stylométrique explicable. Ils éclairent Q2 sans décomposer sa probabilité, qui dépend surtout de la couche profonde.","factors":[{"id":"cadence","label":"Cadence","status":"different","gap":0.42,"detail":"Phrases plus longues : environ 18 mots contre 11 dans la Voix."},{"id":"registre","label":"Registre","status":"mixed","gap":0.24,"detail":"Registre plus soutenu que dans la Voix."},{"id":"structure","label":"Structure","status":"aligned","gap":0.08,"detail":"Découpage, connecteurs et emphase proches de la Voix."},{"id":"lexique","label":"Lexique","status":"aligned","gap":0.11,"detail":"Poids, variété et niveau de jargon proches de la Voix."}]}}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/certify":{"post":{"operationId":"certifyDocument","summary":"Émet le certificat PUBLIC d’un document (« ce texte signe ma voix »)","tags":["Mesure"],"x-kaneme-credits":"3","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:certify","x-kaneme-risk":"publish","x-kaneme-mcp-tool":"certify_document","x-kaneme-timeout-seconds":60,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document à certifier."},"displayName":{"type":"string","description":"Nom affiché sur le certificat."}},"additionalProperties":{},"required":["documentId"]},"example":{"documentId":"9c1f6f0e-4b3a-4d21-9a8f-2e0b7c5d1a44","displayName":"Awa Diallo"}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificatePublished"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/certificates/prepare":{"post":{"operationId":"prepareCertificate","summary":"Prépare et chiffre une publication de certificat, sans débit ni publication","tags":["Certificat"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:certify","x-kaneme-risk":"publish","x-kaneme-mcp-tool":"prepare_certificate","x-kaneme-timeout-seconds":15,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document à prévisualiser."},"displayName":{"type":"string","description":"Nom public proposé."}},"additionalProperties":{},"required":["documentId"]}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificatePreparation"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/certificates/publish":{"post":{"operationId":"publishCertificate","summary":"Publie un certificat préparé et approuvé ; renvoie page, JSON et badge SVG","tags":["Certificat"],"x-kaneme-credits":"3","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:certify","x-kaneme-risk":"publish","x-kaneme-mcp-tool":"publish_certificate","x-kaneme-timeout-seconds":60,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"approvalId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Ticket préparé, approuvé et non expiré."}},"additionalProperties":{},"required":["approvalId"]}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertifyResult"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/certificate/{token}":{"get":{"operationId":"verifyCertificate","summary":"Vérifie un certificat par son token (public, sans crédit) — « ce texte est-il attesté de X ? »","tags":["Certificat"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":null,"x-kaneme-risk":"read","x-kaneme-mcp-tool":"verify_certificate","x-kaneme-timeout-seconds":15,"security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"},"description":"Identifiant de la ressource."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateVerification"}}}},"400":{"$ref":"#/components/responses/Invalide"},"404":{"$ref":"#/components/responses/Introuvable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"}}}},"/api/v1/generate":{"post":{"operationId":"generateInVoice","summary":"Écrit dans ta voix (draft, outline, section, challenge, bar-test, workflow)","tags":["Écriture"],"x-kaneme-credits":"1-2","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:generate","x-kaneme-risk":"generate","x-kaneme-mcp-tool":"generate_in_voice","x-kaneme-timeout-seconds":60,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"Ce qu’il faut écrire (max 24 000 caractères)."},"type":{"type":"string","enum":["draft","outline","section","challenge","bar-test","workflow"],"description":"Type de sortie."},"instruction":{"type":"string","description":"Consigne complémentaire (max 8 000 caractères)."},"format":{"type":"string","enum":["newsletter","linkedin_post","tweet_short","thread","tiktok_script","instagram","blog","marketing_page","academic_article"],"description":"Canal visé."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."},"projectId":{"type":"string","description":"Projet dont le contexte nourrit la génération."},"inspect":{"type":"boolean","description":"Joint le détail de ce qui a influencé la génération (voix, sous-voix, convictions, RAG…) avec le poids de chacun, jamais leur contenu. Sans coût."},"save":{"type":"boolean","description":"Range le texte produit dans l’espace de l’utilisateur, avec le format DE L’APPEL et provenance:\"ai\" (jamais surchargeable — une sortie IA n’est pas une ancre humaine). C’est ce qui donne au canal son corpus, donc sa sous-voix. Gratuit. Le rangement est best-effort : s’il échoue, la réponse porte saved:false et le texte reste rendu — ne relance pas la génération, elle est payée."},"title":{"type":"string","description":"Titre du document rangé (avec save). Sans lui, dérivé de la première ligne du texte."}},"additionalProperties":{},"required":["prompt"]},"example":{"prompt":"3 leçons de mon dernier projet client","type":"draft","format":"linkedin_post","save":true}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResult"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/improve":{"post":{"operationId":"improveInVoice","summary":"Réécrit un TEXTE EXISTANT dans ta voix (passe corrective) — « améliore ce contenu »","tags":["Écriture"],"x-kaneme-credits":"2","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:generate","x-kaneme-risk":"generate","x-kaneme-mcp-tool":"improve_in_voice","x-kaneme-timeout-seconds":30,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Texte à reprendre."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."}},"additionalProperties":{},"required":["text"]},"example":{"text":"Le brouillon déjà écrit, à repasser dans ma voix."}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImproveResult"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/recipes":{"get":{"operationId":"listRecipes","summary":"Tes recettes (Prompts) et le catalogue Kaneme","tags":["Écriture"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_recipes","x-kaneme-timeout-seconds":15,"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"number"},"description":"Taille de page (max 100)."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur de pagination rendu par l’appel précédent. Un curseur illisible est une ERREUR, jamais un retour au début — sans quoi l’appelant boucle sur la première page en croyant avancer."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/recipes/{recipeId}/run":{"post":{"operationId":"runRecipe","summary":"Rejoue une recette sur un texte, dans ta voix","tags":["Écriture"],"x-kaneme-credits":"1","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:generate","x-kaneme-risk":"generate","x-kaneme-mcp-tool":"run_recipe","x-kaneme-timeout-seconds":60,"parameters":[{"name":"recipeId","in":"path","required":true,"schema":{"type":"string"},"description":"Identifiant de la ressource."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Texte d’entrée."},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Variables de la recette."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."},"projectId":{"type":"string","description":"Projet de rattachement."},"format":{"type":"string","enum":["newsletter","linkedin_post","tweet_short","thread","tiktok_script","instagram","blog","marketing_page","academic_article"],"description":"Canal visé."}},"additionalProperties":{},"required":["text"]},"example":{"text":"Le texte d’entrée de la recette.","variables":{"audience":"fondateurs de startups"},"format":"newsletter"}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeRunResult"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/projects":{"get":{"operationId":"listProjects","summary":"Liste tes projets — pour savoir où ranger","tags":["Projets"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_projects","x-kaneme-timeout-seconds":15,"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"number"},"description":"Taille de page (max 100)."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur de pagination rendu par l’appel précédent. Un curseur illisible est une ERREUR, jamais un retour au début — sans quoi l’appelant boucle sur la première page en croyant avancer."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"operationId":"createProject","summary":"Crée un projet (mémoire de marque) relié à une voix","tags":["Projets"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:write","x-kaneme-risk":"write","x-kaneme-mcp-tool":"create_project","x-kaneme-timeout-seconds":15,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Nom du projet."},"instructions":{"type":"string","description":"Consignes permanentes du projet."},"context":{"type":"string","description":"Contexte initial."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."}},"additionalProperties":{},"required":["name"]},"example":{"name":"Lancement Q4","instructions":"Toujours parler au « nous ». Jamais de superlatifs."}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreated"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/sources":{"post":{"operationId":"addProjectContext","summary":"Ajoute au CONTEXTE d’un projet (recherche web, notes) — nourrit le RAG, pas l’onglet Sources","tags":["Projets"],"x-kaneme-credits":"1","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:write","x-kaneme-risk":"write","x-kaneme-mcp-tool":"add_project_context","x-kaneme-timeout-seconds":60,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"Projet nourri."},"text":{"type":"string","description":"Matière versée au contexte."},"title":{"type":"string","description":"Intitulé."}},"additionalProperties":{},"required":["projectId","text"]},"example":{"projectId":"3f2a91c7-58d6-4e0b-b1aa-7c9d2e4f6b10","text":"Notes de l’entretien client du 12/08 : le sujet qui revient est le délai de mise en route.","title":"Entretien client — 12/08"}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectContextAdded"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/projects/{projectId}/contexts":{"get":{"operationId":"listProjectContexts","summary":"Liste la matière vectorisée d’un projet, active, archivée ou à la corbeille","tags":["Projets"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_project_contexts","x-kaneme-timeout-seconds":15,"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":"Identifiant de la ressource."},{"name":"includeArchived","in":"query","required":false,"schema":{"type":"boolean"},"description":"Inclure les pièces archivées."},{"name":"includeTrashed","in":"query","required":false,"schema":{"type":"boolean"},"description":"Inclure les pièces à la corbeille."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectContextList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/sources/inbox":{"get":{"operationId":"listSources","summary":"Lit l’onglet Sources : ta matière à trier (inbox · saved · used · archived)","tags":["Projets"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_sources","x-kaneme-timeout-seconds":15,"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["inbox","saved","used","archived"]},"description":"Filtre par statut de tri."},{"name":"limit","in":"query","required":false,"schema":{"type":"number"},"description":"Taille de page (max 100)."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur de pagination rendu par l’appel précédent. Un curseur illisible est une ERREUR, jamais un retour au début — sans quoi l’appelant boucle sur la première page en croyant avancer."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"operationId":"saveSource","summary":"Dépose une trouvaille dans l’onglet Sources — gratuit, réversible, c’est toi qui tries","tags":["Projets"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:write","x-kaneme-risk":"write","x-kaneme-mcp-tool":"save_source","x-kaneme-timeout-seconds":15,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Titre de la trouvaille."},"url":{"type":"string","description":"Adresse d’origine."},"content":{"type":"string","description":"Contenu complet."},"excerpt":{"type":"string","description":"Extrait."},"author":{"type":"string","description":"Auteur."},"publishedAt":{"type":"string","description":"Date de publication."},"projectId":{"type":"string","description":"Projet de rattachement."},"isOwnWriting":{"type":"boolean","description":"Déclare que c’est TON écrit. Déclaratif, jamais détecté."}},"additionalProperties":{},"required":["title"]},"example":{"title":"Étude sectorielle 2026","url":"https://example.org/etude-2026","excerpt":"Les deux tiers des répondants citent le temps de prise en main."}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceSaved"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/documents":{"get":{"operationId":"listDocuments","summary":"Liste tes documents","tags":["Documents"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"list_documents","x-kaneme-timeout-seconds":15,"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"number"},"description":"Taille de page (max 100)."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Curseur de pagination rendu par l’appel précédent. Un curseur illisible est une ERREUR, jamais un retour au début — sans quoi l’appelant boucle sur la première page en croyant avancer."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"post":{"operationId":"createDocument","summary":"Crée un document (Markdown, voix, canal, provenance)","tags":["Documents"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:write","x-kaneme-risk":"write","x-kaneme-mcp-tool":"create_document","x-kaneme-timeout-seconds":15,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Titre (max 300 caractères)."},"markdown":{"type":"string","description":"Corps en Markdown (max 120 000 caractères)."},"projectId":{"type":"string","description":"Projet de rattachement."},"profileId":{"type":"string","description":"Voix visée. Par défaut, la voix active du compte."},"format":{"type":"string","enum":["newsletter","linkedin_post","tweet_short","thread","tiktok_script","instagram","blog","marketing_page","academic_article"],"description":"Canal visé."},"provenance":{"type":"string","enum":["human","ai"],"description":"Origine déclarée du texte."},"sourceId":{"type":"string","description":"Source dont il découle."}},"additionalProperties":{},"required":["title"]},"example":{"title":"Post — leçons du projet client","markdown":"## Ce que j’ai appris\n\nTrois choses, dans l’ordre où elles m’ont coûté cher.","format":"linkedin_post","provenance":"human"}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentCreated"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/documents/{id}":{"get":{"operationId":"getDocument","summary":"Lit un document (texte + HTML)","tags":["Documents"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:read","x-kaneme-risk":"read","x-kaneme-mcp-tool":"get_document","x-kaneme-timeout-seconds":15,"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Identifiant de la ressource."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Document"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"patch":{"operationId":"updateDocument","summary":"Corrige un document existant plutôt que d’en créer un second","tags":["Documents"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:write","x-kaneme-risk":"write","x-kaneme-mcp-tool":"update_document","x-kaneme-timeout-seconds":15,"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Identifiant de la ressource."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Nouveau titre."},"markdown":{"type":"string","description":"Nouveau corps."},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nouveau projet (null pour détacher)."},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nouvelle voix (null pour détacher)."},"format":{"anyOf":[{"type":"string","enum":["newsletter","linkedin_post","tweet_short","thread","tiktok_script","instagram","blog","marketing_page","academic_article"]},{"type":"null"}],"description":"Nouveau canal."},"provenance":{"type":"string","enum":["human","ai"],"description":"Nouvelle provenance."}},"additionalProperties":{}},"example":{"markdown":"## Ce que j’ai appris\n\nQuatre choses, finalement."}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUpdated"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}},"delete":{"operationId":"deleteDocument","summary":"Met le document à la corbeille (restaurable 30 jours)","tags":["Documents"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:manage","x-kaneme-risk":"manage","x-kaneme-mcp-tool":"delete_document","x-kaneme-timeout-seconds":15,"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Identifiant de la ressource."}],"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentDeleted"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/trash":{"get":{"operationId":"listTrash","summary":"Liste la corbeille restaurable ; aucune purge définitive par API/MCP","tags":["Cycle de vie"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:manage","x-kaneme-risk":"manage","x-kaneme-mcp-tool":"list_trash","x-kaneme-timeout-seconds":15,"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrashList"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}},"/api/v1/lifecycle":{"post":{"operationId":"manageLifecycle","summary":"Prévisualise ou applique jusqu’à 10 archivages, mises à la corbeille, restaurations ou révocations","tags":["Cycle de vie"],"x-kaneme-credits":"0","x-kaneme-credit-meter":"voice","x-kaneme-required-scope":"voice:manage","x-kaneme-risk":"manage","x-kaneme-mcp-tool":"manage_lifecycle","x-kaneme-timeout-seconds":30,"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Rejouer le même appel avec la même clé rend le premier résultat sans re-débiter. Présent uniquement sur les opérations qui l’honorent réellement."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","enum":["document","project","voice","source","project_context","voice_asset","document_certificate","voice_certificate"]},"resourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action":{"type":"string","enum":["trash","restore","archive","unarchive","revoke","expire","unexpire"]},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["resourceType","resourceId","action"],"additionalProperties":{}},"description":"Tableau de 1 à 10 actions de cycle de vie."},"dryRun":{"type":"boolean","description":"true = vérifie et prévisualise sans modifier."}},"additionalProperties":{},"required":["items"]}}}},"responses":{"200":{"description":"Succès.","headers":{"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"},"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifecycleResult"}}}},"400":{"$ref":"#/components/responses/Invalide"},"401":{"$ref":"#/components/responses/NonAutorise"},"402":{"$ref":"#/components/responses/CreditsEpuises"},"404":{"$ref":"#/components/responses/Introuvable"},"409":{"$ref":"#/components/responses/Conflit"},"422":{"$ref":"#/components/responses/NonMesurable"},"429":{"$ref":"#/components/responses/TropDAppels"},"500":{"$ref":"#/components/responses/ErreurServeur"},"503":{"$ref":"#/components/responses/Indisponible"}}}}},"components":{"schemas":{"ApiError":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]},"AccountStatus":{"type":"object","properties":{"tier":{"type":"string"},"credits":{"type":"object","properties":{"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]},"remaining":{"anyOf":[{"type":"number"},{"type":"null"}]},"purchased":{"type":"number"},"exhausted":{"type":"boolean"}},"required":["used","limit","remaining","purchased","exhausted"],"additionalProperties":{}},"meters":{"type":"object","properties":{"voice":{"type":"object","properties":{"meter":{"type":"string","enum":["voice","radar"]},"window":{"type":"string","enum":["day","period"]},"resetAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]},"remaining":{"anyOf":[{"type":"number"},{"type":"null"}]},"exhausted":{"type":"boolean"},"topup":{"type":"number"}},"required":["meter","window","resetAt","used","limit","remaining","exhausted","topup"],"additionalProperties":{}}},"required":["voice"],"additionalProperties":{}}},"required":["tier","credits","meters"],"additionalProperties":{}},"CostEstimate":{"type":"object","properties":{"estimate":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string"},"credits":{"type":"number"},"conditional":{"type":"boolean"},"note":{"type":"string"}},"required":["operation","credits","conditional","note"],"additionalProperties":{}},{"type":"null"}]},"pricing":{"type":"array","items":{"type":"object","properties":{"operation":{"type":"string"},"credits":{"type":"number"},"conditional":{"type":"boolean"},"note":{"type":"string"}},"required":["operation","credits","conditional","note"],"additionalProperties":{}}},"credits":{"type":"object","properties":{"remaining":{"anyOf":[{"type":"number"},{"type":"null"}]},"exhausted":{"type":"boolean"}},"required":["remaining","exhausted"],"additionalProperties":{}},"affordable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"disclaimer":{"type":"string"}},"required":["estimate","pricing","credits","affordable","disclaimer"],"additionalProperties":{}},"VoiceList":{"type":"object","properties":{"voices":{"type":"array","items":{"type":"object","properties":{"profileId":{"type":"string"},"name":{"type":"string"},"active":{"type":"boolean"},"maturityPercent":{"type":"number"},"maturityLevel":{"type":"string"},"calibration":{"type":"object","properties":{"level":{"type":"number"},"signals":{"type":"number"}},"required":["level","signals"],"additionalProperties":{}},"topFormats":{"type":"array","items":{"type":"string"}},"referenceWords":{"type":"number"},"referenceTier":{"type":"string","enum":["insuffisant","partiel","chiffre","haute"]},"canCertify":{"type":"boolean"},"referenceNote":{"type":"string"}},"required":["profileId","name","active","maturityPercent","maturityLevel","calibration","topFormats","referenceWords","referenceTier","canCertify","referenceNote"],"additionalProperties":{}}}},"required":["voices"],"additionalProperties":{}},"VoiceCreated":{"type":"object","properties":{"profileId":{"type":"string"},"name":{"type":"string"},"fileName":{"type":"string"},"mode":{"type":"string","enum":["interview","samples"]},"active":{"type":"boolean"},"filledPlaceholder":{"type":"boolean"},"seededCorpus":{"type":"boolean"},"aboutMeChars":{"type":"number"},"referenceWords":{"type":"number"},"referenceTier":{"type":"string","enum":["insuffisant","partiel","chiffre","haute"]},"referenceNote":{"type":"string"},"creditsUsed":{"type":"number"}},"required":["profileId","name","fileName","mode","active","filledPlaceholder","seededCorpus","aboutMeChars","referenceWords","referenceTier","referenceNote","creditsUsed"],"additionalProperties":{}},"Voice":{"type":"object","properties":{"profileId":{"type":"string"},"name":{"type":"string"},"maturityPercent":{"type":"number"},"maturityLevel":{"type":"string"},"calibration":{"type":"object","properties":{"level":{"type":"number"},"signals":{"type":"number"}},"required":["level","signals"],"additionalProperties":{}},"signatureWordCount":{"type":"number"},"bannedWordCount":{"type":"number"},"topFormats":{"type":"array","items":{"type":"string"}},"genome":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"activeCount":{"type":"number"},"strandCount":{"type":"number"},"strands":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["identite","style","cadence","lexique","convictions","sous_voix","rejets","coffre"]},"label":{"type":"string"},"active":{"type":"boolean"}},"required":["id","label","active"],"additionalProperties":{}}}},"required":["version","activeCount","strandCount","strands"],"additionalProperties":{}},{"type":"null"}]},"trajectory":{"anyOf":[{"type":"object","properties":{"version":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"spanDays":{"type":"number"},"shifts":{"type":"array","items":{"type":"object","properties":{"axis":{"type":"string"},"label":{"type":"string"},"direction":{"type":"string","enum":["up","down"]},"gap":{"type":"number"}},"required":["axis","label","direction","gap"],"additionalProperties":{}}},"sentence":{"type":"string"},"note":{"type":"string"}},"required":["version","from","to","spanDays","shifts","sentence","note"],"additionalProperties":{}},{"type":"null"}]}},"required":["profileId","name","maturityPercent","maturityLevel","calibration","signatureWordCount","bannedWordCount","topFormats","genome","trajectory"],"additionalProperties":{}},"VoiceAssetList":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}]},"kindLabel":{"type":"string"},"isProof":{"type":"boolean"},"sizeBytes":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"string"}},"required":["id","title","kind","kindLabel","isProof","sizeBytes","createdAt"],"additionalProperties":{}}},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["assets","profileId","nextCursor"],"additionalProperties":{}},"VoiceAssetAdded":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"fileId":{"type":"string"},"chunksProcessed":{"type":"number"},"profileId":{"type":"string"},"kind":{"type":"string"},"creditsUsed":{"type":"number"}},"required":["ok","fileId","chunksProcessed","profileId","kind","creditsUsed"],"additionalProperties":{}},"BeliefList":{"type":"object","properties":{"beliefs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"statement":{"type":"string"},"nuance":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string"},"origin":{"type":"string"},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"applied":{"type":"boolean"},"updatedAt":{"type":"string"}},"required":["id","statement","nuance","status","origin","profileId","applied","updatedAt"],"additionalProperties":{}}},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["beliefs","profileId","nextCursor"],"additionalProperties":{}},"SubvoiceList":{"type":"object","properties":{"subvoices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"format":{"type":"string"},"active":{"type":"boolean"},"hasDelta":{"type":"boolean"},"divergence":{"anyOf":[{"type":"number"},{"type":"null"}]},"drivers":{"type":"array","items":{"type":"string"}},"signalCount":{"type":"number"},"calibrationLevel":{"type":"number"},"updatedAt":{"type":"string"}},"required":["id","format","active","hasDelta","divergence","drivers","signalCount","calibrationLevel","updatedAt"],"additionalProperties":{}}},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["subvoices","profileId"],"additionalProperties":{}},"SignalRecorded":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"profileId":{"type":"string"},"kind":{"type":"string","const":"reject_reason"},"total":{"type":"number"}},"required":["ok","profileId","kind","total"],"additionalProperties":{}},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"profileId":{"type":"string"},"kind":{"type":"string","enum":["accept","reject"]},"calibration":{"type":"object","properties":{"level":{"type":"number"},"signals":{"type":"number"},"inLevel":{"type":"number"},"forNext":{"type":"number"},"toNext":{"type":"number"}},"required":["level","signals","inLevel","forNext","toNext"],"additionalProperties":{}}},"required":["ok","profileId","kind","calibration"],"additionalProperties":{}}]},"VoiceScore":{"type":"object","properties":{"profileId":{"type":"string"},"score":{"type":"object","properties":{"score":{"type":"number"},"scored":{"type":"boolean"},"confidence":{"type":"string","enum":["none","low","medium","high"]},"wordCount":{"type":"number"},"version":{"type":"string"},"language":{"type":"string"},"markerLanguage":{"type":"string"},"inDomain":{"type":"boolean"},"robotWords":{"type":"number"},"signatureHits":{"type":"number"},"emDashes":{"type":"number"},"templateMarkers":{"type":"number"},"penalties":{"type":"object","properties":{"robot":{"type":"number"},"emDash":{"type":"number"},"monotony":{"type":"number"},"template":{"type":"number"},"style":{"type":"number"},"signatureBonus":{"type":"number"}},"required":["robot","emDash","monotony","template","style","signatureBonus"],"additionalProperties":{}},"avgSentenceLength":{"type":"number"},"sentenceVariety":{"type":"number"},"label":{"type":"string"},"drivers":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string","enum":["avgSentenceLen","sentenceLenStdev","avgWordLen","typeTokenRatio","questionRate","exclamationRate","ellipsisRate","emojiRate","firstPersonRate","listRate","emphasisRate","hedgeRate","certaintyRate","formalityRate","connectorRate","jargonRate"]},"label":{"type":"string"},"gap":{"type":"number"}},"required":["metric","label","gap"],"additionalProperties":{}}}},"required":["score","scored","confidence","wordCount","version","language","markerLanguage","inDomain","robotWords","signatureHits","emDashes","templateMarkers","penalties","avgSentenceLength","sentenceVariety","label"],"additionalProperties":{}},"measures":{"type":"string"},"authorshipVia":{"type":"string","const":"verify"},"labelUnavailable":{"type":"string","enum":["too_short","unsupported_language","band_not_discriminating","band_never_measured"]},"dimensions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["rythme","lexique","structure","signature"]},"label":{"type":"string"},"measured":{"type":"boolean"},"score":{"anyOf":[{"type":"number"},{"type":"null"}]},"detail":{"type":"string"}},"required":["id","label","measured","score","detail"],"additionalProperties":{}},"description":"Sur quoi le texte s’écarte de la voix : rythme, lexique, structure, signature. Ce n’est PAS la décomposition de score : corriger les quatre dimensions à 100 ne produit pas un score de 100."},"dimensionsVersion":{"type":"string"}},"required":["profileId","score","measures","authorshipVia","dimensions","dimensionsVersion"],"additionalProperties":{}},"AuthorshipVerdict":{"type":"object","properties":{"question":{"type":"string","enum":["author","human"]},"probability":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"unavailable":{"type":"string","enum":["self_overlap","unsupported_language","embedding_layer","out_of_distribution"],"description":"self_overlap — Le texte à juger est déjà, pour l’essentiel, dans la référence qui le juge : la mesure porterait sur elle-même. Juge un texte que la référence ne contient pas — ou retire-le du corpus de cette voix. · unsupported_language — Le texte n’est pas en français, et le verdict n’est calibré que sur le français. Lis le champ `language` de la réponse avant d’appeler : hors français, ne demande pas de verdict. · embedding_layer — La couche de mesure profonde n’a pas répondu ; sans elle, aucune probabilité n’est calibrée. Réessaie dans un instant — c’est la seule des quatre causes qui soit un incident de notre côté. · out_of_distribution — Le panel de contraste ne couvre pas le registre de cette voix : la marge existerait, elle ne voudrait rien dire. Verse dans la voix des textes de référence plus proches du registre mesuré."},"language":{"type":"string"},"score":{"type":"number","minimum":0,"maximum":100},"version":{"type":"string"},"explanation":{"type":"object","properties":{"version":{"type":"string"},"summary":{"type":"string"},"caveat":{"type":"string"},"factors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["cadence","registre","structure","lexique"]},"label":{"type":"string"},"status":{"type":"string","enum":["aligned","mixed","different","unmeasured"]},"gap":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"detail":{"type":"string"}},"required":["id","label","status","gap","detail"],"additionalProperties":{}}}},"required":["version","summary","caveat","factors"],"additionalProperties":{}},"axis":{"type":"string","enum":["q1","q2"]},"profileId":{"type":"string"},"label":{"type":"string"},"confidence":{"type":"string"},"carries":{"type":"boolean"},"selfOverlap":{"type":"number","minimum":0,"maximum":1},"creditsUsed":{"type":"integer","minimum":0,"maximum":9007199254740991},"disclaimer":{"type":"string"}},"required":["question","probability","score","version","axis","profileId","label","confidence","carries","selfOverlap","creditsUsed","disclaimer"],"additionalProperties":{}},"ComparisonVerdict":{"type":"object","properties":{"axis":{"type":"string","enum":["q1","q2"]},"question":{"type":"string","enum":["human","author"]},"probability":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"unavailable":{"type":"string","enum":["self_overlap","unsupported_language","embedding_layer","out_of_distribution"]},"explanation":{"type":"object","properties":{"version":{"type":"string"},"summary":{"type":"string"},"caveat":{"type":"string"},"factors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["cadence","registre","structure","lexique"]},"label":{"type":"string"},"status":{"type":"string","enum":["aligned","mixed","different","unmeasured"]},"gap":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"detail":{"type":"string"}},"required":["id","label","status","gap","detail"],"additionalProperties":{}}}},"required":["version","summary","caveat","factors"],"additionalProperties":{}},"language":{"type":"string"},"score":{"type":"number","minimum":0,"maximum":100},"stylometricSimilarity":{"type":"number","minimum":0,"maximum":100},"label":{"type":"string"},"confidence":{"type":"string"},"referenceKind":{"type":"string","enum":["text","voice"]},"selfOverlap":{"type":"number","minimum":0,"maximum":1},"creditsUsed":{"type":"number"},"disclaimer":{"type":"string"}},"required":["axis","question","probability","score","stylometricSimilarity","label","confidence","referenceKind","selfOverlap","creditsUsed","disclaimer"],"additionalProperties":{}},"CertificatePublished":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"token":{"type":"string"},"path":{"type":"string"},"certificateUrl":{"type":"string","format":"uri"},"verificationUrl":{"type":"string","format":"uri"},"badgeSvgUrl":{"type":"string","format":"uri"},"badge":{"type":"object","properties":{"band":{"type":"string","enum":["signature","plausible","ambiguous","foreign"]},"label":{"type":"string"},"claim":{"type":"string"}},"required":["band","label","claim"],"additionalProperties":{}},"calibrated":{"type":"object","properties":{"author":{"type":"object","properties":{"question":{"type":"string","enum":["author","human"]},"probability":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"unavailable":{"type":"string","enum":["self_overlap","unsupported_language","embedding_layer","out_of_distribution"],"description":"self_overlap — Le texte à juger est déjà, pour l’essentiel, dans la référence qui le juge : la mesure porterait sur elle-même. Juge un texte que la référence ne contient pas — ou retire-le du corpus de cette voix. · unsupported_language — Le texte n’est pas en français, et le verdict n’est calibré que sur le français. Lis le champ `language` de la réponse avant d’appeler : hors français, ne demande pas de verdict. · embedding_layer — La couche de mesure profonde n’a pas répondu ; sans elle, aucune probabilité n’est calibrée. Réessaie dans un instant — c’est la seule des quatre causes qui soit un incident de notre côté. · out_of_distribution — Le panel de contraste ne couvre pas le registre de cette voix : la marge existerait, elle ne voudrait rien dire. Verse dans la voix des textes de référence plus proches du registre mesuré."},"language":{"type":"string"},"score":{"type":"number","minimum":0,"maximum":100},"version":{"type":"string"},"explanation":{"type":"object","properties":{"version":{"type":"string"},"summary":{"type":"string"},"caveat":{"type":"string"},"factors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["cadence","registre","structure","lexique"]},"label":{"type":"string"},"status":{"type":"string","enum":["aligned","mixed","different","unmeasured"]},"gap":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"detail":{"type":"string"}},"required":["id","label","status","gap","detail"],"additionalProperties":{}}}},"required":["version","summary","caveat","factors"],"additionalProperties":{}}},"required":["question","probability","score","version"],"additionalProperties":{}},"human":{"type":"object","properties":{"question":{"type":"string","enum":["author","human"]},"probability":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"unavailable":{"type":"string","enum":["self_overlap","unsupported_language","embedding_layer","out_of_distribution"],"description":"self_overlap — Le texte à juger est déjà, pour l’essentiel, dans la référence qui le juge : la mesure porterait sur elle-même. Juge un texte que la référence ne contient pas — ou retire-le du corpus de cette voix. · unsupported_language — Le texte n’est pas en français, et le verdict n’est calibré que sur le français. Lis le champ `language` de la réponse avant d’appeler : hors français, ne demande pas de verdict. · embedding_layer — La couche de mesure profonde n’a pas répondu ; sans elle, aucune probabilité n’est calibrée. Réessaie dans un instant — c’est la seule des quatre causes qui soit un incident de notre côté. · out_of_distribution — Le panel de contraste ne couvre pas le registre de cette voix : la marge existerait, elle ne voudrait rien dire. Verse dans la voix des textes de référence plus proches du registre mesuré."},"language":{"type":"string"},"score":{"type":"number","minimum":0,"maximum":100},"version":{"type":"string"},"explanation":{"type":"object","properties":{"version":{"type":"string"},"summary":{"type":"string"},"caveat":{"type":"string"},"factors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["cadence","registre","structure","lexique"]},"label":{"type":"string"},"status":{"type":"string","enum":["aligned","mixed","different","unmeasured"]},"gap":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"detail":{"type":"string"}},"required":["id","label","status","gap","detail"],"additionalProperties":{}}}},"required":["version","summary","caveat","factors"],"additionalProperties":{}}},"required":["question","probability","score","version"],"additionalProperties":{}}},"required":["author","human"],"additionalProperties":{}},"creditsUsed":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["ok","token","path","certificateUrl","verificationUrl","badgeSvgUrl","badge","calibrated","creditsUsed"],"additionalProperties":{}},"CertificatePreparation":{"type":"object","properties":{"approvalId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"approvalUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"requiresHumanApproval":{"type":"boolean"},"approved":{"type":"boolean"},"expiresAt":{"type":"string"},"credits":{"type":"integer","minimum":0,"maximum":9007199254740991},"document":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"wordCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","title","wordCount"],"additionalProperties":false},"publicPreview":{"type":"object","properties":{"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"disclosure":{"type":"string"}},"required":["displayName","disclosure"],"additionalProperties":false},"eligibility":{"type":"string","const":"preflight_passed"},"note":{"type":"string"}},"required":["approvalId","approvalUrl","requiresHumanApproval","approved","expiresAt","credits","document","publicPreview","eligibility","note"],"additionalProperties":{}},"CertifyResult":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"token":{"type":"string"},"path":{"type":"string"},"certificateUrl":{"type":"string","format":"uri"},"verificationUrl":{"type":"string","format":"uri"},"badgeSvgUrl":{"type":"string","format":"uri"},"badge":{"type":"object","properties":{"band":{"type":"string","enum":["signature","plausible","ambiguous","foreign"]},"label":{"type":"string"},"claim":{"type":"string"}},"required":["band","label","claim"],"additionalProperties":{}},"calibrated":{"type":"object","properties":{"author":{"type":"object","properties":{"question":{"type":"string","enum":["author","human"]},"probability":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"unavailable":{"type":"string","enum":["self_overlap","unsupported_language","embedding_layer","out_of_distribution"],"description":"self_overlap — Le texte à juger est déjà, pour l’essentiel, dans la référence qui le juge : la mesure porterait sur elle-même. Juge un texte que la référence ne contient pas — ou retire-le du corpus de cette voix. · unsupported_language — Le texte n’est pas en français, et le verdict n’est calibré que sur le français. Lis le champ `language` de la réponse avant d’appeler : hors français, ne demande pas de verdict. · embedding_layer — La couche de mesure profonde n’a pas répondu ; sans elle, aucune probabilité n’est calibrée. Réessaie dans un instant — c’est la seule des quatre causes qui soit un incident de notre côté. · out_of_distribution — Le panel de contraste ne couvre pas le registre de cette voix : la marge existerait, elle ne voudrait rien dire. Verse dans la voix des textes de référence plus proches du registre mesuré."},"language":{"type":"string"},"score":{"type":"number","minimum":0,"maximum":100},"version":{"type":"string"},"explanation":{"type":"object","properties":{"version":{"type":"string"},"summary":{"type":"string"},"caveat":{"type":"string"},"factors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["cadence","registre","structure","lexique"]},"label":{"type":"string"},"status":{"type":"string","enum":["aligned","mixed","different","unmeasured"]},"gap":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"detail":{"type":"string"}},"required":["id","label","status","gap","detail"],"additionalProperties":{}}}},"required":["version","summary","caveat","factors"],"additionalProperties":{}}},"required":["question","probability","score","version"],"additionalProperties":{}},"human":{"type":"object","properties":{"question":{"type":"string","enum":["author","human"]},"probability":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"unavailable":{"type":"string","enum":["self_overlap","unsupported_language","embedding_layer","out_of_distribution"],"description":"self_overlap — Le texte à juger est déjà, pour l’essentiel, dans la référence qui le juge : la mesure porterait sur elle-même. Juge un texte que la référence ne contient pas — ou retire-le du corpus de cette voix. · unsupported_language — Le texte n’est pas en français, et le verdict n’est calibré que sur le français. Lis le champ `language` de la réponse avant d’appeler : hors français, ne demande pas de verdict. · embedding_layer — La couche de mesure profonde n’a pas répondu ; sans elle, aucune probabilité n’est calibrée. Réessaie dans un instant — c’est la seule des quatre causes qui soit un incident de notre côté. · out_of_distribution — Le panel de contraste ne couvre pas le registre de cette voix : la marge existerait, elle ne voudrait rien dire. Verse dans la voix des textes de référence plus proches du registre mesuré."},"language":{"type":"string"},"score":{"type":"number","minimum":0,"maximum":100},"version":{"type":"string"},"explanation":{"type":"object","properties":{"version":{"type":"string"},"summary":{"type":"string"},"caveat":{"type":"string"},"factors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["cadence","registre","structure","lexique"]},"label":{"type":"string"},"status":{"type":"string","enum":["aligned","mixed","different","unmeasured"]},"gap":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"detail":{"type":"string"}},"required":["id","label","status","gap","detail"],"additionalProperties":{}}}},"required":["version","summary","caveat","factors"],"additionalProperties":{}}},"required":["question","probability","score","version"],"additionalProperties":{}}},"required":["author","human"],"additionalProperties":{}},"creditsUsed":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["ok","token","path","certificateUrl","verificationUrl","badgeSvgUrl","badge","calibrated","creditsUsed"],"additionalProperties":{}},"CertificateVerification":{"oneOf":[{"type":"object","properties":{"verified":{"type":"boolean","const":false},"error":{"type":"string"}},"required":["verified","error"],"additionalProperties":{}},{"type":"object","properties":{"verified":{"type":"boolean","const":true},"claims":{"type":"object","properties":{"issuer":{"type":"string","const":"kaneme.com"},"kind":{"type":"string","enum":["text","voice"]},"token":{"type":"string"},"issuedAt":{"type":"string"},"engine":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"type":"object","properties":{"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"wordCount":{"type":"number"}},"required":["displayName"],"additionalProperties":{}},"attestation":{"anyOf":[{"type":"object","properties":{"band":{"type":"string"},"label":{"type":"string"},"claim":{"type":"string"},"composition":{"type":"string"},"compositionLabel":{"type":"string"}},"required":["band","label","claim","composition","compositionLabel"],"additionalProperties":{}},{"type":"object","properties":{"maturityLevel":{"type":"string"},"maturityPercent":{"type":"number"},"calibrationLevel":{"type":"number"},"signalCount":{"type":"number"},"strandsActive":{"type":"number"},"strandsTotal":{"type":"number"},"topFormat":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["maturityLevel","maturityPercent","calibrationLevel","signalCount","strandsActive","strandsTotal","topFormat"],"additionalProperties":{}}]}},"required":["issuer","kind","token","issuedAt","engine","subject","attestation"],"additionalProperties":{}},"certificateUrl":{"type":"string"},"disclaimer":{"type":"string"},"trust":{"anyOf":[{"type":"object","properties":{"model":{"type":"string","const":"signed-ed25519"},"signature":{"type":"object","properties":{"alg":{"type":"string","const":"Ed25519"},"keyId":{"type":"string"},"signature":{"type":"string"},"canonicalization":{"type":"string","const":"sorted-keys-json"}},"required":["alg","keyId","signature","canonicalization"],"additionalProperties":{}},"keyUrl":{"type":"string"}},"required":["model","signature","keyUrl"],"additionalProperties":{}},{"type":"object","properties":{"model":{"type":"string","const":"origin"},"note":{"type":"string"}},"required":["model","note"],"additionalProperties":{}}]}},"required":["verified","claims","certificateUrl","disclaimer","trust"],"additionalProperties":{}}]},"GenerateResult":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["draft","outline","section","challenge","bar-test","workflow"]},"creditsUsed":{"type":"integer","minimum":0,"maximum":9007199254740991},"voiceScore":{"anyOf":[{"type":"object","properties":{"score":{"type":"number"},"scored":{"type":"boolean"},"confidence":{"type":"string"}},"required":["score","scored","confidence"],"additionalProperties":{}},{"type":"null"}]},"inspect":{"type":"object","properties":{"version":{"type":"number"},"compositionId":{"type":"string"},"contextId":{"type":"string"},"voiceSource":{"type":"string","enum":["explicit","document","project","default"]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"subvoiceApplied":{"type":"boolean"},"beliefsApplied":{"type":"boolean"},"ragBlocks":{"type":"integer","minimum":0,"maximum":9007199254740991},"influences":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"label":{"type":"string"},"channel":{"type":"string","enum":["stable","directive","evidence"]},"estTokens":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["source","label","channel","estTokens"],"additionalProperties":{}}},"estimatedTokens":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["version","compositionId","contextId","voiceSource","profileId","format","subvoiceApplied","beliefsApplied","ragBlocks","influences","estimatedTokens"],"additionalProperties":{}},"saved":{"type":"boolean"},"document":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"title":{"type":"string"},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"provenance":{"anyOf":[{"type":"string"},{"type":"null"}]},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","url","title","format","provenance","projectId","profileId"],"additionalProperties":{}},{"type":"null"}]},"saveError":{"type":"string"}},"required":["text","type","creditsUsed","voiceScore"],"additionalProperties":{}},"ImproveResult":{"type":"object","properties":{"profileId":{"type":"string"},"text":{"type":"string"},"improved":{"type":"boolean"},"reason":{"type":"string","const":"already_aligned"},"creditsUsed":{"type":"number"},"scoreBefore":{"type":"object","properties":{"score":{"type":"number"},"scored":{"type":"boolean"},"confidence":{"type":"string"}},"required":["score","scored","confidence"],"additionalProperties":{}},"scoreAfter":{"anyOf":[{"type":"object","properties":{"score":{"type":"number"},"scored":{"type":"boolean"},"confidence":{"type":"string"}},"required":["score","scored","confidence"],"additionalProperties":{}},{"type":"null"}]},"directives":{"type":"array","items":{"type":"string"}}},"required":["profileId","text","improved","creditsUsed","scoreBefore","scoreAfter","directives"],"additionalProperties":{}},"RecipeList":{"type":"object","properties":{"recipes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"isSystem":{"type":"boolean"},"variables":{"type":"array","items":{"type":"string"}}},"required":["id","name","description","category","isSystem","variables"],"additionalProperties":{}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["recipes","nextCursor"],"additionalProperties":{}},"RecipeRunResult":{"type":"object","properties":{"text":{"type":"string"},"type":{"type":"string","enum":["draft","outline","section","challenge","bar-test","workflow"]},"creditsUsed":{"type":"integer","minimum":0,"maximum":9007199254740991},"voiceScore":{"anyOf":[{"type":"object","properties":{"score":{"type":"number"},"scored":{"type":"boolean"},"confidence":{"type":"string"}},"required":["score","scored","confidence"],"additionalProperties":{}},{"type":"null"}]},"inspect":{"type":"object","properties":{"version":{"type":"number"},"compositionId":{"type":"string"},"contextId":{"type":"string"},"voiceSource":{"type":"string","enum":["explicit","document","project","default"]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"subvoiceApplied":{"type":"boolean"},"beliefsApplied":{"type":"boolean"},"ragBlocks":{"type":"integer","minimum":0,"maximum":9007199254740991},"influences":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"label":{"type":"string"},"channel":{"type":"string","enum":["stable","directive","evidence"]},"estTokens":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["source","label","channel","estTokens"],"additionalProperties":{}}},"estimatedTokens":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["version","compositionId","contextId","voiceSource","profileId","format","subvoiceApplied","beliefsApplied","ragBlocks","influences","estimatedTokens"],"additionalProperties":{}},"saved":{"type":"boolean"},"document":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"title":{"type":"string"},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"provenance":{"anyOf":[{"type":"string"},{"type":"null"}]},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","url","title","format","provenance","projectId","profileId"],"additionalProperties":{}},{"type":"null"}]},"saveError":{"type":"string"},"recipe":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":{}}},"required":["text","type","creditsUsed","voiceScore","recipe"],"additionalProperties":{}},"ProjectList":{"type":"object","properties":{"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"string"}},"required":["id","name","profileId","updatedAt"],"additionalProperties":{}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["projects","nextCursor"],"additionalProperties":{}},"ProjectCreated":{"type":"object","properties":{"id":{"type":"string"},"workspaceId":{"type":"string"},"name":{"type":"string"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}]},"context":{"anyOf":[{"type":"string"},{"type":"null"}]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","workspaceId","name","instructions","context","profileId"],"additionalProperties":{}},"ProjectContextAdded":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"fileId":{"type":"string"},"chunksProcessed":{"type":"number"},"creditsUsed":{"type":"number"}},"required":["ok","fileId","chunksProcessed","creditsUsed"],"additionalProperties":{}},"ProjectContextList":{"type":"object","properties":{"projectId":{"type":"string"},"contexts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"fileType":{"type":"string"},"sizeBytes":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"string"},"archivedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"deletedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","title","fileType","sizeBytes","createdAt","archivedAt","deletedAt"],"additionalProperties":{}}}},"required":["projectId","contexts"],"additionalProperties":{}},"SourceList":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"origin":{"type":"string"},"status":{"type":"string"},"isOwnWriting":{"type":"boolean"},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"}},"required":["id","title","url","excerpt","author","publishedAt","origin","status","isOwnWriting","projectId","createdAt"],"additionalProperties":{}}},"available":{"type":"boolean"},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["sources","available","nextCursor"],"additionalProperties":{}},"SourceSaved":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string"},"available":{"type":"boolean"},"deduplicated":{"type":"boolean"}},"required":["id","status","available","deduplicated"],"additionalProperties":{}},"DocumentList":{"type":"object","properties":{"documents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"updatedAt":{"type":"string"},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"provenance":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","title","updatedAt","projectId","profileId","format","provenance"],"additionalProperties":{}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["documents","nextCursor"],"additionalProperties":{}},"DocumentCreated":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"format":{"anyOf":[{"type":"string","enum":["newsletter","linkedin_post","tweet_short","thread","tiktok_script","instagram","blog","marketing_page","academic_article"]},{"type":"null"}]},"provenance":{"anyOf":[{"type":"string","enum":["human","ai"]},{"type":"null"}]},"sourceId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","title","url","projectId","profileId","format","provenance","sourceId"],"additionalProperties":{}},"Document":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"workspaceId":{"type":"string"},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"provenance":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"string"},"text":{"type":"string"},"html":{"type":"string"}},"required":["id","title","format","workspaceId","projectId","profileId","provenance","updatedAt","text","html"],"additionalProperties":{}},"DocumentUpdated":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"workspaceId":{"type":"string"},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"profileId":{"anyOf":[{"type":"string"},{"type":"null"}]},"provenance":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"string"},"text":{"type":"string"},"html":{"type":"string"}},"required":["id","title","format","workspaceId","projectId","profileId","provenance","updatedAt","text","html"],"additionalProperties":{}},"DocumentDeleted":{"type":"object","properties":{"id":{"type":"string"},"trashed":{"type":"boolean","const":true},"restorableDays":{"type":"number"}},"required":["id","trashed","restorableDays"],"additionalProperties":{}},"TrashList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"deletedAt":{"type":"string"}},"required":["resourceType","id","label","deletedAt"],"additionalProperties":{}}},"restorableDays":{"type":"number"},"permanentPurgeAvailable":{"type":"boolean","const":false}},"required":["items","restorableDays","permanentPurgeAvailable"],"additionalProperties":{}},"LifecycleResult":{"type":"object","properties":{"dryRun":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","enum":["document","project","voice","source","project_context","voice_asset","document_certificate","voice_certificate"]},"resourceId":{"type":"string"},"action":{"type":"string","enum":["trash","restore","archive","unarchive","revoke","expire","unexpire"]},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["previewed","applied","unchanged","not_found","refused"]},"reversible":{"type":"boolean"},"restorableDays":{"anyOf":[{"type":"number"},{"type":"null"}]},"message":{"type":"string"}},"required":["resourceType","resourceId","action","status","reversible","restorableDays","message"],"additionalProperties":{}}}},"required":["dryRun","results"],"additionalProperties":{}}},"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Clé d’API du compte, créée sur la page Connexions. En-tête : `Authorization: Bearer kaneme_…`. Les clés `frq_…` émises avant le changement de nom restent acceptées. C’est la voie MACHINE-À-MACHINE : un programme qui agit pour son propre compte. Ses portées sont choisies à la création ; les gestes sensibles restent décochés par défaut. Les clés historiques sans portées explicites conservent leur accès pour compatibilité ; pour déléguer un accès partiel à un tiers, passer par OAuth."},"oauth2":{"type":"oauth2","description":"Un agent qui agit AU NOM d’un utilisateur. Le client s’enregistre lui-même, puis demande à l’émetteur les portées ci-dessous — les SIENNES, les seules qu’il accepte. Les pouvoirs propres à Kaneme (voice:read, voice:measure, voice:write, voice:generate, voice:certify, voice:manage) ne se demandent PAS ici : l’utilisateur les coche à l’écran de consentement, nous enregistrons l’octroi et nous l’appliquons à chaque appel ; il les retire quand il veut depuis la page Connexions. Découverte : `/.well-known/oauth-protected-resource/api/mcp` (RFC 9728).","flows":{"authorizationCode":{"authorizationUrl":"https://vzktjydyprgdswouvanf.supabase.co/auth/v1/oauth/authorize","tokenUrl":"https://vzktjydyprgdswouvanf.supabase.co/auth/v1/oauth/token","scopes":{"openid":"Savoir QUI est l’utilisateur (le jeton porte son identifiant, rien d’autre).","offline_access":"Rester connecté : sans cette portée, l’agent se débranche à l’expiration du jeton."}}}}},"responses":{"Invalide":{"description":"Requête invalide (champ manquant, borne dépassée, curseur illisible).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}}},"NonAutorise":{"description":"Clé absente, invalide ou révoquée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}}},"CreditsEpuises":{"description":"Crédits insuffisants, OU surface non ouverte à ce compte. code = \"subscription_required\" : L’API et le MCP nécessitent un abonnement Kaneme ou un solde de crédits. Abonne-toi ou achète des crédits pour activer ta clé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}}},"TropDAppels":{"description":"Cadence dépassée (code « rate_limited »). La réponse porte X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Window et Retry-After — attends la fenêtre indiquée : un retry immédiat la prolonge. Les plafonds appliqués sont dans x-kaneme-rate-limits. Quand le refus vient d’un plafond PAR OPÉRATION (générer, créer un document ou un projet, déposer une source), ces nombres sont ceux de CETTE opération, pas ceux de la surface.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes à attendre. Ne part que sur un refus."},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateRemaining"},"X-RateLimit-Window":{"$ref":"#/components/headers/RateWindow"}}},"Introuvable":{"description":"Ressource introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}}},"Conflit":{"description":"Conflit d’état ou de clé d’idempotence.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}}},"NonMesurable":{"description":"Le moteur s’abstient ou le corpus est insuffisant.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}}},"ErreurServeur":{"description":"Erreur interne.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}}},"Indisponible":{"description":"Service ou compteur temporairement indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Message lisible, en français."},"code":{"type":"string","description":"Code stable quand l’erreur en porte un (ex. « invalid_input »)."}},"required":["error"]}}}}},"headers":{"RateLimit":{"schema":{"type":"integer"},"description":"Appels autorisés par fenêtre, pour le plafond qui s’applique à cet appel."},"RateRemaining":{"schema":{"type":"integer"},"description":"Appels restants dans la fenêtre, au passage de la garde — le jeton de cette requête est déjà décompté."},"RateWindow":{"schema":{"type":"integer"},"description":"Durée de la fenêtre, en secondes."},"RequestId":{"schema":{"type":"string","format":"uuid"},"description":"Identifiant de CETTE réponse. Journalise-le : c’est ce qu’on te demandera pour retrouver ton appel, et il est écrit dans nos traces sur les erreurs internes."}}}}