---
title: "Porte la voix compacte vers ton modèle ; les portages offerts sont consommés avant les crédits"
method: POST
path: "/api/v1/voice/context"
tags: ["Voix"]
---

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

`POST /api/v1/voice/context`

## Request

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

## Request body

- object
  - `profileId` string, required: Voix visée. Par défaut, la voix active du compte.
  - `textLanguage` string, required: Langue du texte, indépendante de la langue de l’interface.
  - `format` 'newsletter' | 'linkedin_post' | 'tweet_short' | 'thread' | 'tiktok_script' | 'instagram' | 'blog' | 'marketing_page' | 'academic_article' | 'email' | 'slack' | 'internal_note' | 'executive_communication', required: Usage rédactionnel.
  - `projectId` string: Projet autorisé dont lire les consignes et le contexte.
  - `intent` string: Intention du texte, au plus 4 000 caractères.
  - `maxTokens` integer: Budget estimé, de 2 000 à 12 000 ; défaut 6 000.

## Response `200`

Succès.

- PortableVoiceContext
  - `version` 'kaneme.portable-voice.v2', required
  - `profileId` string, required
  - `profileName` string, required
  - `voiceRevision` string, required
  - `referenceId` string, required
  - `contextId` string, required
  - `compositionId` string, required
  - `textLanguage` string, required
  - `format` string, required
  - `projectId` string, nullable, required
  - `intent` string, nullable, required
  - `assistantContext` string, required
  - `manifest` object[], required
    - `kind` 'instruction' | 'example' | 'fact', required
    - `source` string, required
    - `status` 'profile_setting' | 'confirmed' | 'observed' | 'source_material', required
    - `contentHash` string, required
  - `budget` object, required
    - `maxTokens` number, required
    - `estimatedTokens` number, required
    - `omittedSources` string[], required
  - `measurement` object, required
    - `question` 'q1', required
    - `supported` boolean, required
    - `language` string, required
    - `limitation` string, required
  - `creditsUsed` number, required
  - `portage` object, required
    - `charged` number, required
    - `freeLimit` number, required
    - `freeRemaining` number, required
    - `resetsAt` string, nullable, required
  - `execution` object, required
    - `version` 'kaneme.portable-execution.v1', required
    - `executionId` string, uuid, required
    - `status` 'context_prepared' | 'cost_estimated' | 'verifying' | 'verified', required
    - `createdAt` string, required
    - `completedAt` string, nullable, required
    - `expiresAt` string, required
    - `voice` object, required
      - `profileId` string, required
      - `voiceRevision` string, required
      - `referenceId` string, required
      - `contextId` string, required
      - `language` string, required
      - `format` string, required
    - `channel` string, required
    - `clientVersion` string, nullable, required
    - `estimate` object, nullable, required
      - `operation` 'verify', required
      - `credits` number, required
      - `conditional` boolean, required
    - `candidateDigest` string, nullable, required
    - `measurementId` string, nullable, required
    - `outcome` 'measured' | 'abstained', nullable, required
    - `steps` object[], required
      - `id` 'context_prepared' | 'cost_estimated' | 'text_submitted' | 'voice_verified', required
      - `status` 'completed' | 'pending', required
      - `evidence` 'server_observed' | 'client_submitted', required
      - `completedAt` string, nullable, required
    - `limitation` string, required

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