{"openapi":"3.1.0","info":{"title":"Dialyne","description":"Donnez un vrai téléphone à vos agents IA : une mission, un appel en France, un résultat structuré.","version":"0.3.0"},"paths":{"/health":{"get":{"tags":["système"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/profond":{"get":{"tags":["système"],"summary":"Health Deep","description":"Santé détaillée pour le monitoring : base joignable (SELECT 1, latence) et planificateur vivant. 503 si KO.","operationId":"health_deep_health_profond_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/account":{"get":{"tags":["compte"],"summary":"Get Account","operationId":"get_account_v1_account_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions":{"post":{"tags":["missions"],"summary":"Create Mission","operationId":"create_mission_v1_missions_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Facultatif (1-64 caractères : lettres, chiffres, - _ . :). Renvoyer la même requête avec la même clé dans les 24 h renvoie la mission déjà créée (200, en-tête Idempotent-Replayed: true) au lieu d'appeler une deuxième fois.","title":"Idempotency-Key"},"description":"Facultatif (1-64 caractères : lettres, chiffres, - _ . :). Renvoyer la même requête avec la même clé dans les 24 h renvoie la mission déjà créée (200, en-tête Idempotent-Replayed: true) au lieu d'appeler une deuxième fois."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissionIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["missions"],"summary":"List Missions","description":"Historique : recherche plein texte (`q` : objectif, résumé, transcription, numéro), filtres, pagination.","operationId":"list_missions_v1_missions_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"statut","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Statut"}},{"name":"resultat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resultat"}},{"name":"depuis","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Depuis"}},{"name":"jusqu_au","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Jusqu Au"}},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limite"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lots":{"post":{"tags":["lots"],"summary":"Create Batch","description":"Appels en lot (offre Pro / Entreprise) : la même mission vers une liste de numéros (100 au plus). Chaque numéro\ndevient un appel (`call_id`) suivi comme les autres (GET /v1/missions/{id}, webhooks). Les limites de l'offre\ns'appliquent : appels simultanés (les suivants attendent leur tour, en file), appels sur 24 h (le lot est refusé\ns'il les dépasse), anti-abus par numéro. Les relances automatiques, et tout appel du lot resté en file plus de 15\nminutes après l'heure demandée, respectent la plage 8 h-21 h de la personne appelée. L'annonce IA est toujours\nfaite. Démarchage et prospection restent interdits (filtre de la mission).","operationId":"create_batch_v1_lots_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LotIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["lots"],"summary":"List Batches","description":"Lots du compte, plus récents d'abord (avancement par statut).","operationId":"list_batches_v1_lots_get","parameters":[{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limite"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lots/{lot_id}":{"get":{"tags":["lots"],"summary":"Get Batch","description":"Avancement d'un lot : compte par statut, réussis, numéros refusés et la liste des appels (id, statut, résultat,\nrésumé).","operationId":"get_batch_v1_lots__lot_id__get","parameters":[{"name":"lot_id","in":"path","required":true,"schema":{"type":"string","title":"Lot Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lots/{lot_id}/cancel":{"post":{"tags":["lots"],"summary":"Cancel Batch","description":"Annule les appels du lot qui ne sont pas encore partis (en file ou relance prévue) ; les appels en cours\ncontinuent (cancel_call pour les arrêter un par un).","operationId":"cancel_batch_v1_lots__lot_id__cancel_post","parameters":[{"name":"lot_id","in":"path","required":true,"schema":{"type":"string","title":"Lot Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/analyse":{"post":{"tags":["missions"],"summary":"Analyse Mission","description":"Langage naturel → champs de mission (numéro, mission, langue, voix, quand) à vérifier avant `POST /v1/missions`.\n`manque` liste ce qu'il faut encore préciser. Aucun appel n'est lancé.","operationId":"analyse_mission_v1_missions_analyse_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyseIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/export/{fmt}":{"get":{"tags":["missions"],"summary":"Export Missions","description":"Export (mêmes filtres que l'historique, 5 000 missions max) : CSV (Excel, `;`) ou JSON avec transcriptions.","operationId":"export_missions_v1_missions_export__fmt__get","parameters":[{"name":"fmt","in":"path","required":true,"schema":{"enum":["csv","json"],"type":"string","title":"Fmt"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"statut","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Statut"}},{"name":"resultat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resultat"}},{"name":"depuis","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Depuis"}},{"name":"jusqu_au","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Jusqu Au"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}":{"get":{"tags":["missions"],"summary":"Get Mission","operationId":"get_mission_v1_missions__mission_id__get","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}/answer":{"post":{"tags":["missions"],"summary":"Answer Question","description":"Réponse à une question posée par l'agent : en cours d'appel, transmise à l'agent (topic « reponse ») ; après\nl'appel, si la question est restée ouverte et qu'un rappel est programmé, stockée et transmise au rappel.","operationId":"answer_question_v1_missions__mission_id__answer_post","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnswerIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}/question/prolonger":{"post":{"tags":["missions"],"summary":"Extend Question","description":"Demande 60 secondes de plus pour répondre à la question en cours (une seule fois par question). L'agent vocal\ndemande d'abord à l'interlocuteur s'il accepte de patienter : s'il accepte, `expires_at` recule de 60 s (jamais\nplus de 2 minutes d'attente au total) ; s'il préfère être rappelé, l'agent convient d'un rappel et votre réponse,\nenvoyée ensuite, sera donnée au rappel. Le résultat arrive par le webhook `appel.question_prolongation` et dans\n`/direct` (`question.prolongation` : demandee, acceptee, refusee, impossible).","operationId":"extend_question_v1_missions__mission_id__question_prolonger_post","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ProlongationIn"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}/rappel":{"post":{"tags":["missions"],"summary":"Schedule Callback","description":"Programme un rappel d'une mission terminée (ex. « rappelez demain à 15 h ») : même numéro, même script.","operationId":"schedule_callback_v1_missions__mission_id__rappel_post","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallbackIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}/rappeler":{"post":{"tags":["missions"],"summary":"Call Again","description":"« Rappeler » : relance tout de suite, d'un clic du client, un appel terminé (même numéro, même mission). C'est le\nseul moyen de rappeler en mode 05 (aucune relance ni rappel automatique). À toute heure (c'est le client qui décide) ;\nmêmes contrôles qu'un nouvel appel (opposition, fréquence, crédits, suspension).","operationId":"call_again_v1_missions__mission_id__rappeler_post","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}/cancel":{"post":{"tags":["missions"],"summary":"Cancel Mission","operationId":"cancel_mission_v1_missions__mission_id__cancel_post","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}/transfer":{"post":{"tags":["missions"],"summary":"Transfer Mission","description":"« Prendre l'appel » : l'agent prévient l'interlocuteur, vous appelle et vous met en relation (mode `pont`),\nou transfère l'appel par SIP REFER (mode `refer`). Suivez `transfert` dans `/direct` : sonnerie, connecte, echec.","operationId":"transfer_mission_v1_missions__mission_id__transfer_post","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"numero","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Numero"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TransferIn"},{"type":"null"}],"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}/direct":{"get":{"tags":["missions"],"summary":"Mission Live","description":"Suivi en direct : statut + événements depuis `apres` (transcription ligne à ligne, décroché, attente, question…).","operationId":"mission_live_v1_missions__mission_id__direct_get","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"apres","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Apres"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/missions/{mission_id}/direct/flux":{"get":{"tags":["missions"],"summary":"Mission Live Stream","description":"Même chose en flux Server-Sent Events (`text/event-stream`) : un message `data:` par événement, puis `fin`.","operationId":"mission_live_stream_v1_missions__mission_id__direct_flux_get","parameters":[{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}},{"name":"apres","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Apres"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compte/export":{"get":{"tags":["compte"],"summary":"Export My Data","description":"Droit d'accès (RGPD) : toutes les données du compte (missions, transcriptions encore conservées, crédits, factures).","operationId":"export_my_data_v1_compte_export_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compte/remboursement-cloture":{"get":{"tags":["compte"],"summary":"Closing Refund Estimate","description":"Estimation du remboursement du solde si vous fermez votre compte maintenant (CGV art. 13.3) : par recharge,\npart non utilisée, frais déduits (comptes pro seulement : frais de paiement non remboursables ; jamais pour un\nparticulier) et net remboursé.","operationId":"closing_refund_estimate_v1_compte_remboursement_cloture_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compte":{"delete":{"tags":["compte"],"summary":"Delete My Account","description":"Droit à l'effacement (RGPD) : supprime missions, transcriptions, clés ; anonymise le compte. Les factures sont\nconservées 10 ans (obligation légale). Refusé si un appel est en cours. Irréversible. Le crédit de recharges non\nutilisé est remboursé (sauf `rembourser_solde=false`) : entièrement pour un particulier ; moins les frais de\npaiement d'origine pour un pro (ligne « frais de paiement non remboursables » sur l'avoir).","operationId":"delete_my_account_v1_compte_delete","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressionIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/liste-noire":{"get":{"tags":["compte"],"summary":"List Blocked","operationId":"list_blocked_v1_liste_noire_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["compte"],"summary":"Add Blocked","description":"Ajoute un numéro à la liste noire du compte (vos agents ne pourront plus l'appeler).","operationId":"add_blocked_v1_liste_noire_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/liste-noire/{numero}":{"delete":{"tags":["compte"],"summary":"Remove Blocked","description":"Retire un numéro de la liste noire du compte (les oppositions globales ne peuvent pas être levées ici).","operationId":"remove_blocked_v1_liste_noire__numero__delete","parameters":[{"name":"numero","in":"path","required":true,"schema":{"type":"string","title":"Numero"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/signalements":{"post":{"tags":["signalement"],"summary":"Report Abuse","description":"Signaler un appel abusif (public, sans compte) : l'appel est retrouvé par sa référence ou par votre numéro (30 j).\nVotre numéro ne peut plus être appelé par ce client ; le client reçoit un avertissement et le signalement est\nexaminé par une personne sous 24 h ouvrées (suspension si fraude avérée ou signalements répétés). Rien n'est\nrévélé sur le client.","operationId":"report_abuse_v1_signalements_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalementIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/factures":{"get":{"tags":["compte"],"summary":"List Invoices","description":"Factures et avoirs du compte (plus récents d'abord) : numéro, type, date, montant, crédits, payée.","operationId":"list_invoices_v1_factures_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/factures/export.csv":{"get":{"tags":["compte"],"summary":"Invoices Export","description":"Export comptable (offre Pro / Entreprise) : une ligne par facture ou avoir, au format CSV pour Excel (`;`,\nvirgule décimale, UTF-8 avec BOM). Colonnes : numéro, type, date, client, SIREN, SIRET, TVA du client, libellé,\nHT, TVA, TTC (centimes convertis en euros, avoirs en négatif), mention TVA, payée le, référence de paiement,\nfacture d'origine (avoir). Filtre facultatif `depuis` / `jusqu_au` (date d'émission).","operationId":"invoices_export_v1_factures_export_csv_get","parameters":[{"name":"depuis","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Depuis"}},{"name":"jusqu_au","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Jusqu Au"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/numeros":{"get":{"tags":["compte"],"summary":"List Numbers","description":"Numéros rattachés au compte (modèle « plusieurs numéros » des offres v4 ; aucun achat ici : un numéro du stock\nest rattaché par le support) et nombre maximal selon l'offre. Le numéro offert de la v3 reste décrit par\n`ligne` dans GET /v1/tableau-de-bord.","operationId":"list_numbers_v1_numeros_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/factures/{numero}/pdf":{"get":{"tags":["compte"],"summary":"Invoice Pdf","operationId":"invoice_pdf_v1_factures__numero__pdf_get","parameters":[{"name":"numero","in":"path","required":true,"schema":{"type":"string","title":"Numero"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/factures/{numero}/envoyer":{"post":{"tags":["compte"],"summary":"Invoice Email","description":"« Recevoir par e-mail » : envoie la facture ou l'avoir (PDF en pièce jointe) à l'adresse e-mail du compte, à la\ndemande. Au plus 10 envois par heure. Sans fournisseur d'e-mail branché, le message attend dans la file et part\ndès qu'il l'est (`envoye=false`).","operationId":"invoice_email_v1_factures__numero__envoyer_post","parameters":[{"name":"numero","in":"path","required":true,"schema":{"type":"string","title":"Numero"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/inscription":{"post":{"tags":["compte"],"summary":"Inscription","description":"Crée le compte (particulier ou pro), envoie le code par SMS et renvoie une session web.","operationId":"inscription_v1_inscription_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InscriptionIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connexion":{"post":{"tags":["compte"],"summary":"Connexion","description":"Connexion du propriétaire d'un compte, ou d'un membre d'équipe (offre Pro / Entreprise) avec son e-mail :\nsa session agit sur le compte de l'équipe, avec son rôle (`compte.role`).","operationId":"connexion_v1_connexion_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnexionIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deconnexion":{"post":{"tags":["compte"],"summary":"Deconnexion","description":"Ferme la session web courante (une clé API permanente n'est pas révoquée par cette route).","operationId":"deconnexion_v1_deconnexion_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/profil":{"get":{"tags":["compte"],"summary":"Get Profil","operationId":"get_profil_v1_profil_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/profil/cgu-cgv":{"post":{"tags":["compte"],"summary":"Accepter Cgu","description":"Acceptation des CGU/CGV en vigueur par un compte existant (créé avant le 03/11/2026 ou après une nouvelle\nversion) : bandeau de /app/. Horodatée, versionnée ; sans effet si cette version est déjà acceptée.","operationId":"accepter_cgu_v1_profil_cgu_cgv_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptationCguIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/profil/facturation":{"put":{"tags":["compte"],"summary":"Maj Facturation","description":"Coordonnées de facturation (nom, adresse, passage particulier ↔ pro). Les factures déjà émises ne changent pas.\nPropriétaire du compte seulement.","operationId":"maj_facturation_v1_profil_facturation_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacturationIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/telephone/code":{"post":{"tags":["compte"],"summary":"Renvoyer Code","description":"(Ré)envoie un code de vérification au téléphone du compte.","operationId":"renvoyer_code_v1_telephone_code_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/telephone/verifier":{"post":{"tags":["compte"],"summary":"Verifier","description":"Vérifie le code SMS. Première vérification d'un compte inscrit : l'essai de 5 minutes est accordé s'il est\npossible (un par téléphone, à vie ; `essai` dit pourquoi sinon).","operationId":"verifier_v1_telephone_verifier_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cles":{"get":{"tags":["compte"],"summary":"Lister Cles","description":"Clés API permanentes (nommées, révocables) ; `derniere_utilisation` à 5 minutes près. Admin ou propriétaire.","operationId":"lister_cles_v1_cles_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["compte"],"summary":"Creer Cle","description":"Nouvelle clé API nommée (affichée une seule fois), par exemple une par outil (Claude, n8n…). Particulier :\n1 clé permanente ; Pro : 10 ; Entreprise : selon le contrat. Téléphone vérifié requis pour un compte inscrit.","operationId":"creer_cle_v1_cles_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CleIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cles/{prefixe}":{"delete":{"tags":["compte"],"summary":"Revoquer Cle","operationId":"revoquer_cle_v1_cles__prefixe__delete","parameters":[{"name":"prefixe","in":"path","required":true,"schema":{"type":"string","title":"Prefixe"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tarifs":{"get":{"tags":["abonnement"],"summary":"Pricing","description":"Grille complète : minute parlée, recharges, abonnements, attente hors quota, numéro offert, tarif UK annoncé (lisible par les agents).","operationId":"pricing_v1_tarifs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/offres":{"get":{"tags":["abonnement"],"summary":"List Plans","description":"Les trois offres (Particulier, Pro, Entreprise) : prix, limites, fonctions (même qualité d'appel pour toutes).\nEntreprise : sur devis, aucun prix public. Identique à `offres` dans GET /v1/tarifs.","operationId":"list_plans_v1_offres_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/offre":{"get":{"tags":["abonnement"],"summary":"My Plan","description":"Offre du compte : tarif, limites (appels simultanés, appels sur 24 h), usage en cours, fonctions,\ncontrat (Entreprise) et souscription de l'offre Pro.","operationId":"my_plan_v1_offre_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/essai":{"get":{"tags":["abonnement"],"summary":"My Trial","description":"Essai de 5 minutes : accordé après la vérification du téléphone (un par téléphone, à vie), crédit restant,\ndate d'expiration et règles (appels +33, un à la fois, 5 min attente comprise, annonce IA imposée).","operationId":"my_trial_v1_essai_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/offre/pro/checkout":{"post":{"tags":["abonnement"],"summary":"Pro Checkout","description":"Passer à l'offre Pro (99 €/mois) : renvoie l'URL de paiement sécurisée (Stripe Checkout, abonnement).\nCompte professionnel requis (raison sociale : factures au nom de la société). Propriétaire du compte seulement.\nSans prestataire de paiement configuré : 503 `paiement_indisponible`.","operationId":"pro_checkout_v1_offre_pro_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/offre/pro/resilier":{"post":{"tags":["abonnement"],"summary":"Pro Cancel","description":"Résilier l'offre Pro : effective à la fin de la période payée (le compte garde le Pro jusque-là, puis repasse\nau Particulier ; rien n'est effacé). Accusé de réception par e-mail. Propriétaire du compte seulement.","operationId":"pro_cancel_v1_offre_pro_resilier_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/recharge/checkout":{"post":{"tags":["abonnement"],"summary":"Recharge Checkout","description":"Renvoie l'URL de la page de paiement sécurisée (Stripe Checkout) pour une recharge (crédit sans expiration).\nParticulier : la case unique (demande d'exécution immédiate des recharges) doit avoir été cochée une fois, à\nl'inscription ou ici (`demande_execution_immediate`) ; elle est recopiée sur chaque recharge et rappelée dans\nla confirmation par e-mail. Pro : aucune case. Propriétaire du compte seulement.","operationId":"recharge_checkout_v1_recharge_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/abonnement/offres":{"get":{"tags":["abonnement"],"summary":"List Offers","description":"Offres d'abonnement mensuel : prix HT, minutes incluses (crédits du mois), attente incluse.","operationId":"list_offers_v1_abonnement_offres_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/abonnement":{"get":{"tags":["abonnement"],"summary":"My Subscription","description":"Abonnement en cours, période, attente utilisée / incluse, crédits (abonnement / sans expiration).","operationId":"my_subscription_v1_abonnement_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/abonnement/checkout":{"post":{"tags":["abonnement"],"summary":"Checkout","description":"Renvoie l'URL de la page de paiement sécurisée (Stripe Checkout) pour souscrire à une offre.","operationId":"checkout_v1_abonnement_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/abonnement/portail":{"post":{"tags":["abonnement"],"summary":"Portal","description":"Portail client du prestataire (moyen de paiement, factures, résiliation).","operationId":"portal_v1_abonnement_portail_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/abonnement/resilier":{"post":{"tags":["abonnement"],"summary":"Cancel","description":"Résiliation en ligne (C. conso. L215-1-1), effective à la fin de la période en cours (les minutes du mois\nrestent utilisables jusque-là). Accusé de réception envoyé par e-mail ; une 2e demande ne change rien.","operationId":"cancel_v1_abonnement_resilier_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/retractation":{"get":{"tags":["abonnement"],"summary":"Withdrawable","description":"« Renoncer au contrat ici » (C. conso. L221-21) : recharges encore rétractables (14 jours, L221-19), avec la\npart non consommée qui serait remboursée (recharges achetées en tant que particulier).","operationId":"withdrawable_v1_retractation_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["abonnement"],"summary":"Withdraw","description":"Rétractation d'une recharge : crédits non consommés retirés, remboursement au prorata (intégral sans\nconsentement enregistré), avoir, accusé de réception par e-mail.","operationId":"withdraw_v1_retractation_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetractationIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/abonnement/retractation":{"post":{"tags":["abonnement"],"summary":"Withdraw Subscription","description":"Rétractation de l'abonnement d'un particulier (14 jours après le 1er paiement, L221-18) : arrêt immédiat,\nminutes restantes retirées, remboursement intégral sans la case d'exécution immédiate (aucune somme due),\npart non consommée avec la case ; avoir ; accusé de réception par e-mail.","operationId":"withdraw_subscription_v1_abonnement_retractation_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tableau-de-bord":{"get":{"tags":["compte"],"summary":"Dashboard","description":"Accueil de l'espace client : solde (crédits, minutes, euros), attente offerte, numéro offert, offres de\nrecharge, 5 derniers appels (statut, résumé, extrait de transcription), 5 dernières factures / avoirs, offre du\ncompte (limites, usage, fonctions) et essai de 5 minutes.","operationId":"dashboard_v1_tableau_de_bord_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/equipe":{"get":{"tags":["équipe"],"summary":"Lister","description":"Membres de l'équipe, rôles, invitations en cours et places restantes (offre Pro : 5 propriétaire compris).","operationId":"lister_v1_equipe_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/equipe/membres":{"post":{"tags":["équipe"],"summary":"Inviter","description":"Invite un membre (rôle `admin` ou `membre`) : renvoie le lien d'invitation (valable 7 jours, affiché une\nseule fois) et met un e-mail en file. Admin ou propriétaire ; seul le propriétaire invite un admin.","operationId":"inviter_v1_equipe_membres_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/equipe/membres/{membre_id}":{"patch":{"tags":["équipe"],"summary":"Changer Role","description":"Change le rôle d'un membre (propriétaire seul).","operationId":"changer_role_v1_equipe_membres__membre_id__patch","parameters":[{"name":"membre_id","in":"path","required":true,"schema":{"type":"integer","title":"Membre Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["équipe"],"summary":"Retirer","description":"Retire un membre ou annule une invitation : ses sessions sont fermées. Un admin ne retire que des membres.","operationId":"retirer_v1_equipe_membres__membre_id__delete","parameters":[{"name":"membre_id","in":"path","required":true,"schema":{"type":"integer","title":"Membre Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/equipe/rejoindre":{"post":{"tags":["équipe"],"summary":"Rejoindre","description":"Accepte une invitation (public, avec le jeton du lien) : choisit le mot de passe et ouvre une session.","operationId":"rejoindre_v1_equipe_rejoindre_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejoindreIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/demo/config":{"get":{"tags":["démo"],"summary":"Demo Config","description":"Configuration publique de la démo live (sans clé).","operationId":"demo_config_v1_demo_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/demo/session":{"post":{"tags":["démo"],"summary":"Demo Session","description":"Ouvre une session de démo : jeton LiveKit éphémère (salle dédiée, micro seulement) ou refus motivé\n(`indisponible`, `limite`, `budget` : le site affiche un état « revenez plus tard », sans enregistrement) ;\n`statut: \"file\"` = réessayer avec le ticket dans `reessayer_dans_s`.","operationId":"demo_session_v1_demo_session_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoSessionIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/demo/session/{session_id}/reglages":{"post":{"tags":["démo"],"summary":"Demo Reglages","description":"Change les réglages PENDANT la démo (panneau du site). Bornes identiques à `reglages_voix` (422 sinon).\nL'agent applique le ton et les hésitations au tour suivant, la voix HD et le fond sonore aussitôt.","operationId":"demo_reglages_v1_demo_session__session_id__reglages_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoReglagesIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/voix":{"get":{"tags":["compte"],"summary":"List Voices","description":"Catalogue des voix (1-4 éco, 5 premium) avec un aperçu audio par langue. Public, sans clé.","operationId":"list_voices_v1_voix_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/VoixOut"},"type":"array","title":"Response List Voices V1 Voix Get"}}}}}}},"/v1/reglages":{"get":{"tags":["compte"],"summary":"Get Settings","description":"Réglages du compte : valeurs par défaut des nouvelles missions.","operationId":"get_settings_v1_reglages_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Reglages"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["compte"],"summary":"Put Settings","description":"Remplace les réglages (voix et langue par défaut, nom annoncé par l'agent, webhook par défaut).","operationId":"put_settings_v1_reglages_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Reglages"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Reglages"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reglages/identite":{"get":{"tags":["compte"],"summary":"Get Identity","description":"Identité de l'agent : réglages actuels, réglages recommandés, écarts, aperçu de ce que l'agent dira,\navertissement à accepter pour s'écarter des réglages recommandés, et le seul garde-fou non modifiable.","operationId":"get_identity_v1_reglages_identite_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"enum":["fr","en"],"type":"string","default":"fr","title":"Lang"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["compte"],"summary":"Put Identity","description":"Remplace l'identité de l'agent (prénom, ton, ouverture, réponse « de la part de qui », présentation, mention\nde l'IA dans l'ouverture). Champ absent = réglage recommandé. Un écart aux réglages recommandés exige\n`accepte_responsabilite=true` et `version_avertissement` (sinon 409 `acceptation_responsabilite_requise`,\nréglages inchangés) ; l'acceptation est journalisée. Le garde-fou « ne jamais nier être une IA » ne se règle pas.","operationId":"put_identity_v1_reglages_identite_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentiteIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications":{"get":{"tags":["compte"],"summary":"Applications connectées en OAuth (ChatGPT, Claude…)","operationId":"list_applications_v1_applications_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApplicationOut"},"title":"Response List Applications V1 Applications Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{client_id}":{"delete":{"tags":["compte"],"summary":"Révoquer l'accès d'une application OAuth","operationId":"revoke_application_v1_applications__client_id__delete","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AcceptationCguIn":{"properties":{"accepte_cgu_cgv":{"type":"boolean","title":"Accepte Cgu Cgv","default":false},"version":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Version","description":"Version lue (cgu_cgv.version du profil)"}},"type":"object","title":"AcceptationCguIn"},"AnalyseIn":{"properties":{"texte":{"type":"string","maxLength":2000,"minLength":1,"title":"Texte","examples":["Appelle le garage Dupont au 01 42 00 00 00 demain à 15h pour décaler ma révision"]}},"type":"object","required":["texte"],"title":"AnalyseIn"},"AnswerIn":{"properties":{"reponse":{"type":"string","maxLength":1000,"minLength":1,"title":"Reponse"},"question_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Id"}},"type":"object","required":["reponse"],"title":"AnswerIn"},"ApplicationOut":{"properties":{"client_id":{"type":"string","title":"Client Id"},"nom":{"type":"string","title":"Nom"},"autorisee_le":{"type":"string","format":"date-time","title":"Autorisee Le"},"derniere_activite":{"type":"string","format":"date-time","title":"Derniere Activite"}},"type":"object","required":["client_id","nom","autorisee_le","derniere_activite"],"title":"ApplicationOut"},"BlockIn":{"properties":{"numero":{"type":"string","title":"Numero","description":"Numéro E.164 à ne jamais appeler depuis ce compte"},"motif":{"type":"string","maxLength":64,"title":"Motif","default":""}},"type":"object","required":["numero"],"title":"BlockIn"},"CallbackIn":{"properties":{"quand":{"type":"string","format":"date-time","title":"Quand","description":"Date du rappel (ISO 8601 ; sans fuseau = heure de Paris), respectée telle quelle : aucune plage horaire imposée (au moins 2 minutes, au plus 14 jours)."}},"type":"object","required":["quand"],"title":"CallbackIn"},"CheckoutIn":{"properties":{"offre":{"type":"string","title":"Offre","description":"Code de l'offre : abo-10/20/50/100 ou recharge-10/20/50/100 (voir GET /v1/tarifs)"},"retour_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Retour Url","description":"Page de retour après paiement (défaut : /app/#/abonnement)"},"demande_execution_immediate":{"type":"boolean","title":"Demande Execution Immediate","description":"Recharge d'un particulier qui n'a pas encore coché la case unique (à l'inscription) : case cochée « Je demande que mes recharges soient utilisables immédiatement et je reconnais perdre mon droit de rétractation sur les minutes que j'aurai consommées. » (C. conso. L221-25, L221-28 1°). Demandée UNE seule fois : enregistrée sur le compte (horodatée, versionnée, confirmée par e-mail), inutile ensuite. Voir `consentement_recharges` dans GET /v1/profil. Sans objet pour un compte pro. ABONNEMENT d'un particulier (POST /v1/abonnement/checkout) : case « Je demande que mon abonnement commence immédiatement (minutes utilisables dès le paiement) et je reconnais perdre mon droit de rétractation sur les minutes que j'aurai consommées. » ; non cochée : rétractation possible 14 jours avec remboursement intégral, sans aucune somme due.","default":false},"execution_immediate":{"type":"boolean","title":"Execution Immediate","description":"Ancien format (avant le 03/11/2026), encore accepté : avec `perte_retractation`, vaut consentement pour CETTE recharge seulement. Préférez `demande_execution_immediate` (une seule fois).","default":false},"perte_retractation":{"type":"boolean","title":"Perte Retractation","description":"Ancien format (avant le 03/11/2026), encore accepté avec `execution_immediate` (voir ce champ).","default":false}},"type":"object","required":["offre"],"title":"CheckoutIn"},"CleIn":{"properties":{"nom":{"type":"string","maxLength":80,"title":"Nom","default":""}},"type":"object","title":"CleIn"},"CodeIn":{"properties":{"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code"}},"type":"object","required":["code"],"title":"CodeIn"},"ConnexionIn":{"properties":{"email":{"type":"string","title":"Email"},"mot_de_passe":{"type":"string","title":"Mot De Passe"}},"type":"object","required":["email","mot_de_passe"],"title":"ConnexionIn"},"DemoReglagesIn":{"properties":{"cle":{"type":"string","maxLength":64,"minLength":8,"title":"Cle","description":"Clé de la session, rendue par POST /v1/demo/session"},"ton":{"anyOf":[{"type":"string","enum":["chaleureux","neutre","formel","dynamique"]},{"type":"null"}],"title":"Ton","description":"Ton de l'agent"},"reglages":{"anyOf":[{"$ref":"#/components/schemas/ReglagesVoix"},{"type":"null"}],"description":"Réglages de voix (mêmes bornes que reglages_voix ; hors bornes = 422)"}},"type":"object","required":["cle"],"title":"DemoReglagesIn","description":"Réglages changés PENDANT la démo (panneau du site) : appliqués par l'agent au tour suivant (ton, hésitations,\nexpressivité), aussitôt pour la voix HD (stabilité) et le fond sonore."},"DemoSessionIn":{"properties":{"consentement_micro":{"type":"boolean","title":"Consentement Micro","description":"Le visiteur a accepté d'ouvrir son micro (case + bouton)"},"voix":{"type":"string","title":"Voix","description":"1 à 5 (voir /v1/demo/config)","default":"1"},"scenario":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Scenario","description":"Obsolète (05/11/2026) : accepté et ignoré, la démo est une conversation libre","deprecated":true},"reglages":{"anyOf":[{"$ref":"#/components/schemas/ReglagesVoix"},{"type":"null"}],"description":"Réglages de voix (mêmes champs que reglages_voix)"},"ton":{"anyOf":[{"type":"string","enum":["chaleureux","neutre","formel","dynamique"]},{"type":"null"}],"title":"Ton","description":"Ton de l'agent (défaut : chaleureux)"},"turnstile":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Turnstile","description":"Jeton Cloudflare Turnstile"},"empreinte":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Empreinte","description":"Empreinte légère (hachée côté site)"},"ticket":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Ticket","description":"Ticket de file d'attente déjà obtenu"}},"type":"object","required":["consentement_micro"],"title":"DemoSessionIn"},"Entreprise":{"properties":{"raison_sociale":{"type":"string","maxLength":200,"minLength":2,"title":"Raison Sociale"},"siret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Siret","description":"14 chiffres (facultatif)"},"siren":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Siren","description":"9 chiffres (facultatif ; déduit du SIRET s'il est donné)"},"tva":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tva","description":"TVA intracommunautaire (facultative)"},"adresse":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Adresse"}},"type":"object","required":["raison_sociale"],"title":"Entreprise"},"FacturationIn":{"properties":{"type":{"anyOf":[{"type":"string","enum":["particulier","pro"]},{"type":"null"}],"title":"Type"},"nom":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Nom"},"adresse":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Adresse"},"entreprise":{"anyOf":[{"$ref":"#/components/schemas/Entreprise"},{"type":"null"}]}},"type":"object","title":"FacturationIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdentiteIn":{"properties":{"prenom_agent":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Prenom Agent","description":"Prénom de l'agent (« Léa »). Absent = prénom de la voix choisie. Reste dans les réglages recommandés."},"ton":{"type":"string","enum":["chaleureux","neutre","formel","dynamique"],"title":"Ton","description":"Ton de l'agent : chaleureux (recommandé), neutre, formel ou dynamique. Reste dans les réglages recommandés.","default":"chaleureux"},"ouverture":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Ouverture","description":"Phrase d'ouverture dite telle quelle au décroché, avant l'objet de l'appel (ex. « Bonjour, ici {prenom} du cabinet {operateur}. »). Absent = « Bonjour, ici {prenom}, l'assistante virtuelle de {operateur}. ». ÉCART"},"de_la_part":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"De La Part","description":"Réponse si on demande de la part de qui l'agent appelle. Absent = « J'appelle de la part de {operateur}. ». ÉCART"},"presentation":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Presentation","description":"Comment l'agent se présente si on lui demande qui il est ou ce qu'est {operateur}. Absent = « Je suis {prenom}, l'assistante virtuelle de {operateur}. ». ÉCART"},"annonce_ia_ouverture":{"type":"boolean","title":"Annonce Ia Ouverture","description":"L'ouverture dit que l'agent est une assistante virtuelle (recommandé). false = ÉCART. Dans tous les cas l'agent répond oui si on lui demande s'il est une IA ou un robot (garde-fou non modifiable).","default":true},"accepte_responsabilite":{"type":"boolean","title":"Accepte Responsabilite","description":"Obligatoire (true) dès qu'un réglage s'écarte des réglages recommandés (ouverture, de_la_part, presentation, annonce_ia_ouverture=false) : le client a lu l'avertissement (GET /v1/reglages/identite → avertissement) et accepte que ces réglages relèvent de sa responsabilité. Journalisé (horodatage, version, réglages, IP).","default":false},"version_avertissement":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Version Avertissement","description":"Version de l'avertissement lu (GET /v1/reglages/identite → avertissement.version) ; obligatoire avec accepte_responsabilite."}},"type":"object","title":"IdentiteIn"},"InscriptionIn":{"properties":{"email":{"type":"string","maxLength":255,"title":"Email"},"mot_de_passe":{"type":"string","maxLength":200,"minLength":10,"title":"Mot De Passe"},"telephone":{"type":"string","title":"Telephone","description":"Mobile français, reçoit le code (06/07)"},"type":{"type":"string","enum":["particulier","pro"],"title":"Type","default":"particulier"},"nom":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Nom","description":"Nom et prénom (facultatif, figure sur les factures)"},"entreprise":{"anyOf":[{"$ref":"#/components/schemas/Entreprise"},{"type":"null"}]},"accepte_cgu_cgv":{"type":"boolean","title":"Accepte Cgu Cgv","description":"OBLIGATOIRE (true) : case « J'ai lu et j'accepte les CGU et les CGV » (CGV art. 1.4), distincte de la case d'exécution immédiate. Enregistrée horodatée, versionnée (texte exact, IP, canal). Sans elle : 422 cgu_cgv_non_acceptees.","default":false},"demande_execution_immediate":{"type":"boolean","title":"Demande Execution Immediate","description":"Particulier : case cochée, distincte de l'acceptation des CGU/CGV, « Je demande que mes recharges soient utilisables immédiatement et je reconnais perdre mon droit de rétractation sur les minutes que j'aurai consommées. » Enregistrée une fois sur le compte (horodatée, versionnée, IP) et confirmée par e-mail. Non cochée : elle sera demandée une seule fois à la première recharge. Sans objet pour un compte pro.","default":false}},"type":"object","required":["email","mot_de_passe","telephone"],"title":"InscriptionIn"},"InvitationIn":{"properties":{"email":{"type":"string","maxLength":255,"title":"Email"},"role":{"type":"string","enum":["admin","membre"],"title":"Role","default":"membre"},"nom":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Nom"}},"type":"object","required":["email"],"title":"InvitationIn"},"LotIn":{"properties":{"numeros":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Numeros","description":"Numéros à appeler, France (+33… ou 0X XX XX XX XX) ; 100 au plus par lot. Doublons et numéros invalides sont écartés (liste `refuses`)."},"mission":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/MissionScript"}],"title":"Mission","description":"La même mission pour chaque numéro : texte libre (10-2000 car.) ou script structuré"},"nom":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Nom","description":"Nom du lot (facultatif), ex. « Confirmations RDV mardi »"},"voix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voix","description":"1 à 5 ; absent = voix par défaut du compte"},"langue":{"anyOf":[{"type":"string","enum":["fr","en","auto"]},{"type":"null"}],"title":"Langue"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url","description":"HTTPS, reçoit les événements de chaque appel du lot"},"reglages_voix":{"anyOf":[{"$ref":"#/components/schemas/ReglagesVoix"},{"type":"null"}]},"quand":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Quand","description":"Lancer au plus tôt à cette date (ISO 8601 avec fuseau)"}},"type":"object","required":["numeros","mission"],"title":"LotIn"},"MissionIn":{"properties":{"numero":{"type":"string","title":"Numero","description":"Numéro à appeler, E.164 France (+33...)","examples":["+33142000000"]},"mission":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/MissionScript"}],"title":"Mission","description":"Texte libre (10-2000 car.) ou script structuré"},"voix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voix","description":"1 à 4 (éco) ou 5 (premium), voir GET /v1/voix ; absent = voix par défaut du compte (GET /v1/reglages)"},"langue":{"anyOf":[{"type":"string","enum":["fr","en","auto"]},{"type":"null"}],"title":"Langue","description":"Langue de l'appel : fr, en, ou auto (commence en français, bascule en anglais si l'interlocuteur parle anglais) ; absent = langue par défaut du compte"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url","description":"HTTPS, reçoit appel.decroche / attente / question / rappel / fin"},"reglages_voix":{"anyOf":[{"$ref":"#/components/schemas/ReglagesVoix"},{"type":"null"}],"description":"Réglages de la voix pour cet appel (champs fournis seulement ; le reste vient de GET /v1/reglages) : stabilite, similarite, style, vitesse, amplification, modele, ambiance, volume_ambiance, frappe_reflexion, tics, balises"},"planifier":{"type":"boolean","title":"Planifier","description":"Obsolète (03/11/2026), accepté et ignoré : aucune plage horaire n'est plus imposée aux appels demandés par le client ; l'appel part tout de suite, ou à la date `quand`.","default":true,"deprecated":true},"quand":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Quand","description":"Lancer au plus tôt à cette date (ISO 8601 avec fuseau)"},"hors_horaires":{"anyOf":[{"type":"string","enum":["urgence","proche"]},{"type":"null"}],"title":"Hors Horaires","description":"Obsolète (03/11/2026), accepté et ignoré : le client choisit librement l'heure de ses appels, de jour comme de nuit. Les numéros surtaxés, l'opposition et les limites anti-abus s'appliquent toujours.","deprecated":true},"annonce_ia":{"type":"string","enum":["standard","interlocuteur_deja_informe"],"title":"Annonce Ia","description":"« standard » (défaut, recommandé) : l'agent dit qu'il est un assistant vocal automatique dès l'ouverture. « interlocuteur_deja_informe » : retire cette mention de l'accroche, UNIQUEMENT si la personne appelée sait déjà qu'elle parlera à une IA (par exemple un proche que vous avez prévenu) — AI Act art. 50(1), exception « évident vu le contexte ». Exige `annonce_ia_confirmation`. Même alors, l'agent ne nie jamais être une IA, répond la vérité si on le lui demande, et s'annonce comme IA si quelqu'un d'autre décroche. Journalisé.","default":"standard"},"annonce_ia_confirmation":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Annonce Ia Confirmation","description":"Obligatoire avec annonce_ia=interlocuteur_deja_informe (10-300 caractères) : votre confirmation que la personne appelée sait déjà qu'une IA l'appellera, et comment (ex. « Ma sœur Léa, je l'ai prévenue ce matin qu'une IA l'appellerait pour moi »). Conservée comme preuve."}},"type":"object","required":["numero","mission"],"title":"MissionIn"},"MissionOut":{"properties":{"id":{"type":"string","title":"Id"},"statut":{"type":"string","enum":["planifiee","en_cours","relance_planifiee","terminee","annulee","erreur"],"title":"Statut"},"resultat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resultat"},"resume":{"type":"string","title":"Resume","default":""},"numero":{"type":"string","title":"Numero"},"voix":{"type":"string","title":"Voix"},"langue":{"type":"string","title":"Langue","default":"fr"},"tentatives":{"type":"integer","title":"Tentatives"},"planifiee_le":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Planifiee Le"},"question":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Question"},"duree_facturee_s":{"type":"integer","title":"Duree Facturee S","default":0},"attente_s":{"type":"integer","title":"Attente S","default":0},"credits_reserves":{"type":"integer","title":"Credits Reserves","default":0},"transcription":{"items":{},"type":"array","title":"Transcription","default":[]},"cree_le":{"type":"string","format":"date-time","title":"Cree Le"},"qualite_appel":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Qualite Appel","description":"Dernier appel, en clair : delai_median_s et delai_pire_s (attente ressentie entre la fin de votre interlocuteur et la réponse de l'agent), repondeur (messagerie détectée), relances_silence (« Allô ? » et reformulations quand l'interlocuteur se taisait). Absent tant que l'appel n'est pas fini ou si personne n'a décroché."}},"type":"object","required":["id","statut","numero","voix","tentatives","cree_le"],"title":"MissionOut"},"MissionScript":{"properties":{"objectif":{"type":"string","maxLength":1000,"minLength":10,"title":"Objectif"},"client":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Client","description":"Nom annoncé : « pour le compte de … »"},"accroche":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Accroche","description":"Phrase d'accroche personnalisée, reprise en ouverture d'appel. L'annonce « assistant vocal automatique » est dite en premier (règle du service, AI Act art. 50), sauf `annonce_ia=interlocuteur_deja_informe` (voir MissionIn)."},"faits":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Faits"},"limites":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Limites"}},"type":"object","required":["objectif"],"title":"MissionScript","description":"Script de mission structuré : ce que l'agent doit obtenir, peut dire, ne doit jamais faire."},"ProlongationIn":{"properties":{"question_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Id","description":"Question visée (défaut : la question en cours)"}},"type":"object","title":"ProlongationIn"},"Reglages":{"properties":{"voix_defaut":{"type":"string","title":"Voix Defaut","description":"1 à 5 (voir GET /v1/voix)","default":"1"},"langue_defaut":{"type":"string","title":"Langue Defaut","description":"fr, en ou auto","default":"fr"},"nom_annonce":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Nom Annonce","description":"Nom annoncé par l'agent : « … pour le compte de <nom> »"},"webhook_url_defaut":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Webhook Url Defaut","description":"HTTPS public, utilisé si la mission n'en donne pas"},"reglages_voix":{"anyOf":[{"$ref":"#/components/schemas/ReglagesVoix"},{"type":"null"}],"description":"Réglages de l'agent au téléphone (classique : vous/tu, expressivité, hésitations, fond sonore, répondeur ; avancé : délai de réponse, relance si silence, interruptions, voix). Absent = réglages recommandés. Surchargeable mission par mission."},"conservation_jours":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Conservation Jours","description":"Durée de conservation des transcriptions (jours) avant effacement automatique : 1 à 90 avec l'offre Particulier (90 par défaut), 1 à 365 avec l'offre Pro, selon le contrat pour une Entreprise (offres v4)","default":90}},"type":"object","title":"Reglages","description":"Valeurs par défaut appliquées aux nouvelles missions (l'API peut toujours les surcharger mission par mission)."},"ReglagesVoix":{"properties":{"forme_adresse":{"type":"string","enum":["vous","tu"],"title":"Forme Adresse","description":"« Vous » convient à presque tous les appels ; « tu » pour des proches.","default":"vous"},"expressivite":{"type":"string","enum":["sobre","naturelle"],"title":"Expressivite","description":"Naturel : la voix sourit ou s'excuse au bon moment. Sobre : toujours neutre.","default":"naturelle"},"hesitations":{"type":"boolean","title":"Hesitations","description":"Rend l'agent plus humain ; jamais sur un chiffre ni pendant l'annonce d'IA.","default":true},"ambiance":{"type":"string","enum":["aucune","bureau","cafe","rue","nature"],"title":"Ambiance","description":"Un léger bruit sous la voix. Sans fond sonore, l'appel reste plus clair.","default":"aucune"},"repondeur":{"type":"string","enum":["message","raccrocher"],"title":"Repondeur","description":"Le message reprend l'objet de votre appel, en une ou deux phrases.","default":"message"},"delai_reponse":{"type":"number","maximum":1.5,"minimum":0.7,"title":"Delai Reponse","description":"Attente maximale quand votre interlocuteur marque une pause. Plus court : plus vif ; plus long : coupe moins la parole. 0,7-1,5 s.","default":1.0},"relance_silence":{"type":"integer","maximum":10.0,"minimum":4.0,"title":"Relance Silence","description":"Si personne ne répond à une question, l'agent dit « Allô ? » après ce délai. 4-10 s.","default":6},"interruption_min":{"type":"number","maximum":1.0,"minimum":0.3,"title":"Interruption Min","description":"Temps de parole qui fait taire l'agent. Plus long : un « hum » ne l'arrête pas. 0,3-1,0 s.","default":0.5},"modele":{"type":"string","enum":["eleven_v4_turbo","eleven_flash_v2_5"],"title":"Modele","description":"La plus naturelle convient à presque tous les appels ; la rapide permet de régler le débit. eleven_v4_turbo = la plus naturelle ; eleven_flash_v2_5 = la rapide.","default":"eleven_v4_turbo"},"stabilite":{"type":"number","maximum":0.6,"minimum":0.3,"title":"Stabilite","description":"Plus bas : voix plus vivante. Plus haut : voix plus égale. 0,30-0,60.","default":0.38},"similarite":{"type":"number","maximum":0.9,"minimum":0.5,"title":"Similarite","description":"Plus haut : plus proche de la voix d'origine. 0,50-0,90.","default":0.75},"style":{"type":"number","maximum":0.3,"minimum":0.0,"title":"Style","description":"Accentue la personnalité de la voix rapide ; 0 est recommandé. 0-0,30 (eleven_flash_v2_5).","default":0.0},"vitesse":{"type":"number","maximum":1.1,"minimum":0.9,"title":"Vitesse","description":"Vitesse de parole de la voix rapide. 0,90-1,10 (eleven_flash_v2_5).","default":1.0},"amplification":{"type":"boolean","title":"Amplification","description":"Renforce légèrement la présence de la voix rapide. (eleven_flash_v2_5)","default":true},"volume_ambiance":{"type":"number","maximum":0.2,"minimum":0.03,"title":"Volume Ambiance","description":"Toujours sous la voix ; actif seulement avec un fond sonore. 0,03-0,20.","default":0.1},"frappe_reflexion":{"type":"boolean","title":"Frappe Reflexion","description":"Un son discret pendant que l'agent prépare sa réponse.","default":false},"tics":{"type":"number","maximum":0.4,"minimum":0.05,"title":"Tics","description":"Combien de petites hésitations, quand elles sont activées. 0,05-0,40.","default":0.15},"balises":{"type":"boolean","title":"Balises","description":"Compatibilité : balises de ton de la voix v4 (préférez « expressivite »).","default":true}},"type":"object","title":"ReglagesVoix","description":"Réglages de l'agent au téléphone (voix et conversation). Niveau « classique » : forme d'adresse, expressivité,\nhésitations, fond sonore, répondeur. Niveau « avancé » : le reste, borné par nous. Valeur hors bornes = 422."},"RejoindreIn":{"properties":{"jeton":{"type":"string","maxLength":200,"minLength":10,"title":"Jeton"},"mot_de_passe":{"type":"string","maxLength":200,"minLength":10,"title":"Mot De Passe"},"nom":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Nom"}},"type":"object","required":["jeton","mot_de_passe"],"title":"RejoindreIn"},"RetractationIn":{"properties":{"recharge_id":{"type":"integer","title":"Recharge Id","description":"Recharge à annuler (GET /v1/retractation)"}},"type":"object","required":["recharge_id"],"title":"RetractationIn"},"RoleIn":{"properties":{"role":{"type":"string","enum":["admin","membre"],"title":"Role"}},"type":"object","required":["role"],"title":"RoleIn"},"SignalementIn":{"properties":{"numero_appele":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Numero Appele","description":"Le numéro qui a REÇU l'appel (le vôtre), format +33… ou 06…, pour retrouver l'appel"},"reference":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Reference","description":"Référence de l'appel si vous l'avez (mis_…)"},"motif":{"type":"string","enum":["fraude","usurpation","menace","harcelement","demarchage","opposition_ignoree","autre"],"title":"Motif","description":"Motif du signalement"},"description":{"type":"string","maxLength":4000,"minLength":10,"title":"Description","description":"Ce qui s'est passé (date, heure, propos)"},"contact":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Contact","description":"E-mail ou téléphone pour vous répondre (facultatif)"},"ne_plus_etre_appele":{"type":"boolean","title":"Ne Plus Etre Appele","description":"Ajouter ce numéro à la liste d'opposition (tous clients), s'il a déjà été appelé par le service ; sinon écrivez à rgpd@ (vérification par SMS)","default":false}},"type":"object","required":["motif","description"],"title":"SignalementIn"},"SuppressionIn":{"properties":{"confirmation":{"type":"string","title":"Confirmation","description":"Écrire exactement « SUPPRIMER MON COMPTE »"},"rembourser_solde":{"type":"boolean","title":"Rembourser Solde","description":"Rembourser le crédit de recharges acheté et non utilisé (CGV art. 13.3), sur le moyen de paiement d'origine, sous 30 jours. Particulier : minutes restantes remboursées entièrement, sans aucun frais. Pro : part non utilisée moins les frais de paiement non récupérables de la recharge d'origine (montant réel facturé par le prestataire, sinon 1,5 % + 0,25 €), détaillés sur l'avoir. Voir GET /v1/compte/remboursement-cloture. false = y renoncer.","default":true}},"type":"object","required":["confirmation"],"title":"SuppressionIn"},"TransferIn":{"properties":{"numero":{"type":"string","title":"Numero","description":"Votre numéro (E.164 France) : l'appel en cours y est transféré","examples":["+33612345678"]},"mode":{"type":"string","enum":["pont","refer"],"title":"Mode","description":"`pont` (défaut) : l'agent vous appelle et vous met en relation sans coupure, puis se retire ; `refer` : transfert SIP REFER (l'appel quitte notre plateforme, selon l'opérateur).","default":"pont"}},"type":"object","required":["numero"],"title":"TransferIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VoixOut":{"properties":{"id":{"type":"string","title":"Id"},"nom":{"type":"string","title":"Nom"},"genre":{"type":"string","enum":["F","H"],"title":"Genre"},"gamme":{"type":"string","enum":["eco","premium"],"title":"Gamme"},"fournisseur":{"type":"string","title":"Fournisseur"},"langues":{"items":{"type":"string"},"type":"array","title":"Langues"},"style":{"additionalProperties":{"type":"string"},"type":"object","title":"Style"},"apercus":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object","title":"Apercus","description":"URL de l'aperçu audio (MP3) par langue"}},"type":"object","required":["id","nom","genre","gamme","fournisseur","langues","style","apercus"],"title":"VoixOut"}}}}