Conversation imports
3 points d'accès
/v1/conversation-importsLire l'état d'une conversation envoyée
L'état d'un envoi de POST / : reçu sur sa
fiche, en attente d'une fiche, refusé avec sa raison, ou reçu en
double, et où en est l'analyse de sa rencontre (recording.).
Un envoi d'un autre compte répond 404, comme un envoi inexistant. Un
envoi refusé ou en double s'efface après 30 jours ; un envoi reçu part
avec sa rencontre.
conversations:importParamètres de requête
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
id | string | obligatoire | L'identifiant de l'envoi, rendu par POST / (id). Absent ou mal formé, la requête répond 400 validation_. |
Réponses
| Statut | Description |
|---|---|
200 | État de l'envoi. |
400 | Requête invalide.
|
401 | La clé API manque, est inconnue ou a expiré.
|
403 | Refus d'autorisation.
|
404 |
|
429 | Limite de débit atteinte.
|
500 | Erreur serveur inattendue. Toujours fournir le
|
501 | Les clés de test (
|
503 | Un service dont la requête dépend n'a pas répondu (lecture de la clé, du
compte ou du forfait). La même requête passera quand il reviendra :
réessaie après le délai de
|
Exemple de requête
curl -X GET 'https://api.capturia.io/v1/conversation-imports?id=4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b' \
-H 'Authorization: Bearer cap_live_<your-key>' \
-H 'Content-Type: application/json'/v1/conversation-importsEnvoyer une conversation tenue hors de Capturia
Une agence d'appels, un outil comme Zapier ou Make, ou ton propre système envoie une conversation tenue hors de Capturia : un appel, une rencontre en vidéo ou en personne. Capturia la range sur la fiche de la personne et l'analyse comme une rencontre enregistrée dans Capturia.
En texte
Envoie la transcription telle quelle dans transcript. : Capturia
la lit comme un texte collé dans l'application. Une ligne « Nom :
texte » ouvre un tour de parole ; un fichier WebVTT ou SRT se lit
aussi. Ou envoie les tours déjà découpés dans transcript..
speakers donne le rôle de chaque voix par son nom (agent,
prospect ou other) ; sans lui, l'analyse déduit qui parle. La
conversation part à l'analyse dès la réponse.
En audio, en trois temps
- Annonce le fichier dans
media: son nom, son type et sa taille exacte en octets. La réponse rend un lien d'envoi dansupload, valable 2 h. - Téléverse le fichier par
PUTàupload., avec l'en-têteurl Content-du type annoncé.Type - Appelle
POST /avec l'v1/ conversation- imports/ complete idde l'envoi : Capturia vérifie le fichier, puis le fait transcrire et analyser.
Renvoyer la même annonce avant l'arrivée du fichier rend un nouveau lien d'envoi. Un audio dont le fichier n'est pas arrivé un jour après son annonce est retiré.
Avis d'enregistrement
recording_ déclare que chaque personne de la
conversation a été informée qu'elle est enregistrée et analysée par une
intelligence artificielle ; sans cette déclaration, l'envoi est refusé
(422 recording_). La direction du compte doit aussi
avoir signé l'attestation des conversations envoyées par un
fournisseur, dans Administration › Conversations importées (422 import_ sinon).
Qui a tenu la conversation
Nomme-le dans held_, dans seller, ou dans les deux. held_ :
une personne hors du compte, par exemple l'agent d'une agence d'appels.
Sa conversation reçoit son analyse, son compte rendu et son plan,
jamais de note ni de coaching. seller : le membre du compte
responsable de la conversation. Sans seller, la conversation revient
au vendeur de la fiche, sinon au vendeur par défaut du compte.
La fiche
contact. désigne la fiche ; sans lui, Capturia la cherche par
external_, puis phone, puis email. Une personne inconnue reçoit
une fiche, créée sans aucun consentement de communication
(contact_). Avec create_, ou sans
téléphone ni courriel, la conversation attend qu'un membre du compte la
rattache à une fiche (status: awaiting_). Une fiche dont la
personne a refusé d'être enregistrée ne reçoit aucune conversation
(422 contact_).
Doublons
Une conversation n'entre qu'une fois par compte. Un texte aux mêmes
mots (noms des voix et horodatages mis à part), un audio annoncé à
l'identique pour la même personne (même nom de fichier, même taille,
même occurred_), ou le même external_ sous le même
external_ répond 200 already_ avec l'identifiant du
premier envoi, sans créer de nouvelle rencontre. Un audio dit donc
toujours laquelle des conversations il est : external_, la
reconnaissance la plus sûre, ou occurred_
(media_ sans l'un ni l'autre). L'en-tête
Idempotency- reste disponible pour les relances d'une
transcription ; une annonce d'audio ne le lit pas, pour que sa relance
rende toujours un lien d'envoi neuf.
Plafond et coût
Chaque compte reçoit un nombre limité de conversations par jour (UTC) :
au-delà, 429 import_ jusqu'au lendemain. L'audio a
son propre plafond, 40 heures transcrites par jour (UTC) : il se juge
à la transcription, une fois le fichier reçu. Un fichier doit tenir
dans ce qui reste, d'après la durée mesurée des audios déjà transcrits
ce jour-là et une estimation haute de la sienne, tirée de sa taille.
Un audio qui ne tient pas est retiré ;
GET / le montre alors refused avec
audio_. L'analyse se débite
des crédits du compte, comme celle d'une rencontre enregistrée dans
Capturia.
conversations:importEn-têtes
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
Idempotency-Key | string | optionnel | Clé d'idempotence : de 16 à 128 caractères [A- (un UUID v4 ou un ULID conviennent). Une clé
d'une autre forme est refusée en 400 invalid_ (details. : idempotency-) ; un en-tête
vide vaut une requête sans clé. Une 2e requête avec la même clé et la même charge utile renvoie la réponse
d'origine, avec l'en-tête Idempotency-, sans refaire l'opération ; la même clé avec une
autre charge utile est refusée en 409 idempotency_. Stockée 24 h. Optionnelle mais recommandée. |
Corps de requête
| Propriété | Type | Obligatoire | Description |
|---|---|---|---|
transcript | ConversationImportTranscript | optionnel | La conversation en texte : text ou turns, jamais les deux
(details[]. : text_). Au moins 15 mots (422 transcript_), au plus 500 000 caractères au total. |
media | ConversationImportMedia | optionnel | L'enregistrement audio annoncé. Son fichier se téléverse ensuite au lien
rendu dans upload, puis POST / le
fait transcrire et analyser. |
contact | ConversationImportContact | optionnel | La personne avec qui la conversation a eu lieu. id désigne sa fiche
(inconnu : 404 contact_) ; sans id, Capturia la cherche par
external_, puis phone, puis email. Une fiche fusionnée mène à la
fiche conservée. Une personne inconnue reçoit une fiche, créée sans aucun
consentement de communication. Avec create_, ou sans
téléphone ni courriel, la conversation attend qu'un membre du compte la
rattache à une fiche (status: awaiting_). |
recording_notice | string | obligatoire | given : chaque personne de la conversation a été informée qu'elle
est enregistrée et analysée par une intelligence artificielle. Toute
autre valeur, ou son absence, refuse l'envoi (422 recording_). |
speakers | object | optionnel | Le rôle de chaque voix d'une transcription, par le nom qu'elle y
porte : agent (la personne qui a tenu la conversation), prospect
ou other. 20 voix au plus. Un nom absent de la transcription est
ignoré. Une voix que speakers ne nomme pas est déduite par
l'analyse, qui garde les rôles donnés pour les autres ; sans
speakers, elle déduit toutes les voix. |
held_by | object | optionnel | La personne hors du compte qui a tenu la conversation, par exemple l'agent d'une agence d'appels. Sa conversation reçoit son analyse, son compte rendu et son plan, jamais de note ni de coaching : elle ne fait pas partie de l'équipe du compte. |
seller | object | optionnel | Le membre du compte responsable de la conversation, par id ou par
email ; avec les deux, id décide. Un membre inconnu ou inactif
refuse l'envoi (422 seller_). Sans seller, la
conversation revient au vendeur de la fiche, sinon au vendeur par
défaut du compte. |
meeting_type_id | string | optionnel | Le type de rencontre de la conversation. Sans lui, le type par défaut
du compte. Un type inconnu ou retiré refuse l'envoi (422 meeting_). |
occurred_at | string | optionnel | Le moment où la conversation a eu lieu, avec son fuseau (Z ou un décalage). |
duration_seconds | integer | optionnel | Durée d'une conversation envoyée en texte, en secondes. Sans elle, la durée se lit à la fin de son dernier tour minuté, sinon s'estime d'après son nombre de mots. Ignorée pour un audio, dont la durée se mesure à sa transcription. |
language | string | optionnel | Langue de la conversation, en code de deux lettres, avec ou sans sa région (fr, en, fr-). |
title | string | optionnel | Titre de la rencontre dans Capturia. |
channel | string | optionnel | Comment la conversation s'est tenue : phone (au téléphone), video
(en vidéo) ou in_ (en personne). Une conversation au
téléphone suit la durée minimale d'analyse des appels, pas celle des
rencontres. |
external_id | string | optionnel | L'identifiant de la conversation chez l'expéditeur. Un envoi qui
reprend le même external_ et le même external_ est
reconnu : 200 already_, aucune rencontre n'est créée une
deuxième fois. |
external_source | string | optionnel | Espace de noms de external_ (ex. appels-). Défaut : api. |
source_label | string | optionnel | Nom de la source, affiché au compte avec chaque envoi (ex. « Appels Pro »). |
Réponses
| Statut | Description |
|---|---|
200 | Conversation déjà reçue : la réponse rend l'identifiant de son premier envoi, sans créer de nouvelle rencontre. |
201 | Conversation reçue. Une transcription part à l'analyse ; un audio attend son fichier au lien de |
400 | Requête invalide.
|
401 | La clé API manque, est inconnue ou a expiré.
|
403 | Refus d'autorisation.
|
404 |
|
409 | Conflit de clé d'idempotence. La même
|
413 | Le corps de la requête dépasse 1 Mo (1 048 576 octets).
|
415 | L'en-tête
|
422 | Requête refusée.
|
429 | Limite atteinte.
|
500 | Erreur serveur inattendue. Toujours fournir le
|
501 | Les clés de test (
|
503 | Un service dont la requête dépend n'a pas répondu (lecture de la clé, du
compte ou du forfait). La même requête passera quand il reviendra :
réessaie après le délai de
|
Exemple de requête
curl -X POST 'https://api.capturia.io/v1/conversation-imports' \
-H 'Authorization: Bearer cap_live_<your-key>' \
-H 'Content-Type: application/json' \
-d '{
"transcript": {
"text": "Julie : Bonjour, ici Julie d'Appels Pro. Je vous appelle au sujet de votre demande de soumission pour la cuisine.\nMarc : Oui, bonjour. On aimerait refaire les armoires et le comptoir avant le printemps.\nJulie : Parfait. Quel budget avez-vous en tête pour le projet ?\nMarc : Autour de vingt mille dollars, installation comprise.\n"
},
"speakers": {
"Julie": "agent",
"Marc": "prospect"
},
"recording_notice": "given",
"held_by": {
"name": "Julie Bouchard",
"organization": "Appels Pro"
},
"contact": {
"phone": "+15145551234",
"first_name": "Marc"
},
"occurred_at": "2026-11-04T14:30:00-05:00",
"channel": "phone",
"external_id": "appel-88213",
"external_source": "appels-pro",
"source_label": "Appels Pro"
}'/v1/conversation-imports/completeConclure le dépôt d'un audio
Dis à Capturia que le fichier audio annoncé par POST / est déposé au lien d'envoi. Capturia vérifie
qu'il est arrivé entier, à la taille annoncée, puis le fait transcrire
et analyser (status: processing). Rejouable : un dépôt déjà conclu
rend la même réponse.
Le corps nomme l'envoi par son identifiant (id), celui que rend
POST /.
conversations:importCorps de requête
| Propriété | Type | Obligatoire | Description |
|---|---|---|---|
id | string | obligatoire | L'identifiant de l'envoi dont le fichier audio est déposé, rendu par POST /. |
Réponses
| Statut | Description |
|---|---|
200 | Fichier reçu. La conversation part à sa transcription, puis à son analyse. |
400 | Requête invalide.
|
401 | La clé API manque, est inconnue ou a expiré.
|
403 | Refus d'autorisation.
|
404 |
|
413 | Le corps de la requête dépasse 1 Mo (1 048 576 octets).
|
415 | L'en-tête
|
422 | Le dépôt ne peut pas se conclure.
|
429 | Limite de débit atteinte.
|
500 | Erreur serveur inattendue. Toujours fournir le
|
501 | Les clés de test (
|
503 | Un service dont la requête dépend n'a pas répondu : la lecture de la
clé, du compte ou du forfait, ou le stockage qui vérifie le fichier
déposé. La même requête passera quand il reviendra : réessaie après
le délai de
|
Exemple de requête
curl -X POST 'https://api.capturia.io/v1/conversation-imports/complete' \
-H 'Authorization: Bearer cap_live_<your-key>' \
-H 'Content-Type: application/json' \
-d '{
"id": "6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d"
}'