Créer une réunion et récupérer les résultats
Ce guide parcourt toute la vie d’une réunion créée via l’API : vous envoyez un enregistrement, Meetingize le transcrit avec diarisation des intervenants, rédige le compte rendu IA et, si vous le demandez, génère des documents. À chaque étape, vous voyez quoi appeler et ce que vous recevez.
Vous avez besoin d’une clé API avec le scope write:meetings (pour créer) et read:meetings + read:transcripts
(+ read:documents si vous générez des documents) pour lire les résultats.
Étape 1 : envoyer l’enregistrement
Section intitulée « Étape 1 : envoyer l’enregistrement »POST /v1/meetings crée une réunion à partir d’un fichier audio ou vidéo et démarre son traitement. Envoyez
soit le fichier lui-même (multipart), soit une URL publique https que Meetingize télécharge.
# Avec un fichier (multipart/form-data)curl -s -X POST "https://app.meetingize.com/api/v1/meetings" \ -H "Authorization: Bearer $MEETINGIZE_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -F file=@rdv-dupont.m4a \ -F title="Annual review - Mr Dupont" \ -F recorded_at=2026-10-14T09:30:00Z \ -F language=fr \ -F 'participants=[{"name": "Paul Dupont", "email": "paul.dupont@example.com"}]' \ -F 'tags=["client", "dupont"]'# Avec une URL (application/json)curl -s -X POST "https://app.meetingize.com/api/v1/meetings" \ -H "Authorization: Bearer $MEETINGIZE_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "audio_url": "https://files.example.com/calls/2026-10-14-dupont.mp3", "title": "Annual review - Mr Dupont", "recorded_at": "2026-10-14T09:30:00Z", "language": "fr", "document_templates": ["tpl_42"], "metadata": {"crm_id": "C-1042"} }'| Champ | Ce qu’il fait |
|---|---|
file ou audio_url | l’enregistrement, exactement l’un des deux. Fichiers jusqu’à 2 Go (mp3, m4a, wav, flac, ogg, webm, mp4…). Les URL doivent être des adresses https publiques |
title | titre de la réunion (300 caractères max). Sans lui, le compte rendu IA nomme la réunion |
recorded_at | date de la réunion (ISO 8601). Par défaut : maintenant |
language | code ISO 639-1 (fr, en…) ou auto (par défaut) |
recording_type | meeting (plusieurs intervenants, diarisation, par défaut) ou solo (dictée) |
participants | liste de {name, email} (50 max). L’attribution des intervenants peut être ajoutée plus tard |
tags | noms de tags (20 max) |
client_id ou client | classe la réunion dans un dossier client : un identifiant cli_<n> existant (GET /v1/clients), ou client = {"name", "email", "phone"} retrouvé par son nom ou créé |
transcribe_only | true : transcription seule, sans compte rendu IA ni documents (plus rapide et moins cher) |
document_templates | jusqu’à 5 ids de modèles (GET /v1/templates) à générer après le compte rendu IA |
persona | un id de persona (GET /v1/personas) : sans document_templates, génère les modèles de cette persona (5 max) |
metadata | votre propre objet JSON (4 Ko max), renvoyé dans les jobs et les événements webhook |
Dans les requêtes multipart, participants, tags et document_templates sont des chaînes JSON (tags et modèles
acceptent aussi une liste séparée par des virgules).
Ce que vous récupérez
Section intitulée « Ce que vous récupérez »202 Accepted avec la nouvelle réunion et son job de traitement. Conservez id (la réunion) et job.id.
{ "id": "6f0c2a4e-1b7d-4c55-9a51-3e2d8f0b7c11", "object": "meeting", "title": "Annual review - Mr Dupont", "status": "queued", "recorded_at": "2026-10-14T09:30:00Z", "created_at": "2026-10-14T10:02:11Z", "language": "fr", "source": "api", "transcribe_only": false, "tags": ["client", "dupont"], "has_transcript": false, "has_summary": false, "web_url": "https://app.meetingize.com/meeting/detail?uuid=6f0c2a4e-1b7d-4c55-9a51-3e2d8f0b7c11", "summary": null, "participants": [ { "id": "par_311", "name": "Paul Dupont", "email": "paul.dupont@example.com", "speaker_labels": [] } ], "documents": [], "job": { "id": "job_9b0c2d1e", "object": "job", "kind": "meeting_processing", "status": "queued", "stage": "queued", "meeting_id": "6f0c2a4e-1b7d-4c55-9a51-3e2d8f0b7c11", "document_templates": ["tpl_42"], "document_job_ids": [], "metadata": { "crm_id": "C-1042" }, "created_at": "2026-10-14T10:02:11Z" }}Erreurs possibles à cette étape : 400 validation_error (un champ est incorrect, voir errors[]),
413 file_too_large, 402 insufficient_balance ou spend_cap_reached (facturation),
429 parallel_processing_limit (tous les traitements simultanés de votre offre sont occupés, voir
limites).
Étape 2 : suivre le traitement
Section intitulée « Étape 2 : suivre le traitement »Le job passe par ces états :
status | stage | Signification |
|---|---|---|
queued | queued | en attente d’un worker |
processing | downloading | audio_url uniquement : Meetingize télécharge le fichier |
processing | transcribing | transcription et diarisation des intervenants |
processing | summarizing | la transcription est prête, le compte rendu IA est en cours de rédaction |
completed | done | transcription et compte rendu IA prêts (transcription seule avec transcribe_only) |
failed | voir error.code et error.message |
Le status de la réunion elle-même suit le même vocabulaire (queued, processing, completed, failed).
Comptez environ un quart de la durée audio pour la transcription, plus une ou deux minutes pour le compte rendu.
Option A : polling
Section intitulée « Option A : polling »curl -s "https://app.meetingize.com/api/v1/jobs/job_9b0c2d1e" -H "Authorization: Bearer $MEETINGIZE_API_KEY"{ "id": "job_9b0c2d1e", "object": "job", "kind": "meeting_processing", "status": "processing", "stage": "summarizing", "meeting_id": "6f0c2a4e-...", "progress": null }Interrogez toutes les 10 à 30 secondes, et arrêtez-vous quand status est completed ou failed. Le polling ne
compte pas sur votre forfait API, seulement sur la limite de débit.
Option B : webhooks (recommandé)
Section intitulée « Option B : webhooks (recommandé) »Enregistrez un endpoint une fois (webhooks) et Meetingize vous appelle :
| Événement | Quand | Ce que vous pouvez lire maintenant |
|---|---|---|
transcription.completed | la transcription diarisée est prête (stage summarizing) | la transcription |
processing.completed | le compte rendu IA est prêt, job completed | transcription, compte rendu, participants |
document.generated | chaque document demandé est prêt | le document |
transcription.failed, processing.failed, document.failed | une étape a échoué | error dans l’événement |
{ "id": "evt_7d1f...", "object": "event", "type": "processing.completed", "created": "2026-10-14T10:09:42Z", "api_version": "2026-10-01", "data": { "object": { "id": "job_9b0c2d1e", "object": "job", "kind": "meeting_processing", "status": "completed", "stage": "done", "meeting_id": "6f0c2a4e-...", "document_job_ids": ["job_a41f..."], "metadata": { "crm_id": "C-1042" }, "meeting": { "id": "6f0c2a4e-...", "object": "meeting", "title": "Annual review - Mr Dupont", "status": "completed" } } }}Votre metadata revient dans chaque événement, ce qui facilite le rapprochement de l’événement avec votre propre
enregistrement.
Étape 3 : lire la transcription
Section intitulée « Étape 3 : lire la transcription »Dès que le stage atteint summarizing (événement transcription.completed) :
curl -s "https://app.meetingize.com/api/v1/meetings/6f0c2a4e-.../transcript" -H "Authorization: Bearer $MEETINGIZE_API_KEY"{ "object": "transcript", "meeting_id": "6f0c2a4e-...", "language": "fr", "duration_seconds": 2412, "speakers": ["SPEAKER_00", "SPEAKER_01"], "segments": [ { "start": 14.2, "end": 21.9, "speaker": "SPEAKER_00", "speaker_name": null, "text": "Je m'engage à vous envoyer une proposition d'allocation avant vendredi." } ]}Ajoutez ?format=md, txt, srt ou vtt pour les formats texte. Avant ce point, l’endpoint répond
409 transcript_not_ready.
Étape 4 : lire le compte rendu IA
Section intitulée « Étape 4 : lire le compte rendu IA »Quand le job est completed (événement processing.completed) :
curl -s "https://app.meetingize.com/api/v1/meetings/6f0c2a4e-.../summary?format=md" -H "Authorization: Bearer $MEETINGIZE_API_KEY"Le format JSON renvoie markdown plus un objet structured (résumé court et long, compte rendu, points clés,
actions à mener, identification des intervenants). GET /v1/meetings/{id} renvoie tout en une fois : métadonnées,
compte rendu, participants et documents. Non disponible avec transcribe_only.
Étape 5 : récupérer les documents
Section intitulée « Étape 5 : récupérer les documents »Les documents listés dans document_templates (ou les modèles de la persona) sont générés après le compte rendu.
Chacun est un job enfant (document_job_ids, type document_generation) qui se termine par un événement
document.generated :
curl -s "https://app.meetingize.com/api/v1/documents?meeting_id=6f0c2a4e-..." -H "Authorization: Bearer $MEETINGIZE_API_KEY"curl -s "https://app.meetingize.com/api/v1/documents/doc_1234?format=md" -H "Authorization: Bearer $MEETINGIZE_API_KEY"Formats : json (métadonnées et Markdown), md, pdf, docx. Vous pouvez aussi générer des documents plus tard,
à tout moment, avec POST /v1/meetings/{id}/documents (documents).
Étape 6 (optionnelle) : corriger les métadonnées
Section intitulée « Étape 6 (optionnelle) : corriger les métadonnées »PATCH /v1/meetings/{id} met à jour le titre, la date, les tags et les participants d’une réunion, par exemple
pour indiquer qui est quel intervenant une fois que vous le savez :
curl -s -X PATCH "https://app.meetingize.com/api/v1/meetings/6f0c2a4e-..." \ -H "Authorization: Bearer $MEETINGIZE_API_KEY" -H "Content-Type: application/json" \ -d '{"participants": {"update": [{"id": "par_311", "speaker_labels": ["SPEAKER_01"]}], "add": [{"name": "Claire Martin", "speaker_labels": ["SPEAKER_00"]}]}}'Les changements de participants sont add, update (seuls les champs que vous envoyez changent ; speaker_labels
remplace la liste) et remove (une liste d’ids par_). Aucun e-mail n’est jamais envoyé aux participants par
l’API. DELETE /v1/meetings/{id} supprime la réunion avec son enregistrement, sa transcription, son compte
rendu et ses documents ; cela ne peut pas être annulé.
Checklist
Section intitulée « Checklist »- Envoyez toujours une
Idempotency-KeysurPOST: une nouvelle tentative ne crée jamais une seconde réunion. - Préférez les webhooks au polling pour les intégrations ; gardez le polling en secours.
- Utilisez
transcribe_onlyquand vous n’avez besoin que du texte : plus rapide et moins cher. - Placez vos propres identifiants dans
metadata. - Respectez
429etRetry-After(limites).