# Aide > Utiliser FanConvert, écran par écran. URL : https://docs.fanconvert.ai/fr/aide L'aide de FanConvert, écran par écran. Dans l'application, le bouton **?** (« Aide et visite guidée ») ouvre aussi la visite de l'écran où vous êtes. --- # Connecter son assistant (MCP) > Brancher Claude Code ou un autre client MCP sur FanConvert, avec l'en-tête Authorization Bearer. URL : https://docs.fanconvert.ai/fr/api/assistant Le serveur MCP de FanConvert est à l'adresse **`https://app.fanconvert.ai/mcp`** (transport HTTP, « Streamable HTTP »). Chaque requête porte votre clé dans l'en-tête `Authorization: Bearer fc_sk_…`. Commencez par [créer une clé](/fr/api/cles) en choisissant **Brancher un assistant IA** : FanConvert vous donne alors le bloc à coller, **votre clé déjà dedans**, avec un bouton **Copier le bloc**. ## Claude Code [#claude-code] 1. Ouvrez un terminal sur l'ordinateur où Claude Code est installé. 2. Collez cette commande (votre clé est déjà dedans dans FanConvert), puis validez : ```bash claude mcp add --transport http fanconvert https://app.fanconvert.ai/mcp \ --header "Authorization: Bearer fc_sk_…" ``` 3. Dans Claude Code, tapez `/mcp` : **fanconvert apparaît connecté.** Ensuite, posez votre question en français, par exemple : « Combien de ventes Emma a-t-elle faites cette semaine ? » ## Autre client MCP [#autre-client-mcp] Tout client qui accepte un serveur MCP distant avec un en-tête fixe : 1. Ajoutez un serveur MCP distant, transport « HTTP » (Streamable HTTP). 2. Adresse : `https://app.fanconvert.ai/mcp` 3. En-tête à envoyer à chaque requête : **`Authorization: Bearer `**. ## Les autres assistants [#les-autres-assistants] Dans Réglages › API & MCP, les onglets **Claude**, **Cursor** et **ChatGPT** affichent « Mode d'emploi en cours de vérification » ou, pour ChatGPT, « ChatGPT n'accepte pas encore de clé : il exige une connexion OAuth, que FanConvert ne propose pas encore. » Cette page sera complétée pour chacun dès que son mode d'emploi est vérifié dans l'application. ## Ce que l'assistant voit [#ce-que-lassistant-voit] L'assistant ne voit que les outils que votre clé permet : une clé « Lecture seule » ne propose aucun outil d'écriture. La liste complète est sur [Ce que l'assistant peut lire et faire](/fr/api/outils-mcp). ## Si ça ne marche pas [#si-ça-ne-marche-pas] | Symptôme | Que faire | |---|---| | `401` ou « non autorisé » | Clé mal copiée, expirée ou révoquée : vérifiez-la dans Réglages › API & MCP, créez-en une autre si besoin. | | L'assistant ne voit pas une créatrice | La clé ne l'inclut pas : une créatrice ajoutée après la création de la clé n'y entre pas. Créez une nouvelle clé. | | Un outil manque | La clé n'a pas le droit correspondant. Les droits d'une clé ne changent pas : créez-en une avec le bon choix. | | `429` | Trop de requêtes d'un coup : attendez quelques secondes. | --- # Créer une clé > Réglages › API & MCP › Nouvelle clé — usage, créatrices, droits, expiration ; la clé fc_sk_ ne s'affiche qu'une fois. URL : https://docs.fanconvert.ai/fr/api/cles Une clé sert à l'API comme au MCP. Elle commence par `fc_sk_` et **ne s'affiche qu'une fois**, à sa création. Réservé aux administrateurs. Si FanConvert vous demande « Changez votre mot de passe avant de créer une clé », changez-le d'abord dans vos réglages de compte. ## Ouvrir le panneau [#ouvrir-le-panneau] Dans FanConvert : **Réglages › API & MCP**, puis **Nouvelle clé**. Le panneau compte six étapes. ### 1. À quoi va-t-elle servir ? [#1-à-quoi-va-t-elle-servir-] - **Brancher un assistant IA** — « Claude, Cursor… Vous recevez le bloc à coller. » - **Connecter un outil ou un développeur (API)** — « Zapier, Make, CRM, script maison. Vous recevez une requête de test. » Ce choix décide des droits proposés : un assistant IA ne reçoit jamais les droits qu'il ne peut pas utiliser (écrire sur un fan, mettre l'IA en pause sur un fan, webhooks : ces gestes n'existent que dans l'API REST). ### 2. Nom [#2-nom] Un nom pour la reconnaître dans la liste, par exemple « Claude – direction ». ### 3. Créatrices [#3-créatrices] Cochez les créatrices que la clé pourra voir. **Une créatrice ajoutée plus tard n'est pas incluse automatiquement** : créez une nouvelle clé si besoin. ### 4. Droits [#4-droits] | Préréglage | Ce qu'il permet | |---|---| | **Lecture seule** (Recommandé) | Voir créatrices, discussions, ventes, statistiques, scripts, médias et urgences. Ne modifie rien. | | **Lecture + actions** (API seulement) | Tout voir, et aussi : étiqueter un fan, écrire la note de l'équipe, mettre l'IA en pause sur un fan, recevoir les ventes par webhook. | | **Personnalisé** | Domaine par domaine, en langage clair : aucun, lecture ou écriture. | Les domaines du choix **Personnalisé** : | Domaine | Ce qu'il couvre | |---|---| | Créatrices et profils | Nom, plateformes, fiche | | Discussions | Messages MYM et Telegram | | Fans : étiquettes et note | Poser une étiquette, écrire la note de l'équipe | | Pause de l'IA sur un fan | Arrêter ou relancer le chatting sur un fan | | Ventes et statistiques | Ventes, revenus et envois par créatrice | | Scripts et médias | Scripts de vente, médiathèque ; écriture : importer des médias | | Réglages de l'agent | Réglages de chatting et négociation d'une créatrice | | Comportement de l'IA | Consignes, style, rythme, relances, mémoire ; chaque changement est approuvé | | Urgences | Ce qui attend un humain | | Webhooks | Recevoir les ventes, urgences et pauses de l'IA en direct | | Essais dans le Playground | Tester l'IA d'une créatrice, rien n'est envoyé | Les droits d'une clé ne changent plus après sa création. Le détail technique de chaque droit (`creators:read`, `sales:read`…) est sur la page [Authentification](/fr/api/rest/authentification). ### 5. Expiration [#5-expiration] 7, 30 ou 90 jours. La date d'expiration exacte s'affiche sous le choix. ### 6. Confirmez avec votre mot de passe [#6-confirmez-avec-votre-mot-de-passe] Saisissez votre **Mot de passe actuel**, puis **Créer la clé**. En cas de refus : « La création a été refusée. Vérifiez le mot de passe et les champs. » ## Après la création [#après-la-création] La clé s'affiche **une seule fois**, avec la suite : - clé « Assistant IA » : **Brancher votre assistant** — le bloc à coller, déjà rempli avec votre clé. Voir [Connecter son assistant](/fr/api/assistant). - clé « API » : **Ensuite : tester la clé** — une requête de test en curl, JavaScript ou Python, qui renvoie ses créatrices (`creatorIds`), ses droits (`scopes`) et son expiration (`expiresAt`). Rangez-la dans un gestionnaire de mots de passe. Ne la collez jamais dans une discussion avec l'assistant, ni dans un e-mail ou un message. **Perdue ? Révoquez-la et créez-en une autre.** ## La liste « Vos clés » [#la-liste--vos-clés-] Pour chaque clé : son nom, à quoi elle **Sert**, ses **Créatrices**, ses **Droits**, quand elle **Expire** et sa **Dernière utilisation** (« Jamais » si elle n'a pas encore servi). - **Révoquer** coupe l'accès dès sa prochaine requête. - Une clé expirée affiche **Supprimer** à la place de **Révoquer**. --- # Vue d'ensemble > Brancher un assistant IA ou un outil sur votre compte FanConvert, avec une clé fc_sk_. URL : https://docs.fanconvert.ai/fr/api FanConvert s'ouvre à vos outils de deux façons, avec **la même clé** : | | Assistant IA (MCP) | Outil ou développeur (API REST) | |---|---|---| | Pour | vous et votre équipe | un développeur ou un outil d'automatisation | | Exemples | Claude Code, ou tout client MCP | Zapier, Make, CRM, Google Sheets, script maison | | Adresse | `https://app.fanconvert.ai/mcp` | `https://app.fanconvert.ai/public/v1` | | Ce qu'on fait | poser des questions sur vos créatrices, en français, sans écrire de code | lire vos données, recevoir les ventes en direct (webhooks) | ## Ce qui ne change jamais [#ce-qui-ne-change-jamais] - **Aucune clé ne peut envoyer un message à un fan.** Ni l'API ni le serveur MCP n'ont de route d'envoi. - **Administrateurs seulement** : seuls les administrateurs de l'organisation créent et utilisent une clé. - **Le même cloisonnement que le dashboard** : une clé ne voit que les créatrices choisies à sa création ; une autre créatrice répond « introuvable ». - **Révocable à tout moment** dans Réglages › API & MCP : la clé est coupée dès sa prochaine requête. L'API publique et le serveur MCP sont en Beta : des routes et des champs peuvent encore bouger. Chaque changement est inscrit au [journal des changements](/fr/api/rest/journal). ## Par où commencer [#par-où-commencer] ## Pour une IA qui écrit du code [#pour-une-ia-qui-écrit-du-code] - Index de cette documentation : [`/llms.txt`](https://docs.fanconvert.ai/llms.txt), texte intégral : [`/llms-full.txt`](https://docs.fanconvert.ai/llms-full.txt). - Chaque page existe en Markdown : ajoutez `.md` à son adresse. - Contrat complet : [`openapi.json`](https://app.fanconvert.ai/public/v1/openapi.json) (OpenAPI 3.1). --- # Ce que l'assistant peut lire et faire > Les outils du serveur MCP FanConvert, domaine par domaine, et le droit de clé que chacun demande. URL : https://docs.fanconvert.ai/fr/api/outils-mcp Votre assistant ne voit **que les outils que sa clé peut appeler** : la liste est recalculée à chaque requête avec les droits de la clé. Les noms ci-dessous sont ceux que l'assistant affiche ; vous n'avez pas à les retenir, posez simplement votre question. Envoyer un message à un fan, connecter un compte de plateforme, allumer ou éteindre l'agent d'une créatrice : aucun outil ne le permet. ## Lire [#lire] | Domaine (droit) | Ce que vous pouvez demander | Outils | |---|---|---| | Créatrices et profils (`creators:read`, `profile:read`) | la liste des créatrices, leur fiche, l'état de leur agent | `creators_list`, `creator_get`, `creator_runtime_get`, `creator_profile_get` | | Discussions MYM (`conversations:read`) | les conversations, leurs messages, leurs événements et leurs ventes | `conversations_list`, `conversation_get`, `conversation_messages`, `conversation_events`, `conversation_sales`, `conversation_decisions` | | Discussions Telegram (`telegram:read`) | conversations, messages, médias reçus, offres, message d'accueil, bot | `telegram_conversations_list`, `telegram_conversation_get`, `telegram_conversation_messages`, `telegram_conversation_events`, `telegram_conversation_decisions`, `telegram_conversation_state`, `telegram_conversation_received_media`, `telegram_media_list`, `telegram_offers_list`, `telegram_welcome_get`, `telegram_bot_get`, `telegram_fan_filter_get`, `telegram_fan_filter_resolve` | | Fans (`fans:read`) | la note de l'équipe sur un fan | `fan_note_get`, `telegram_fan_note_get` | | Pause de l'IA (`chatting:read`) | qui répond à un fan, les interventions humaines, les médias proposés, les notes données aux messages | `conversation_control_get`, `conversation_interventions_list`, `conversation_command_get`, `conversation_offered_media`, `conversation_fan_scripts`, `conversation_ratings_list`, `message_ratings_export`, `telegram_conversation_interventions`, `telegram_conversation_ratings_list` | | Ventes et statistiques (`sales:read`, `statistics:read`) | le tunnel d'une vente, les ventes Telegram, les statistiques par créatrice et par agent | `conversation_sale_tunnel`, `telegram_sales_list`, `statistics_summary`, `statistics_creators`, `statistics_agents`, `creator_media_stats_get`, `creator_script_stats_list` | | Scripts et médias (`scripts:read`, `media:read`) | les scripts de vente, la revue d'une créatrice, la médiathèque et les packs | `scripts_list`, `script_get`, `creator_review_get`, `media_list`, `media_pack_get`, `media_files_list`, `media_file_get` | | Réglages de l'agent (`settings:read`, `schedule:read`, `filters:read`) | les réglages de chatting, le planning, le filtre de fans, la négociation et ses tests A/B | `creator_settings_get`, `creator_schedule_get`, `fan_filter_get`, `fan_filter_resolve`, `negotiation_get`, `negotiation_organization_get`, `negotiation_gifts_get`, `negotiation_journal`, `negotiation_stats`, `ab_tests_list`, `ab_tests_get`, `ab_tests_results` | | Écran Agent IA (`settings:read`, `profile:read`, `scripts:read`) | consignes, style, voix, mémoire, rythme, reprise de contact, seuil, live, « Sa vie », fin de script, priorités | `creator_behavior_guidance_get`, `creator_instructions_get`, `creator_style_get`, `creator_voice_get`, `creator_memory_guidance_get`, `creator_rythme_get`, `creator_reengagement_get`, `creator_initial_threshold_get`, `creator_fan_discovery_get`, `creator_live_get`, `creator_life_get`, `creator_script_ending_get`, `creator_script_priority_get` | | Urgences (`notifications:read`) | ce qui attend un humain | `notifications_list`, `notification_get` | ## Agir [#agir] | Domaine (droit) | Ce que l'assistant peut faire | Comment | |---|---|---| | Comportement de l'IA (`ai:write`) | changer les consignes, le style, le rythme, les relances, la mémoire d'une créatrice | l'assistant **prépare** le changement ; il ne s'applique qu'après **votre approbation** dans FanConvert | | Réglages de l'agent (`settings:write`) | changer les réglages de négociation | préparé, puis approuvé par vous | | Scripts et médias (`media:write`) | importer un fichier dans la médiathèque d'une créatrice (Beta) | en un appel, dans les limites de votre agence | | Essais dans le Playground (`playground:run`) | ouvrir une conversation d'essai, jouer le fan, comparer, rejouer | bac à sable : **rien n'est envoyé à un fan** | Le suivi des actions préparées (`command_get`, `commands_list`, `job_get`, `job_items_list`) accompagne ces droits. ## Approuver une action [#approuver-une-action] Quand l'assistant prépare un changement, il apparaît dans **Réglages › API & MCP › Actions à approuver** (si les actions à approuver sont activées pour votre agence). Sélectionnez l'action pour voir son aperçu, puis décidez. FanConvert vous demande votre mot de passe avant d'approuver. | Message | Ce qu'il veut dire | |---|---| | Approbation expirée. Demandez un nouvel aperçu. | L'aperçu a trop attendu : demandez à l'assistant de le refaire. | | Cet aperçu a expiré ou a changé. Rechargez l'action et demandez un nouvel aperçu si nécessaire. | Le réglage a bougé depuis l'aperçu : rien n'a été appliqué. | | Approbation utilisée. Consultez l'état de la commande. | Cette approbation a déjà servi. | | Approuvée, exécution non confirmée. | Rechargez l'action pour voir si le changement est passé avant de recommencer. | | Cette action n'est plus accessible avec vos droits actuels. | Vos droits ou ceux de la clé ont changé. | | Changez votre mot de passe avant d'approuver une action. | Changez votre mot de passe, puis revenez. | --- # Clé API > Référence générée depuis le contrat OpenAPI : Clé API. URL : https://docs.fanconvert.ai/fr/api/reference/cle-api {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## La clé utilisée [#la-clé-utilisée] `GET /public/v1/me` · `getApiKey` ### Réponse 200 [#réponse-200] **`ApiKeyInfo`** | Champ | Type | Requis | Description | |---|---|---|---| | `keyId` | string | oui | | | `organizationId` | string | oui | | | `scopes` | string[] | oui | | | `creatorIds` | string[] | oui | Les créatrices que cette clé voit. | | `expiresAt` | string (date-time) | oui | | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/me" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` --- # Conversations > Référence générée depuis le contrat OpenAPI : Conversations. URL : https://docs.fanconvert.ai/fr/api/reference/conversations {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## Les conversations d'une créatrice [#les-conversations-dune-créatrice] `GET /public/v1/creators/{creator_id}/conversations` · `listConversations` ### Paramètres [#paramètres] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `platform` | requête | "mym" \| "telegram" \| "onlyfans" | non | La plateforme de la conversation. (défaut : `mym`) | | `limit` | requête | integer | non | Taille de la page. (défaut : `50`) | | `cursor` | requête | string \| null | non | Le `nextCursor` de la page précédente. | ### Réponse 200 [#réponse-200] **`Page_Conversation_`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | Conversation[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | **`Conversation`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | Identifiant de la conversation sur sa plateforme (MYM : le chat id). | | `platform` | "mym" \| "telegram" \| "onlyfans" | oui | | | `fan` | Fan | oui | | | `lastFanMessageAt` | string (date-time) \| null | oui | | | `lastMessageAt` | string (date-time) \| null | oui | | | `unreadCount` | integer \| null | non | Messages du fan non lus, quand la plateforme les compte. | | `hasPurchased` | boolean \| null | non | | **`Fan`** | Champ | Type | Requis | Description | |---|---|---|---| | `name` | string \| null | oui | | | `username` | string \| null | non | | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators/{creator_id}/conversations" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Les messages d'une conversation [#les-messages-dune-conversation] `GET /public/v1/creators/{creator_id}/conversations/{conversation_id}/messages` · `listMessages` ### Paramètres [#paramètres-1] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `conversation_id` | chemin | string | oui | Identifiant de la conversation. | | `platform` | requête | "mym" \| "telegram" \| "onlyfans" | non | La plateforme de la conversation. (défaut : `mym`) | | `limit` | requête | integer | non | Taille de la page. (défaut : `50`) | | `cursor` | requête | string \| null | non | Le `nextCursor` de la page précédente. | ### Réponse 200 [#réponse-200-1] **`Page_Message_`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | Message[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | **`Message`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `direction` | "fan" \| "creator" | oui | | | `text` | string | oui | | | `sentAt` | string (date-time) \| null | oui | | | `media` | MessageMedia[] | oui | | **`MessageMedia`** | Champ | Type | Requis | Description | |---|---|---|---| | `status` | "paid" \| "pending" \| "refused" \| "free" \| "unknown" | oui | | | `priceMinor` | integer \| null | non | | | `currency` | string \| null | non | | ### Erreurs possibles [#erreurs-possibles-1] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-1] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators/{creator_id}/conversations/{conversation_id}/messages" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` --- # Créatrices > Référence générée depuis le contrat OpenAPI : Créatrices. URL : https://docs.fanconvert.ai/fr/api/reference/creatrices {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## Les créatrices de la clé [#les-créatrices-de-la-clé] `GET /public/v1/creators` · `listCreators` ### Réponse 200 [#réponse-200] **`Page_Creator_`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | Creator[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | **`Creator`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `status` | "active" \| "inactive" \| "error" | oui | | | `platforms` | string[] | oui | | | `aiEnabled` | boolean | oui | L'interrupteur de l'IA de la créatrice, comme sur le dashboard. | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Une créatrice [#une-créatrice] `GET /public/v1/creators/{creator_id}` · `getCreator` ### Paramètres [#paramètres] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | ### Réponse 200 [#réponse-200-1] **`Creator`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `status` | "active" \| "inactive" \| "error" | oui | | | `platforms` | string[] | oui | | | `aiEnabled` | boolean | oui | L'interrupteur de l'IA de la créatrice, comme sur le dashboard. | ### Erreurs possibles [#erreurs-possibles-1] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-1] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators/{creator_id}" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` --- # Fans > Référence générée depuis le contrat OpenAPI : Fans. URL : https://docs.fanconvert.ai/fr/api/reference/fans {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## Les étiquettes de fans d'une créatrice [#les-étiquettes-de-fans-dune-créatrice] `GET /public/v1/creators/{creator_id}/labels` · `listFanLabels` ### Paramètres [#paramètres] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `platform` | requête | "mym" \| "telegram" | non | La plateforme du fan. (défaut : `mym`) | ### Réponse 200 [#réponse-200] **`Page_FanLabel_`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | FanLabel[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | **`FanLabel`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `color` | string | oui | | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators/{creator_id}/labels" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## La fiche d'un fan : étiquettes et note de l'équipe [#la-fiche-dun-fan--étiquettes-et-note-de-léquipe] `GET /public/v1/creators/{creator_id}/fans/{conversation_id}` · `getFan` ### Paramètres [#paramètres-1] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `conversation_id` | chemin | string | oui | Identifiant de la conversation. | | `platform` | requête | "mym" \| "telegram" | non | La plateforme du fan. (défaut : `mym`) | ### Réponse 200 [#réponse-200-1] **`FanCard`** | Champ | Type | Requis | Description | |---|---|---|---| | `conversationId` | string | oui | | | `platform` | "mym" \| "telegram" | oui | | | `labels` | FanLabel[] | oui | | | `note` | TeamNote | oui | | **`FanLabel`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `color` | string | oui | | **`TeamNote`** | Champ | Type | Requis | Description | |---|---|---|---| | `text` | string \| null | oui | | | `revision` | integer | oui | À renvoyer en `expectedRevision` pour écrire. | | `updatedAt` | string (date-time) \| null | oui | | ### Erreurs possibles [#erreurs-possibles-1] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-1] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators/{creator_id}/fans/{conversation_id}" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Écrire la note de l'équipe sur un fan [#écrire-la-note-de-léquipe-sur-un-fan] `PUT /public/v1/creators/{creator_id}/fans/{conversation_id}/note` · `putFanNote` ### Paramètres [#paramètres-2] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `conversation_id` | chemin | string | oui | Identifiant de la conversation. | | `platform` | requête | "mym" \| "telegram" | non | La plateforme du fan. (défaut : `mym`) | ### Corps de la requête [#corps-de-la-requête] **`TeamNoteWrite`** | Champ | Type | Requis | Description | |---|---|---|---| | `text` | string | oui | La note, 1 000 caractères au plus ; vide = retirée. | | `expectedRevision` | integer | oui | La `revision` lue : une autre écriture entre-temps → 409. | ### Réponse 200 [#réponse-200-2] **`FanCard`** | Champ | Type | Requis | Description | |---|---|---|---| | `conversationId` | string | oui | | | `platform` | "mym" \| "telegram" | oui | | | `labels` | FanLabel[] | oui | | | `note` | TeamNote | oui | | **`FanLabel`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `color` | string | oui | | **`TeamNote`** | Champ | Type | Requis | Description | |---|---|---|---| | `text` | string \| null | oui | | | `revision` | integer | oui | À renvoyer en `expectedRevision` pour écrire. | | `updatedAt` | string (date-time) \| null | oui | | ### Erreurs possibles [#erreurs-possibles-2] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-2] ```bash curl -X PUT "https://app.fanconvert.ai/public/v1/creators/{creator_id}/fans/{conversation_id}/note" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ … }' ``` ## Poser une étiquette sur un fan (sans effet si elle y est déjà) [#poser-une-étiquette-sur-un-fan-sans-effet-si-elle-y-est-déjà] `PUT /public/v1/creators/{creator_id}/fans/{conversation_id}/labels/{label_id}` · `addFanLabel` ### Paramètres [#paramètres-3] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `conversation_id` | chemin | string | oui | Identifiant de la conversation. | | `label_id` | chemin | string | oui | Identifiant de l'étiquette. | | `platform` | requête | "mym" \| "telegram" | non | La plateforme du fan. (défaut : `mym`) | ### Réponse 200 [#réponse-200-3] **`FanCard`** | Champ | Type | Requis | Description | |---|---|---|---| | `conversationId` | string | oui | | | `platform` | "mym" \| "telegram" | oui | | | `labels` | FanLabel[] | oui | | | `note` | TeamNote | oui | | **`FanLabel`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `color` | string | oui | | **`TeamNote`** | Champ | Type | Requis | Description | |---|---|---|---| | `text` | string \| null | oui | | | `revision` | integer | oui | À renvoyer en `expectedRevision` pour écrire. | | `updatedAt` | string (date-time) \| null | oui | | ### Erreurs possibles [#erreurs-possibles-3] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-3] ```bash curl -X PUT "https://app.fanconvert.ai/public/v1/creators/{creator_id}/fans/{conversation_id}/labels/{label_id}" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Retirer une étiquette d'un fan [#retirer-une-étiquette-dun-fan] `DELETE /public/v1/creators/{creator_id}/fans/{conversation_id}/labels/{label_id}` · `removeFanLabel` ### Paramètres [#paramètres-4] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `conversation_id` | chemin | string | oui | Identifiant de la conversation. | | `label_id` | chemin | string | oui | Identifiant de l'étiquette. | | `platform` | requête | "mym" \| "telegram" | non | La plateforme du fan. (défaut : `mym`) | ### Réponse 200 [#réponse-200-4] **`FanCard`** | Champ | Type | Requis | Description | |---|---|---|---| | `conversationId` | string | oui | | | `platform` | "mym" \| "telegram" | oui | | | `labels` | FanLabel[] | oui | | | `note` | TeamNote | oui | | **`FanLabel`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `color` | string | oui | | **`TeamNote`** | Champ | Type | Requis | Description | |---|---|---|---| | `text` | string \| null | oui | | | `revision` | integer | oui | À renvoyer en `expectedRevision` pour écrire. | | `updatedAt` | string (date-time) \| null | oui | | ### Erreurs possibles [#erreurs-possibles-4] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-4] ```bash curl -X DELETE "https://app.fanconvert.ai/public/v1/creators/{creator_id}/fans/{conversation_id}/labels/{label_id}" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` --- # IA > Référence générée depuis le contrat OpenAPI : IA. URL : https://docs.fanconvert.ai/fr/api/reference/ia {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## Qui répond à ce fan : l'IA, une personne, ou personne [#qui-répond-à-ce-fan--lia-une-personne-ou-personne] `GET /public/v1/creators/{creator_id}/conversations/{conversation_id}/ai` · `getAiState` ### Paramètres [#paramètres] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `conversation_id` | chemin | string | oui | Identifiant de la conversation. | | `platform` | requête | "mym" \| "telegram" | non | La plateforme du fan. (défaut : `mym`) | ### Réponse 200 [#réponse-200] **`AiState`** | Champ | Type | Requis | Description | |---|---|---|---| | `conversationId` | string | oui | | | `platform` | "mym" \| "telegram" | oui | | | `creatorAiEnabled` | boolean | oui | | | `control` | "ai" \| "human" \| "paused" \| "blocked" \| "transition" | oui | ai = l'IA répond ; human = une personne a la main ; paused = personne ne répond ; blocked = un envoi précédent est à vérifier ; transition = un changement est en cours. | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators/{creator_id}/conversations/{conversation_id}/ai" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Mettre l'IA en pause sur ce fan (« Arrêter le chatting »), MYM [#mettre-lia-en-pause-sur-ce-fan--arrêter-le-chatting--mym] `POST /public/v1/creators/{creator_id}/conversations/{conversation_id}/ai/pause` · `pauseAi` En-tête `Idempotency-Key` obligatoire : voir [Écritures et idempotence](/fr/api/rest/ecritures). ### Paramètres [#paramètres-1] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `conversation_id` | chemin | string | oui | Identifiant de la conversation. | | `Idempotency-Key` | en-tête | string | oui | Obligatoire : la même clé rejoue la même réponse, sans 2e écriture. | ### Réponse 200 [#réponse-200-1] **`AiPause`** | Champ | Type | Requis | Description | |---|---|---|---| | `conversationId` | string | oui | | | `platform` | string | oui | | | `paused` | boolean | oui | true = l'IA ne répond plus à ce fan. | | `filterMode` | "none" \| "whitelist" \| "blacklist" | oui | Le mode du filtre de la créatrice, inchangé par l'API. | ### Erreurs possibles [#erreurs-possibles-1] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-1] ```bash curl -X POST "https://app.fanconvert.ai/public/v1/creators/{creator_id}/conversations/{conversation_id}/ai/pause" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" ``` ## Rendre ce fan à l'IA (« Relancer le chatting »), MYM [#rendre-ce-fan-à-lia--relancer-le-chatting--mym] `POST /public/v1/creators/{creator_id}/conversations/{conversation_id}/ai/resume` · `resumeAi` En-tête `Idempotency-Key` obligatoire : voir [Écritures et idempotence](/fr/api/rest/ecritures). ### Paramètres [#paramètres-2] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `conversation_id` | chemin | string | oui | Identifiant de la conversation. | | `Idempotency-Key` | en-tête | string | oui | Obligatoire : la même clé rejoue la même réponse, sans 2e écriture. | ### Réponse 200 [#réponse-200-2] **`AiPause`** | Champ | Type | Requis | Description | |---|---|---|---| | `conversationId` | string | oui | | | `platform` | string | oui | | | `paused` | boolean | oui | true = l'IA ne répond plus à ce fan. | | `filterMode` | "none" \| "whitelist" \| "blacklist" | oui | Le mode du filtre de la créatrice, inchangé par l'API. | ### Erreurs possibles [#erreurs-possibles-2] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-2] ```bash curl -X POST "https://app.fanconvert.ai/public/v1/creators/{creator_id}/conversations/{conversation_id}/ai/resume" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" ``` --- # Référence de l’API > Toutes les routes de l’API publique, générées depuis le contrat OpenAPI 3.1. URL : https://docs.fanconvert.ai/fr/api/reference {/* Généré par scripts/generer-reference.mjs : ne pas modifier à la main. */} Cette référence est générée à chaque construction du site depuis [le contrat OpenAPI 3.1](https://app.fanconvert.ai/public/v1/openapi.json) servi par l'API : elle ne peut pas diverger de ce que l'API accepte. Adresse de base : `https://app.fanconvert.ai/public/v1`. ## Routes [#routes] - [Clé API](/fr/api/reference/cle-api) - `GET /public/v1/me` — La clé utilisée - [Créatrices](/fr/api/reference/creatrices) - `GET /public/v1/creators` — Les créatrices de la clé - `GET /public/v1/creators/{creator_id}` — Une créatrice - [Conversations](/fr/api/reference/conversations) - `GET /public/v1/creators/{creator_id}/conversations` — Les conversations d'une créatrice - `GET /public/v1/creators/{creator_id}/conversations/{conversation_id}/messages` — Les messages d'une conversation - [Fans](/fr/api/reference/fans) - `GET /public/v1/creators/{creator_id}/labels` — Les étiquettes de fans d'une créatrice - `GET /public/v1/creators/{creator_id}/fans/{conversation_id}` — La fiche d'un fan : étiquettes et note de l'équipe - `PUT /public/v1/creators/{creator_id}/fans/{conversation_id}/note` — Écrire la note de l'équipe sur un fan - `PUT /public/v1/creators/{creator_id}/fans/{conversation_id}/labels/{label_id}` — Poser une étiquette sur un fan (sans effet si elle y est déjà) - `DELETE /public/v1/creators/{creator_id}/fans/{conversation_id}/labels/{label_id}` — Retirer une étiquette d'un fan - [IA](/fr/api/reference/ia) - `GET /public/v1/creators/{creator_id}/conversations/{conversation_id}/ai` — Qui répond à ce fan : l'IA, une personne, ou personne - `POST /public/v1/creators/{creator_id}/conversations/{conversation_id}/ai/pause` — Mettre l'IA en pause sur ce fan (« Arrêter le chatting »), MYM - `POST /public/v1/creators/{creator_id}/conversations/{conversation_id}/ai/resume` — Rendre ce fan à l'IA (« Relancer le chatting »), MYM - [Ventes et statistiques](/fr/api/reference/ventes-et-statistiques) - `GET /public/v1/sales` — Les ventes, par plateforme - `GET /public/v1/statistics/creators` — Revenus et envois par créatrice sur une période - [Scripts et médias](/fr/api/reference/scripts-et-medias) - `GET /public/v1/creators/{creator_id}/scripts` — Les scripts de vente d'une créatrice - `GET /public/v1/creators/{creator_id}/media` — La médiathèque d'une créatrice - [Urgences](/fr/api/reference/urgences) - `GET /public/v1/emergencies` — Les urgences : ce qui attend un humain - [Webhooks](/fr/api/reference/webhooks) - `POST /public/v1/webhooks` — Enregistrer une adresse qui recevra les événements - `GET /public/v1/webhooks` — Les webhooks de cette clé - `DELETE /public/v1/webhooks/{endpoint_id}` — Désactiver un webhook (son journal est gardé) - `GET /public/v1/webhooks/{endpoint_id}/deliveries` — Le journal des livraisons, les plus récentes d'abord - `POST /public/v1/webhooks/{endpoint_id}/ping` — Envoyer un événement `ping` (aucune donnée) pour tester la réception --- # Scripts et médias > Référence générée depuis le contrat OpenAPI : Scripts et médias. URL : https://docs.fanconvert.ai/fr/api/reference/scripts-et-medias {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## Les scripts de vente d'une créatrice [#les-scripts-de-vente-dune-créatrice] `GET /public/v1/creators/{creator_id}/scripts` · `listScripts` ### Paramètres [#paramètres] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `platform` | requête | "mym" \| "telegram" \| "onlyfans" \| "fanvue" | non | (défaut : `mym`) | ### Réponse 200 [#réponse-200] **`Page_Script_`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | Script[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | **`Script`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `description` | string | oui | | | `enabled` | boolean | oui | | | `stepsCount` | integer | oui | | | `mediaCount` | integer | oui | | | `folderId` | string \| null | oui | | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators/{creator_id}/scripts" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## La médiathèque d'une créatrice [#la-médiathèque-dune-créatrice] `GET /public/v1/creators/{creator_id}/media` · `listMedia` ### Paramètres [#paramètres-1] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `creator_id` | chemin | string | oui | Identifiant de la créatrice. | | `platform` | requête | string | non | La médiathèque n'existe que sur MYM. (défaut : `mym`) | ### Réponse 200 [#réponse-200-1] **`Page_MediaPack_`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | MediaPack[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | **`MediaPack`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `name` | string | oui | | | `description` | string | oui | | | `fileCount` | integer | oui | | ### Erreurs possibles [#erreurs-possibles-1] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-1] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/creators/{creator_id}/media" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` --- # Urgences > Référence générée depuis le contrat OpenAPI : Urgences. URL : https://docs.fanconvert.ai/fr/api/reference/urgences {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## Les urgences : ce qui attend un humain [#les-urgences--ce-qui-attend-un-humain] `GET /public/v1/emergencies` · `listEmergencies` ### Paramètres [#paramètres] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `platform` | requête | "mym" \| "telegram" | non | La plateforme du fan. (défaut : `mym`) | | `status` | requête | "open" \| "to_handle" \| "in_progress" \| "resolved" \| null | non | | | `creatorId` | requête | string \| null | non | | | `limit` | requête | integer | non | Taille de la page. (défaut : `50`) | | `cursor` | requête | string \| null | non | Le `nextCursor` de la page précédente. | ### Réponse 200 [#réponse-200] **`Page_Emergency_`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | Emergency[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | **`Emergency`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `creatorId` | string | oui | | | `conversationId` | string | oui | | | `fanName` | string | oui | | | `reason` | string | oui | | | `level` | string | oui | | | `priority` | string | oui | | | `status` | "to_handle" \| "in_progress" \| "resolved" | oui | | | `occurrences` | integer | oui | | | `openedAt` | string (date-time) | oui | | | `lastSignalAt` | string (date-time) | oui | | | `resolvedAt` | string (date-time) \| null | oui | | | `excerpt` | string \| null | oui | Le message du fan qui l'a déclenchée. | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/emergencies" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` --- # Ventes et statistiques > Référence générée depuis le contrat OpenAPI : Ventes et statistiques. URL : https://docs.fanconvert.ai/fr/api/reference/ventes-et-statistiques {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## Les ventes, par plateforme [#les-ventes-par-plateforme] `GET /public/v1/sales` · `listSales` ### Paramètres [#paramètres] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `platform` | requête | "mym" \| "telegram" \| "onlyfans" \| "fanvue" | non | (défaut : `mym`) | | `creatorId` | requête | string \| null | non | Filtre. | | `from` | requête | string (date-time) \| null | non | MYM seulement. | | `to` | requête | string (date-time) \| null | non | MYM seulement. | | `limit` | requête | integer | non | Taille de la page. (défaut : `50`) | | `cursor` | requête | string \| null | non | Le `nextCursor` de la page précédente. | ### Réponse 200 [#réponse-200] **`SalesPage`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | Sale[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | | `platform` | "mym" \| "telegram" \| "onlyfans" \| "fanvue" | oui | | | `currency` | string | oui | | | `totalMinor` | integer \| null | non | Total de la période, quand la plateforme le donne. | **`Sale`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `platform` | "mym" \| "telegram" \| "onlyfans" \| "fanvue" | oui | | | `creatorId` | string | oui | | | `conversationId` | string \| null | oui | | | `at` | string (date-time) \| null | oui | | | `amountMinor` | integer | oui | Montant payé, en unité mineure de la devise (centimes ; Stars pour XTR). | | `currency` | string | oui | | | `kind` | string \| null | non | Ce qui a été payé : média, pourboire, abonnement… | | `refundedAt` | string (date-time) \| null | non | | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/sales" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Revenus et envois par créatrice sur une période [#revenus-et-envois-par-créatrice-sur-une-période] `GET /public/v1/statistics/creators` · `listCreatorStatistics` ### Paramètres [#paramètres-1] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `from` | requête | string (date-time) | oui | | | `to` | requête | string (date-time) | oui | | | `platform` | requête | "mym" \| "telegram" \| "onlyfans" \| "fanvue" | non | (défaut : `mym`) | ### Réponse 200 [#réponse-200-1] **`Page_CreatorStats_`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | CreatorStats[] | oui | | | `nextCursor` | string \| null | non | À repasser en `cursor` pour lire la page suivante ; null = dernière page. | **`CreatorStats`** | Champ | Type | Requis | Description | |---|---|---|---| | `creatorId` | string | oui | | | `name` | string | oui | | | `platform` | string | oui | | | `currency` | string | oui | | | `revenueMinor` | integer | oui | | | `sales` | integer | oui | | | `messagesSent` | integer | oui | | | `paidMediaSent` | integer | oui | | | `freeMediaSent` | integer | oui | | ### Erreurs possibles [#erreurs-possibles-1] `401` · `403` · `404` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-1] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/statistics/creators" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` --- # Webhooks > Référence générée depuis le contrat OpenAPI : Webhooks. URL : https://docs.fanconvert.ai/fr/api/reference/webhooks {/* Généré par scripts/generer-reference.mjs depuis openapi/public-v1.json : ne pas modifier à la main. */} ## Enregistrer une adresse qui recevra les événements [#enregistrer-une-adresse-qui-recevra-les-événements] `POST /public/v1/webhooks` · `createWebhook` En-tête `Idempotency-Key` obligatoire : voir [Écritures et idempotence](/fr/api/rest/ecritures). ### Paramètres [#paramètres] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `Idempotency-Key` | en-tête | string | oui | | ### Corps de la requête [#corps-de-la-requête] **`WebhookCreate`** | Champ | Type | Requis | Description | |---|---|---|---| | `url` | string | oui | https://, hôte public, port 443 ou 8443. | | `events` | "sale.created" \| "emergency.created" \| "ai.paused"[] | oui | | ### Réponse 201 [#réponse-201] **`WebhookCreated`** | Champ | Type | Requis | Description | |---|---|---|---| | `webhook` | Webhook | oui | | | `secret` | string | oui | Le secret de signature `whsec_…` : affiché UNE fois, gardez-le. | **`Webhook`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `url` | string | oui | | | `events` | string[] | oui | | | `createdAt` | string (date-time) | oui | | | `disabledAt` | string (date-time) \| null | oui | | | `disabledReason` | string \| null | oui | | ### Erreurs possibles [#erreurs-possibles] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple] ```bash curl -X POST "https://app.fanconvert.ai/public/v1/webhooks" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ … }' ``` ## Les webhooks de cette clé [#les-webhooks-de-cette-clé] `GET /public/v1/webhooks` · `listWebhooks` ### Réponse 200 [#réponse-200] ### Erreurs possibles [#erreurs-possibles-1] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-1] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/webhooks" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Désactiver un webhook (son journal est gardé) [#désactiver-un-webhook-son-journal-est-gardé] `DELETE /public/v1/webhooks/{endpoint_id}` · `disableWebhook` ### Paramètres [#paramètres-1] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `endpoint_id` | chemin | string | oui | | ### Réponse 200 [#réponse-200-1] **`Webhook`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `url` | string | oui | | | `events` | string[] | oui | | | `createdAt` | string (date-time) | oui | | | `disabledAt` | string (date-time) \| null | oui | | | `disabledReason` | string \| null | oui | | ### Erreurs possibles [#erreurs-possibles-2] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-2] ```bash curl -X DELETE "https://app.fanconvert.ai/public/v1/webhooks/{endpoint_id}" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Le journal des livraisons, les plus récentes d'abord [#le-journal-des-livraisons-les-plus-récentes-dabord] `GET /public/v1/webhooks/{endpoint_id}/deliveries` · `listWebhookDeliveries` ### Paramètres [#paramètres-2] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `endpoint_id` | chemin | string | oui | | | `limit` | requête | integer | non | (défaut : `50`) | | `cursor` | requête | string \| null | non | | ### Réponse 200 [#réponse-200-2] **`DeliveryPage`** | Champ | Type | Requis | Description | |---|---|---|---| | `items` | Delivery[] | oui | | | `nextCursor` | string \| null | non | | **`Delivery`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `eventId` | string | oui | | | `eventType` | string | oui | | | `status` | "pending" \| "delivered" \| "failed" | oui | | | `attempts` | integer | oui | | | `lastStatusCode` | integer \| null | oui | | | `lastError` | string \| null | oui | Motif court : timeout, connexion, http_<code>, adresse_refusee… | | `createdAt` | string (date-time) | oui | | | `nextAttemptAt` | string (date-time) \| null | oui | | | `deliveredAt` | string (date-time) \| null | oui | | ### Erreurs possibles [#erreurs-possibles-3] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-3] ```bash curl -X GET "https://app.fanconvert.ai/public/v1/webhooks/{endpoint_id}/deliveries" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ## Envoyer un événement `ping` (aucune donnée) pour tester la réception [#envoyer-un-événement-ping-aucune-donnée-pour-tester-la-réception] `POST /public/v1/webhooks/{endpoint_id}/ping` · `pingWebhook` En-tête `Idempotency-Key` obligatoire : voir [Écritures et idempotence](/fr/api/rest/ecritures). ### Paramètres [#paramètres-3] | Nom | Où | Type | Requis | Description | |---|---|---|---|---| | `endpoint_id` | chemin | string | oui | | ### Réponse 202 [#réponse-202] **`Webhook`** | Champ | Type | Requis | Description | |---|---|---|---| | `id` | string | oui | | | `url` | string | oui | | | `events` | string[] | oui | | | `createdAt` | string (date-time) | oui | | | `disabledAt` | string (date-time) \| null | oui | | | `disabledReason` | string \| null | oui | | ### Erreurs possibles [#erreurs-possibles-4] `401` · `403` · `404` · `409` · `422` · `429` · `503` — Format des erreurs : [Erreurs](/fr/api/rest/erreurs). ### Exemple [#exemple-4] ```bash curl -X POST "https://app.fanconvert.ai/public/v1/webhooks/{endpoint_id}/ping" \ -H "Authorization: Bearer $FANCONVERT_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" ``` --- # Authentification et droits > L'en-tête Authorization Bearer fc_sk_, ce qu'une clé voit, et la liste des droits. URL : https://docs.fanconvert.ai/fr/api/rest/authentification Chaque requête porte la clé dans l'en-tête `Authorization: Bearer fc_sk_…`. Une clé : - appartient à **une personne** de l'organisation, qui doit être **administratrice** ; - ne voit que **les créatrices choisies** à sa création (une autre répond `404`, comme si elle n'existait pas) ; - n'a que **les droits choisis** (un droit manquant répond `403` et nomme le droit) ; - expire (7, 30 ou 90 jours) et se **révoque à tout moment** dans Réglages › API & MCP : la révocation vaut à la requête suivante ; - est la même que celle du serveur MCP : un seul système de clés. Les clés créées avant le 7 novembre 2026 commencent par `fc_pat_` : elles restent acceptées. ## Les droits de l'API REST [#les-droits-de-lapi-rest] | Droit | Ce qu'il ouvre | |---|---| | `creators:read` | les créatrices | | `conversations:read` | conversations et messages MYM et OnlyFans | | `telegram:read` | conversations et messages Telegram | | `fans:read` | étiquettes et note de l'équipe d'un fan | | `chatting:read` | qui répond à un fan (IA, personne, pause) | | `sales:read` | les ventes | | `statistics:read` | les statistiques par créatrice | | `scripts:read` · `media:read` | scripts de vente, médiathèque | | `notifications:read` | les urgences | | `fans:write` | écrire la note de l'équipe et poser/retirer une étiquette (avec `fans:read`) | | `chatting:write` | mettre l'IA en pause sur un fan, ou le lui rendre (avec `chatting:read`) | | `webhooks:read` · `webhooks:write` | lister et créer des [webhooks](/fr/api/rest/webhooks) | **Aucun droit ne permet d'envoyer un message à un fan.** ## Données personnelles [#données-personnelles] L'API ne rend que ce que le dashboard montre déjà à une administratrice : noms de fans, messages, notes. Traitez-les comme des données personnelles : stockage minimal, accès restreint, suppression quand vous n'en avez plus besoin. --- # Démarrage rapide > Première requête à l'API publique FanConvert, en curl, JavaScript et Python. URL : https://docs.fanconvert.ai/fr/api/rest/demarrage L'API publique lit vos créatrices, conversations, fans, ventes, statistiques, scripts, médias et urgences, avec le même cloisonnement que le dashboard. Elle ne peut **jamais envoyer un message à un fan**. Adresse de base : `https://app.fanconvert.ai/public/v1` ## 1. Créer une clé [#1-créer-une-clé] Dans FanConvert : **Réglages › API & MCP › Nouvelle clé**, en choisissant **Connecter un outil ou un développeur (API)**. Détail : [Créer une clé](/fr/api/cles). Gardez-la dans une variable d'environnement, jamais dans le code. ## 2. Première requête [#2-première-requête] `GET /me` décrit la clé utilisée : ses créatrices, ses droits, son expiration. ```bash curl https://app.fanconvert.ai/public/v1/me \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ```json { "keyId": "3f1c…", "organizationId": "org_…", "scopes": ["creators:read", "statistics:read"], "creatorIds": ["emma-demo"], "expiresAt": "2026-12-07T05:40:00Z" } ``` ## 3. Lister vos créatrices [#3-lister-vos-créatrices] ```bash curl https://app.fanconvert.ai/public/v1/creators \ -H "Authorization: Bearer $FANCONVERT_API_KEY" ``` ```js const res = await fetch("https://app.fanconvert.ai/public/v1/creators", { headers: { Authorization: `Bearer ${process.env.FANCONVERT_API_KEY}` }, }); if (!res.ok) throw new Error((await res.json()).detail); const { items } = await res.json(); ``` ```python import os, requests r = requests.get( "https://app.fanconvert.ai/public/v1/creators", headers={"Authorization": f"Bearer {os.environ['FANCONVERT_API_KEY']}"}, timeout=30, ) r.raise_for_status() print(r.json()["items"]) ``` ## Ensuite [#ensuite] - [Authentification et droits](/fr/api/rest/authentification) - [Pagination](/fr/api/rest/pagination), [Erreurs](/fr/api/rest/erreurs), [Limites](/fr/api/rest/limites) - [Webhooks](/fr/api/rest/webhooks) : recevoir les ventes sans interroger l'API - [Référence complète](/fr/api/reference) --- # Écritures et idempotence > Idempotency-Key sur chaque POST, révision attendue, pause de l'IA sur un fan. URL : https://docs.fanconvert.ai/fr/api/rest/ecritures ## Idempotency-Key [#idempotency-key] Chaque `POST` exige un en-tête **`Idempotency-Key`** : 8 à 128 caractères `A-Z a-z 0-9 _ . : -`, un UUID par exemple. - Rejouer la même clé avec la même requête rend **la même réponse sans seconde écriture** (en-tête `Idempotent-Replayed: true`), pendant 24 h. - La même clé pour une autre requête répond `422`. - Les `PUT` et `DELETE` sont idempotents par nature. ## La note de l'équipe [#la-note-de-léquipe] Écrire la note exige la révision lue (`expectedRevision`) : une écriture concurrente répond `409`. Relisez la fiche du fan, puis réécrivez. ## Mettre l'IA en pause sur un fan (MYM) [#mettre-lia-en-pause-sur-un-fan-mym] C'est le même geste que « Arrêter le chatting » dans le dashboard : le filtre de fans de la créatrice. Deux cas répondent `409` et se font depuis le dashboard, parce qu'ils dépassent ce fan : - une créatrice qui répond à tous (le geste changerait son mode) ; - le dernier fan d'une liste blanche (le retirer couperait toute la créatrice). ```bash curl -X POST https://app.fanconvert.ai/public/v1/creators/emma-demo/conversations/123/ai/pause \ -H "Authorization: Bearer $FANCONVERT_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" ``` `…/ai/resume` rend le fan à l'IA (« Relancer le chatting »). --- # Erreurs > Erreurs au format RFC 9457 (application/problem+json), codes HTTP et champ code stable. URL : https://docs.fanconvert.ai/fr/api/rest/erreurs Toutes les erreurs suivent la [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) (`application/problem+json`) : ```json { "type": "https://fanconvert.app/problems/not-found", "title": "Ressource introuvable", "status": 404, "detail": "Créatrice introuvable : emma-demo", "instance": "urn:request:6c1e…", "code": "not-found", "params": {}, "errors": [] } ``` - `code` est **stable** : c'est lui que votre code doit tester. - `detail` est une phrase pour un humain : elle peut changer. - `instance` est le numéro de la requête : donnez-le au [support](https://t.me/fanconvert), il retrouve l'appel. - `errors` détaille, champ par champ, une saisie refusée (`422`). | Statut | Quand | Que faire | |---|---|---| | 401 | clé absente, invalide, expirée ou révoquée | vérifiez l'en-tête `Authorization`, créez une nouvelle clé si besoin | | 403 | droit manquant, ou personne non administratrice | `detail` nomme le droit ; créez une clé qui l'a | | 404 | ressource introuvable **ou hors de la clé** | vérifiez l'identifiant et que la créatrice est dans la clé | | 409 | conflit d'écriture (révision périmée) | relisez la ressource, puis réécrivez avec la révision à jour | | 422 | paramètre invalide, ou `Idempotency-Key` réutilisée pour une autre requête | corrigez d'après `errors` | | 429 | limite de requêtes atteinte | attendez `Retry-After` secondes ([Limites](/fr/api/rest/limites)) | | 503 | service momentanément indisponible | réessayez plus tard, avec un délai croissant | --- # Journal des changements > Ce qui a changé dans l'API publique et le serveur MCP. URL : https://docs.fanconvert.ai/fr/api/rest/journal - **2026-11-11 — documentation.** La documentation de l'API rejoint ce site, docs.fanconvert.ai ; le contrat reste servi à `https://app.fanconvert.ai/public/v1/openapi.json`. - **2026-11-07 — webhooks.** `sale.created`, `emergency.created`, `ai.paused`, `ping` ; signature HMAC-SHA256 horodatée, six essais, journal des livraisons. - **2026-11-07 — écritures sûres.** Note de l'équipe et étiquettes d'un fan (`fans:write`), pause et reprise de l'IA sur un fan MYM (`chatting:write`), `Idempotency-Key` sur chaque `POST`. La médiathèque n'annonce plus que `mym`. - **2026-11-07 — v1 Beta.** Lecture : créatrices, conversations et messages (MYM, Telegram, OnlyFans), fiche d'un fan, état de l'IA, ventes (MYM, Telegram, OnlyFans, Fanvue), statistiques, scripts, médias, urgences. Clés `fc_sk_…`. --- # Limites de requêtes > 120 requêtes par minute et par clé, en-têtes RateLimit et Retry-After. URL : https://docs.fanconvert.ai/fr/api/rest/limites **120 requêtes par minute et par clé.** Chaque réponse les annonce, erreurs comprises : ``` RateLimit-Policy: "cle";q=120;w=60 RateLimit: "cle";r=117;t=42 ``` Format du brouillon IETF `draft-ietf-httpapi-ratelimit-headers-11` : `q` le quota, `w` la fenêtre (en secondes), `r` ce qui reste, `t` les secondes avant la remise à zéro. Les anciens `RateLimit-Limit`, `RateLimit-Remaining` et `RateLimit-Reset` sont toujours envoyés. Au-delà : `429` avec `Retry-After` (en secondes). Attendez ce délai avant de réessayer. --- # Montants et dates > Montants en entiers d'unité mineure avec leur devise ; Telegram en Stars (XTR) ; dates UTC. URL : https://docs.fanconvert.ai/fr/api/rest/montants-dates - **Montants** : entiers en unité mineure de la devise, champs `…Minor`, toujours avec leur `currency` (ISO 4217). `1250` en `EUR` = 12,50 €. - **Telegram** compte en Stars (`XTR`), sans unité mineure : `250` = 250 Stars. - **Dates** : UTC, ISO-8601 (`2026-11-07T05:40:00Z`). --- # Pagination > Pagination par curseur — items, nextCursor, cursor et limit. URL : https://docs.fanconvert.ai/fr/api/rest/pagination Les listes qui grandissent sont paginées par **curseur** : ```json { "items": [ … ], "nextCursor": "eyJ…" } ``` - Repassez `nextCursor` en paramètre `cursor` pour la page suivante ; `null` = dernière page. - `limit` va de 1 à 100 (50 par défaut). - Un curseur est opaque : ne le fabriquez pas, ne le modifiez pas. ```js let cursor = null; do { const url = new URL("https://app.fanconvert.ai/public/v1/creators/emma-demo/conversations"); if (cursor) url.searchParams.set("cursor", cursor); const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.FANCONVERT_API_KEY}` } }); const page = await res.json(); for (const conversation of page.items) console.log(conversation.id); cursor = page.nextCursor; } while (cursor); ``` --- # Webhooks > Recevoir ventes, urgences et pauses de l'IA en direct — événements, signature HMAC, livraisons. URL : https://docs.fanconvert.ai/fr/api/rest/webhooks Recevez les événements sans interroger l'API : `POST /public/v1/webhooks` avec une adresse `https://` publique (port 443 ou 8443) et les événements voulus. La réponse donne **une seule fois** le secret de signature `whsec_…`. Droits : `webhooks:write` (et `webhooks:read` pour lister et lire le journal), plus le droit de lecture de chaque événement. | Événement | Quand | Droit de lecture exigé | |---|---|---| | `sale.created` | une vente (MYM, Telegram, OnlyFans, Fanvue) | `sales:read` (+ `telegram:read` pour Telegram) | | `emergency.created` | une nouvelle urgence | `notifications:read` | | `ai.paused` | l'IA mise en pause sur un fan, ou coupée pour une créatrice | `chatting:read` | | `ping` | `POST /public/v1/webhooks/{id}/ping`, pour tester | — | Un événement ne porte **que des identifiants et des montants**, jamais le nom d'un fan ni un message : lisez le détail avec votre clé. ```json { "id": "evt_9b1c…", "type": "sale.created", "apiVersion": "v1-beta", "createdAt": "2026-11-07T12:30:00Z", "data": {"platform": "mym", "creatorId": "emma-demo", "saleId": "s_…", "conversationId": "123", "amountMinor": 1500, "currency": "EUR", "at": "…"} } ``` ## Vérifier la signature [#vérifier-la-signature] En-tête `FanConvert-Signature: t=,v1=` : calculez HMAC-SHA256 de `"."` avec votre secret, comparez en temps constant, refusez un `t` de plus de 5 minutes. ```python import hashlib, hmac, time def verifier(secret: str, entete: str, corps: bytes) -> bool: champs = dict(p.split("=", 1) for p in entete.split(",")) if abs(time.time() - int(champs["t"])) > 300: return False attendu = hmac.new(secret.encode(), f"{champs['t']}.".encode() + corps, hashlib.sha256).hexdigest() return hmac.compare_digest(attendu, champs["v1"]) ``` ## Livraison [#livraison] - Répondez `2xx` en moins de 10 s. Sinon, nouvel essai après 1 min, 5 min, 30 min, 2 h et 6 h (six essais), puis `failed`. - Les redirections ne sont jamais suivies. - L'en-tête `FanConvert-Event-Id` permet d'ignorer un doublon. - Le journal : `GET /public/v1/webhooks/{id}/deliveries`. - Un webhook vit avec sa clé : clé révoquée ou expirée, il se désactive. `DELETE /public/v1/webhooks/{id}` le désactive (le journal reste). - Les événements sont détectés toutes les 30 s environ ; à la création, rien du passé n'est rejoué. Référence : [Webhooks](/fr/api/reference/webhooks). --- # Documentation FanConvert > Tout pour utiliser FanConvert au quotidien, et pour le brancher sur vos outils. URL : https://docs.fanconvert.ai/fr ## Chercher [#chercher] Tapez ⌘ K (ou Ctrl K) pour chercher dans toute la documentation. ## Pour une IA [#pour-une-ia] Chaque page existe en Markdown (ajoutez `.md` à son adresse) ; l'index complet est à [`/llms.txt`](https://docs.fanconvert.ai/llms.txt). Sur chaque page, **Copier en Markdown**, **Ouvrir dans ChatGPT** et **Ouvrir dans Claude** donnent la page à votre assistant.