---
title: "Kaneme écrit dans ta voix (coût dérivé du barème : draft, outline, section, challenge, bar-test, workflow)"
method: POST
path: "/api/v1/generate"
tags: ["Écriture"]
---

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

`POST /api/v1/generate`

## Request

- Base URL: `https://kaneme.com`
- URL: `https://kaneme.com/api/v1/generate`
- Auth: HTTP bearer

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `prompt` string, required: Ce qu’il faut écrire (max 24 000 caractères).
  - `type` 'draft' | 'outline' | 'section' | 'challenge' | 'bar-test' | 'workflow': Type de sortie.
  - `instruction` string: Consigne complémentaire (max 8 000 caractères).
  - `format` 'newsletter' | 'linkedin_post' | 'tweet_short' | 'thread' | 'tiktok_script' | 'instagram' | 'blog' | 'marketing_page' | 'academic_article' | 'email' | 'slack' | 'internal_note' | 'executive_communication': Canal visé.
  - `profileId` string: Voix visée. Par défaut, la voix active du compte.
  - `projectId` string: Projet dont le contexte nourrit la génération.
  - `inspect` boolean: 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` boolean: 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` string: Titre du document rangé (avec save). Sans lui, dérivé de la première ligne du texte.

## Response `200`

Succès.

- GenerateResult
  - `text` string, required
  - `type` 'draft' | 'outline' | 'section' | 'challenge' | 'bar-test' | 'workflow', required
  - `creditsUsed` integer, required
  - `voiceScore` object, nullable, required
    - `score` number, required
    - `scored` boolean, required
    - `confidence` string, required
  - `provenance` object, required
    - `version` 'kaneme.generation-provenance.v1', required
    - `checked` integer, required
    - `grounded` integer, required
    - `unsourcedCount` integer, required
    - `firstPersonCount` integer, required
    - `unsourced` object[], required
      - `text` string, required
      - `kind` 'number' | 'percent' | 'amount' | 'year' | 'entity', required
      - `origin` 'unsourced', required
      - `originLabel` string, required
      - `sentence` string, required
      - `firstPerson` boolean, required
    - `note` string, required
  - `verification` object, nullable, required
    - `version` 'kaneme.generation-verification.v2', required
    - `attempted` boolean, required
    - `selected` 'original' | 'revised', required
    - `reason` 'aligned' | 'improved' | 'style_not_improved' | 'integrity_warning' | 'repair_failed' | 'unmeasured', required
    - `abstention` 'too_short' | 'no_reference' | 'out_of_domain' | 'language_changed', nullable
    - `scoreBefore` number, required
    - `scoreAfter` number, nullable, required
    - `resolvedCount` integer, required
    - `remainingDirectives` string[], required
    - `integrityChecks` string[], required
    - `limitation` string, required
  - `fidelity` object, nullable, required
    - `version` 'kaneme.fidelity-verdict.v1', required
    - `primary` object, required
      - `status` 'measured' | 'unavailable', required
      - `label` string, required
      - `probability` number, nullable, required
    - `details` object, required
      - `q1` object, required
        - `status` 'measured' | 'unavailable', required
        - `probability` number, nullable, required
        - `label` string, nullable, required
        - `confidence` 'none' | 'low' | 'medium' | 'high', required
        - `unavailable` string, nullable, required
      - `style` object, required
        - `status` 'measured' | 'partial' | 'unavailable', required
        - `version` string, required
        - `dimensions` object[], required
          - `passages` object[]
            - `start` number, required
            - `end` number, required
            - `quote` string, required
            - `observation` string, required
            - `basis` 'reference' | 'preference' | 'observation', required
          - `id` 'rythme' | 'lexique' | 'structure' | 'signature', required
          - `label` string, required
          - `measured` boolean, required
          - `score` number, nullable, required
          - `detail` string, required
      - `meaning` object, required
        - `status` 'guarded' | 'warning' | 'not_measured', required
        - `lexicalRetention` number, nullable, required
        - `checks` string[], required
        - `detail` string, required
        - `limitation` string, required
      - `format` object, required
        - `format` string, nullable, required
        - `status` 'learned' | 'provisional' | 'q1_unmeasured' | 'unknown', required
        - `q1Measurable` boolean, nullable, required
        - `humanDocuments` integer, nullable, required
        - `humanWords` integer, nullable, required
        - `requiredDocuments` integer, nullable, required
        - `requiredWords` integer, nullable, required
        - `detail` string, required
    - `benchmarkPolicy` object, required
      - `mode` 'periodic_benchmark', required
      - `comparedPerUserGeneration` false, required
      - `note` string, required
    - `limitation` string, required
  - `inspect` object
    - `version` number, required
    - `compositionId` string, required
    - `contextId` string, required
    - `voiceSource` 'explicit' | 'document' | 'project' | 'default', required
    - `profileId` string, nullable, required
    - `format` string, nullable, required
    - `subvoiceApplied` boolean, required
    - `beliefsApplied` boolean, required
    - `proofApplied` boolean, required
    - `ragBlocks` integer, required
    - `influences` object[], required
      - `source` string, required
      - `label` string, required
      - `channel` 'stable' | 'directive' | 'evidence', required
      - `estTokens` integer, required
    - `estimatedTokens` integer, required
  - `saved` boolean
  - `document` object, nullable
    - `id` string, required
    - `url` string, required
    - `title` string, required
    - `format` string, nullable, required
    - `provenance` string, nullable, required
    - `projectId` string, nullable, required
    - `profileId` string, nullable, required
  - `saveError` string
  - `recommended` 'original' | 'revised' | 'undecided': type bar-test only: the version the review recommends keeping. `text` is always the paid rewrite; keep the original when this says "original" (an integrity check flags the rewrite); "undecided" means the form review is not conclusive: measure both versions before choosing.

## Other responses

- `400`: Requête invalide (champ manquant, borne dépassée, curseur illisible).
- `401`: Clé absente, invalide ou révoquée.
- `402`: Crédits insuffisants, OU surface non ouverte à ce compte. code = "subscription_required" : L’API et le MCP se paient en crédits, et ce compte n’en a plus. Recharge ton solde pour réactiver ta clé. code = "credits_exhausted" : lire `window` pour savoir quoi faire (recharger, attendre la période, demander à un admin de relever le budget, relever le plafond de la clé).
- `404`: Ressource introuvable.
- `409`: Conflit d’état ou de clé d’idempotence.
- `422`: Le moteur s’abstient ou le corpus est insuffisant.
- `429`: 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.
- `500`: Erreur interne.
- `503`: Service ou compteur temporairement indisponible.

---

[API](https://skmtc.dev/kaneme/apis/kaneme-api.md) · [All operations](https://skmtc.dev/kaneme/apis/kaneme-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kaneme/apis/kaneme-api/revisions/752895651cd0?raw)
