Référence de l'API
Retrouvez chaque ressource publique, méthode, scope requis, règle de pagination et contrat de mutation.
Retrouvez chaque ressource publique, méthode, scope requis, règle de pagination et contrat de mutation.
Le contrat canonique lisible par machine est le JSON OpenAPI. Cette page est l'index des opérations, rédigé pour les humains, et explique les règles communes à tous les endpoints.
URL de base et version#
https://makeagent.fast/api/v1La version majeure fait partie du chemin. Des champs supplémentaires peuvent apparaître sans changement de version majeure : ignorez donc les champs de réponse inconnus. Toutes les requêtes de gestion utilisent HTTPS ainsi qu'une clé d'API bearer ou un jeton d'accès OAuth.
En-têtes courants#
Authorization: Bearer maf_live_...
Accept: application/json
Content-Type: application/json
Idempotency-Key: your-stable-operation-keyContent-Type est obligatoire pour les corps JSON des requêtes POST et PATCH, y compris {}. Idempotency-Key est facultatif, mais vivement recommandé pour chaque POST, PATCH et DELETE.
Compte et sites#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET | /me | account:read | Lire le résumé du compte, du forfait, des droits et du portefeuille |
GET | /sites | sites:read | Lister les sites dont vous êtes propriétaire |
POST | /sites | sites:write | Créer un site et son agent par défaut |
GET | /sites/{site_id} | sites:read | Récupérer un site dont vous êtes propriétaire |
PATCH | /sites/{site_id} | sites:write | Mettre à jour les champs du site modifiables en toute sécurité |
DELETE | /sites/{site_id} | sites:write | Supprimer le site et les ressources qui en dépendent |
POST | /sites/{site_id}/publish | sites:write | Publier ou dépublier avec { "published": boolean } |
GET | /sites/{site_id}/agent | agents:read | Lire les paramètres de l'agent |
PATCH | /sites/{site_id}/agent | agents:write | Mettre à jour le mode de persona, l'objectif, le nom affiché, les instructions, la voix, les langues, le modèle, l'apparence, l'habillage de l'intégration, le badge, l'état de l'intégration ou les origines |
GET | /sites/{site_id}/billing | account:read | Lire le forfait, la période, le portefeuille, les modules complémentaires et les liens de facturation du tableau de bord |
PATCH | /sites/{site_id}/workspace | team:write | Renommer l'entreprise propriétaire de l'agent |
PATCH | /sites/{site_id}/retention | team:write | Définir la durée de conservation des conversations |
La création d'un site exige title et content.headline. Les champs facultatifs comprennent slug, type, template, du contenu supplémentaire, persona_mode, ainsi qu'une à quatre langues parmi en, ko, uz et ru.
PATCH /agent soumet model, appearance, embed_chrome et badge_hidden aux mêmes contrôles de forfait que le tableau de bord ; badge_hidden: true nécessite un forfait éligible ou le module complémentaire de badge.
Installation et widget de site web#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET | /sites/{site_id}/install | agents:read | Lire la cible d'installation, l'état de l'intégration, les origines autorisées et les preuves d'installation |
PATCH | /sites/{site_id}/install | agents:write | Définir la page sur laquelle le widget doit être installé |
POST | /sites/{site_id}/install/check | agents:write | Vérifier si l'extrait d'intégration est actif sur la page cible |
Connaissances et FAQ#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET | /sites/{site_id}/knowledge | knowledge:read | Lister les sources de connaissances |
POST | /sites/{site_id}/knowledge | knowledge:write | Ingérer du texte collé, explorer un site web ou importer une source YouTube, de podcast ou de flux |
PATCH | /sites/{site_id}/knowledge/{source_id} | knowledge:write | Définir refresh_hours ou le approval_status du buyer pack |
POST | /sites/{site_id}/knowledge/{source_id}/recrawl | knowledge:write | Mettre en file d'attente une nouvelle lecture d'une source récupérée ; renvoie 202 |
DELETE | /sites/{site_id}/knowledge/{source_id} | knowledge:write | Retirer une source des futures recherches |
GET | /sites/{site_id}/faqs | knowledge:read | Lister les FAQ structurées |
POST | /sites/{site_id}/faqs | knowledge:write | Créer { "question", "answer", "approved" } |
POST | /sites/{site_id}/faqs/generate | knowledge:write | Rédiger des brouillons de FAQ à partir des connaissances de l'agent |
POST | /sites/{site_id}/faqs/approve-all | knowledge:write | Approuver et publier toutes les FAQ en brouillon |
PATCH | /sites/{site_id}/faqs/{faq_id} | knowledge:write | Mettre à jour la question, la réponse ou l'état d'approbation |
DELETE | /sites/{site_id}/faqs/{faq_id} | knowledge:write | Supprimer une FAQ |
GET / PATCH | /sites/{site_id}/fact-sheet | knowledge:read / knowledge:write | Lire la fiche d'informations de l'entreprise extraite, ou corriger les informations que l'extraction a mal interprétées |
POST | /sites/{site_id}/fact-sheet/reextract | knowledge:write | Relire le site web et reconstruire la fiche d'informations |
POST | /sites/{site_id}/qa | knowledge:write | Publier des paires de questions-réponses sélectionnées |
POST | /sites/{site_id}/answers/revise | knowledge:write | Apprendre à l'agent la réponse qu'il aurait dû donner |
GET | /sites/{site_id}/knowledge-connections | knowledge:read | Lister les connexions de connaissances Notion, Drive et MCP |
GET | /sites/{site_id}/knowledge-connections/connect-links | knowledge:read | Obtenir les URL du tableau de bord qui lancent une connexion Notion ou Drive |
PATCH / DELETE | /sites/{site_id}/knowledge-connections/{connection_id} | knowledge:write | Définir la fréquence de synchronisation, les éléments sélectionnés ou l'outil d'importation ; ou déconnecter la connexion et purger ses données |
GET | /sites/{site_id}/knowledge-connections/{connection_id}/items | knowledge:read | Lister les pages, bases de données ou fichiers qu'une connexion peut importer |
POST | /sites/{site_id}/knowledge-connections/{connection_id}/sync | knowledge:write | Mettre en file d'attente la synchronisation d'une connexion de connaissances |
POST /knowledge accepte trois corps : { "name", "text" } avec 5 à 200 000 caractères ; { "url", "max_pages", "refresh_hours" } pour explorer un site web (max_pages de 1 à 40, refresh_hours de 1 à 8 760 ou null) ; et { "kind": "youtube" | "podcast" | "feed", "url", "refresh_hours" }. Les sources YouTube, de podcast et de flux nécessitent Operate ou Scale ; avec Launch, elles renvoient 409 conflict. L'envoi de fichiers reste un workflow du tableau de bord.
Conversations, leads, analytique et utilisation#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET | /sites/{site_id}/conversations | conversations:read | Lister les fils de conversation |
GET | /sites/{site_id}/conversations/{conversation_id} | conversations:read | Récupérer un fil et ses messages paginés |
POST | /sites/{site_id}/conversations/{conversation_id}/reply | conversations:write | Répondre à un visiteur au nom de l'entreprise |
POST | /sites/{site_id}/conversations/{conversation_id}/pause | conversations:write | Mettre l'agent en pause sur cette conversation et la prendre en charge |
POST | /sites/{site_id}/conversations/{conversation_id}/resume | conversations:write | Rendre la conversation à l'agent |
GET | /sites/{site_id}/leads | leads:read | Lister les leads capturés |
POST | /sites/{site_id}/leads | leads:write | Créer un lead canonique avec un consentement explicite et des préférences de contact |
GET | /sites/{site_id}/leads/{lead_id} | leads:read | Récupérer un lead |
PATCH | /sites/{site_id}/leads/{lead_id} | leads:write | Mettre à jour un lead, le qualifier ou modifier sa politique de contact |
POST | /sites/{site_id}/leads/{lead_id}/accept | leads:write | Accepter un lead dans le pipeline d'opportunités |
POST | /sites/{site_id}/leads/{lead_id}/followup | leads:write | Envoyer le message de relance à un lead |
POST | /sites/{site_id}/leads/{lead_id}/followup/draft | leads:write | Rédiger à nouveau le message de relance sans l'envoyer |
GET | /sites/{site_id}/analytics | analytics:read | Lister les événements d'analytique |
GET | /sites/{site_id}/report | analytics:read | Lire le rapport d'analytique agrégé |
POST | /sites/{site_id}/report/unanswered-faq | knowledge:write | Répondre à une question sans réponse en la transformant en nouvelle FAQ |
GET | /sites/{site_id}/usage | usage:read | Lister les événements d'utilisation mesurée |
Ces collections d'événements et d'activité acceptent limit et cursor. Les enregistrements renvoyés peuvent contenir des données personnelles ; stockez-les et exportez-les conformément à vos obligations en matière de confidentialité.
Les réponses du owner sont prises en charge : reply, pause et resume reprennent la main sur un fil web ou sur une discussion Telegram, WhatsApp, Messenger ou Instagram, exactement comme le fait le tableau de bord. L'envoi de messages au nom du visiteur n'est pas une opération de l'API publique.
La mutation des leads est prise en charge ; ne définissez pas consent_status: granted sauf si votre système
dispose d'un enregistrement de consentement défendable. Les consentements inconnus sont exclus des diffusions.
Pipeline d'opportunités et résultats CRM#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET / POST | /sites/{site_id}/pipeline/stages | pipeline:read / pipeline:write | Lister ou configurer les étapes |
GET / POST | /sites/{site_id}/pipeline/accounts | pipeline:read / pipeline:write | Lister ou créer des comptes d'entreprise |
GET | /sites/{site_id}/pipeline/accounts/{account_id} | pipeline:read | Récupérer un compte d'entreprise |
GET / POST | /sites/{site_id}/pipeline/opportunities | pipeline:read / pipeline:write | Lister ou créer des opportunités |
GET / PATCH | /sites/{site_id}/pipeline/opportunities/{opportunity_id} | pipeline:read / pipeline:write | Lire l'activité ou mettre à jour l'attribution, la valeur, l'étape, la prochaine action et la réponse humaine |
POST | /sites/{site_id}/pipeline/outcomes | pipeline:write | Importer de manière idempotente un résultat gagné ou perdu provenant d'un CRM |
GET | /sites/{site_id}/pipeline/sync-records | pipeline:read | Lister l'état de synchronisation, les tentatives et les erreurs |
POST | /sites/{site_id}/pipeline/sync-records/{sync_record_id}/retry | pipeline:write | Relancer un résultat en échec à partir de sa charge utile enregistrée |
GET / PATCH | /sites/{site_id}/pipeline-workflow | pipeline:read / pipeline:write | Lire ou mettre à jour la politique de réponse commerciale |
GET / POST | /sites/{site_id}/pilots | pipeline:read / pipeline:write | Lister ou démarrer des pilotes guidés |
GET | /sites/{site_id}/pilots/{pilot_id} | pipeline:read | Lire un pilote, son étape, ses compteurs et sa liste de tâches |
POST | /sites/{site_id}/pilots/{pilot_id}/setup, /start, /stop, /review, /decision, /complete, /delete | pipeline:write | Faire avancer un pilote à travers la configuration, la mesure, la revue, la décision et la clôture, ou le supprimer avec ses preuves (sept opérations) |
POST | /sites/{site_id}/pilots/{pilot_id}/outcomes, /bookings | pipeline:write | Enregistrer le résultat d'un lead ou le résultat d'une réservation (deux opérations) |
POST | /sites/{site_id}/pilots/{pilot_id}/report/approve, /report/revoke | pipeline:write | Approuver ou révoquer le rapport de pilote partageable (deux opérations) |
GET / POST | /sites/{site_id}/buyer-packs | pipeline:read / pipeline:write | Lister les buyer packs, ou en créer un à partir de sources approuvées |
PATCH | /sites/{site_id}/buyer-packs/{pack_id} | pipeline:write | Remplacer le titre, le public cible, le résumé, les sources et les sections d'un pack |
POST | /sites/{site_id}/buyer-packs/{pack_id}/approve, /revoke | pipeline:write | Activer ou désactiver le lien de partage du pack (deux opérations) |
Le provider du CRM, l'ID externe et la clé d'idempotence fournis sont conservés dans la
piste d'audit. Une nouvelle tentative ne prend en charge qu'un enregistrement en échec et ne transforme jamais une
écriture externe en cours en faux succès.
Connecteurs#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET | /sites/{site_id}/connectors | connectors:read | Lister l'état des connecteurs sans les secrets |
POST | /sites/{site_id}/connectors | connectors:write | Connecter un canal : valider les identifiants en direct, provisionner son webhook et renvoyer la liste de contrôle de configuration |
PATCH | /sites/{site_id}/connectors/{connector_id} | connectors:write | Définir status ou reply_with_voice |
DELETE | /sites/{site_id}/connectors/{connector_id} | connectors:write | Déprovisionner et supprimer un connecteur |
POST | /sites/{site_id}/concierge | connectors:write | Demander à la plateforme de connecter un canal de messagerie à votre place |
GET | /sites/{site_id}/domains | domains:read | Supprimé — renvoie 409. Les domaines personnalisés ne sont pas proposés |
POST | /sites/{site_id}/domains | domains:write | Supprimé — renvoie 409 |
PATCH | /sites/{site_id}/domains/{domain_id} | domains:write | Supprimé — renvoie 409 |
POST | /sites/{site_id}/domains/{domain_id}/verify | domains:write | Supprimé — renvoie 409 |
DELETE | /sites/{site_id}/domains/{domain_id} | domains:write | Supprimé — renvoie 409 |
La création d'un connecteur utilise un corps discriminé par canal. Les champs d'identifiants diffèrent pour telegram, whatsapp, messenger, instagram, discord et kakao ; consultez le guide du connecteur correspondant avant d'envoyer des secrets.
Diffusions, notifications et monétisation#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET | /sites/{site_id}/broadcasts | broadcasts:read | Lister les diffusions |
POST | /sites/{site_id}/broadcasts | broadcasts:write | Créer un brouillon de diffusion Kakao |
POST | /sites/{site_id}/broadcasts/{broadcast_id}/send | broadcasts:write | Mettre en file d'attente un brouillon existant ; renvoie 202 |
GET | /sites/{site_id}/notifications | notifications:read | Lister les notifications du owner |
POST | /sites/{site_id}/notifications/read-all | notifications:write | Marquer comme lues toutes les notifications du owner pour cet agent |
PATCH | /sites/{site_id}/notifications/{notification_id} | notifications:write | Marquer comme lue ou non lue avec { "read": boolean } |
GET | /sites/{site_id}/alerts | notifications:read | Lire l'état du canal d'alertes du owner et son lien vers le tableau de bord |
GET | /sites/{site_id}/monetization/products | monetization:read | Lister les produits du site |
POST | /sites/{site_id}/monetization/products | monetization:write | Créer un produit access, consult, tip ou digital |
PATCH | /sites/{site_id}/monetization/products/{product_id} | monetization:write | Mettre à jour les champs du produit et son état actif |
DELETE | /sites/{site_id}/monetization/products/{product_id} | monetization:write | Supprimer un produit |
La création d'une diffusion n'accepte actuellement que le canal kakao. La mise en file d'attente échoue avec 409 conflict lorsqu'il n'y a aucun destinataire joignable ou que la diffusion n'est plus un brouillon.
Actions, tickets et équipe#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET / PATCH | /sites/{site_id}/actions | agents:read / agents:write | Lire ou configurer les procédures, le webhook public, le lien de réservation et les tickets de support |
GET | /sites/{site_id}/tickets | tickets:read | Lister les tickets de support |
GET | /sites/{site_id}/tickets/{ticket_id} | tickets:read | Lire un ticket et ses messages |
PATCH | /sites/{site_id}/tickets/{ticket_id} | tickets:write | Définir le statut, la priorité et, facultativement, la personne assignée |
POST | /sites/{site_id}/tickets/{ticket_id}/messages | tickets:write | Ajouter une note interne, ou définir internal: false pour répondre au customer par e-mail |
GET | /sites/{site_id}/team | team:read | Lire les membres, les invitations et les événements d'audit autorisés |
POST | /sites/{site_id}/team/invitations | team:write | Créer un lien d'invitation sans envoyer d'e-mail |
DELETE | /sites/{site_id}/team/invitations/{invitation_id} | team:write | Révoquer une invitation en attente |
PATCH / DELETE | /sites/{site_id}/team/members/{membership_id} | team:write | Modifier le rôle d'un membre qui n'est pas owner, ou retirer ce membre |
Webhooks pour développeurs et outils de configuration#
| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET | /webhook-endpoints | webhooks:read | Lister l'état des endpoints sans les secrets de signature |
POST | /webhook-endpoints | webhooks:write | Enregistrer une URL HTTPS publique et révéler une seule fois son secret de signature |
DELETE | /webhook-endpoints/{endpoint_id} | webhooks:write | Supprimer un endpoint et arrêter les futures livraisons |
GET | /setup/tools | Tout identifiant valide | Découvrir les outils de configuration pour les intégrations API, MCP et GitHub |
POST | /setup/tools/{tool_name} | Propre à l'outil | Exécuter un outil de configuration ; les requêtes de plateforme nécessitent les scopes de leurs endpoints, l'inspection GitHub utilise integrations:read et la préparation de PR utilise integrations:write |
Les URL de webhook doivent utiliser HTTPS, ne peuvent pas inclure d'identifiants ni de port personnalisé, et doivent se résoudre uniquement vers des adresses IP publiques.
Pagination#
Les collections paginées acceptent limit de 1 à 100 ; la valeur par défaut est 50. Utilisez le next_cursor opaque renvoyé uniquement avec la même collection et les mêmes filtres.
{
"data": [],
"has_more": false,
"next_cursor": null
}Certaines petites collections de configuration renvoient la même enveloppe avec has_more: false et n'ont pas besoin de curseur.
Idempotence#
Une clé d'idempotence doit comporter de 8 à 200 caractères parmi les lettres, les chiffres, ., _, : et -. Les résultats sont conservés pendant 24 heures et limités au propriétaire de l'identifiant.
- Même clé et mêmes méthode, chemin, requête et corps : renvoie la réponse enregistrée avec
x-idempotent-replayed: true. - Même clé avec des données différentes : renvoie
409 conflict. - Même clé pendant que la première requête est en cours de traitement : renvoie
409 conflictetRetry-After: 2.
Enregistrez la clé de façon persistante avant d'envoyer la mutation et réutilisez-la uniquement pour les nouvelles tentatives de cette même opération logique.
Réponses et erreurs#
Les réponses réussies encapsulent leur ressource dans data. Les opérations de création renvoient normalement 201 ; les envois de diffusion mis en file d'attente renvoient 202 ; les autres opérations réussies renvoient 200. Chaque réponse inclut x-request-id et utilise Cache-Control: no-store pour les données de l'API.
Consultez Scopes et erreurs pour le tableau complet des codes d'erreur et Recettes d'API pour des workflows à copier.
Clients MCP#
Connectez un client MCP Streamable HTTP à https://makeagent.fast/api/mcp. Les clients qui prennent en charge la découverte OAuth ouvrent le navigateur pour la connexion et le consentement. Vérifiez l'identité du client, l'entreprise et les scopes demandés avant d'approuver. La première approbation demande les scopes utilisés par les outils (sites:read, sites:write, agents:write, analytics:read, conversations:read, conversations:write, leads:read, leads:write, knowledge:write) ; un identifiant auquel il manque l'un d'eux doit être autorisé à nouveau. Un forfait actif est requis.
Pour les clients qui utilisent des identifiants configurés manuellement, créez une clé d'API limitée à certains scopes dans les paramètres développeur et fournissez-la dans un en-tête Authorization: Bearer .... Ne placez jamais d'identifiants dans le contrôle de code source ni dans le code du navigateur. Révoquez les clés d'API ou les autorisations OAuth depuis les paramètres développeur.
Outils de lecture : list_agents, get_agent, get_report, list_unanswered_questions, list_conversations, get_conversation, list_leads. Outils d'écriture : create_agent_from_website, create_agent_from_notes, test_agent, add_knowledge, save_answer, reply_to_customer, update_lead, set_website_widget. Chaque outil d'agent prend un agent_id issu de list_agents. test_agent consomme des credits comme une réponse normale ; reply_to_customer envoie un message au customer et met l'agent en pause sur cette conversation ; set_website_widget active ou désactive le widget de chat du site web ; les canaux de messagerie se gèrent depuis le tableau de bord. Les clients pour lesquels MCP Apps est activé (par défaut, la connexion Claude authentifiée) disposent aussi de list_pending_approvals, list_action_runs et decide_approval, qui approuve ou refuse une modification confirmée par le customer ; les autres clients ne voient que les 15 outils ci-dessus. Pour les outils de configuration et d'intégration GitHub, utilisez l'assistant de configuration intégré à l'application ou /api/v1/setup/tools.
Les révisions de protocole prises en charge sont 2026-07-28, 2025-11-25 et 2025-06-18. Le transport renvoie du JSON ; il ne propose ni SSE hérité ni sessions serveur. Les jetons MCP OAuth n'autorisent que /api/mcp, et non les requêtes REST directes. Les jetons d'accès OAuth durent une heure ; les identifiants de rafraîchissement sont renouvelés et expirent après 90 jours. Les clés d'API créées manuellement utilisent l'expiration configurée.