Aller au contenu de la page
Documentation
Documentation de Make Agent Fast

Scopes et erreurs

Accordez le moindre privilège et gérez chaque code d'erreur stable de l'API publique.

En un coup d’œil

Accordez le moindre privilège et gérez chaque code d'erreur stable de l'API publique.

Parcours des requêtes APIClé à portée limitée → ressource versionnée → réponse signée
Application / SDKClé Bearermaf_live_…/api/v1/…RessourceJSON
33 scopesCodes stablesID de requête

Chaque opération de l'API publique exige un scope explicite. Un identifiant valide qui ne dispose pas de ce scope reçoit 403 insufficient_scope ; il n'est jamais élevé silencieusement vers un accès plus large.

Référence des scopes#

ScopeAutorise
account:readLire le compte authentifié, le forfait, les droits et le résumé du portefeuille
tickets:readLire les tickets de support et leurs messages
tickets:writeMettre à jour les tickets, assigner des collègues et ajouter des notes internes ou des réponses aux clients
team:readLire les membres de l'équipe, les invitations en attente et les événements d'audit autorisés
team:writeCréer ou révoquer des invitations et gérer les rôles des membres de l'équipe autres que le propriétaire
integrations:readConsulter les installations et les dépôts de GitHub App autorisés
integrations:writePréparer des modifications d'intégration et créer des pull requests en brouillon
sites:readLister et récupérer les sites
sites:writeCréer, mettre à jour, publier, dépublier et supprimer des sites
agents:readLire les paramètres de l'agent
agents:writeMettre à jour le comportement, la langue, la voix et les paramètres d'intégration de l'agent
knowledge:readLister les sources de connaissances et les FAQ
knowledge:writeCréer, mettre à jour et supprimer des sources de connaissances et des FAQ
conversations:readLister les conversations et récupérer leurs messages
conversations:writePrendre le relais d'une conversation : répondre à un visiteur au nom de l'entreprise, mettre l'agent en pause sur cette conversation et la lui rendre
leads:readLister les leads capturés
leads:writeCréer, mettre à jour, qualifier et intégrer des leads dans le pipeline d'opportunités
pipeline:readLire les étapes, les comptes, les opportunités, les activités, l'attribution et l'état de synchronisation du CRM
pipeline:writeConfigurer les étapes ; créer ou mettre à jour des opportunités et des comptes ; importer ou relancer des résultats CRM
analytics:readLire les événements d'analytique des sites
connectors:readLister l'état des connecteurs sans renvoyer de secrets
connectors:writeCréer, mettre à jour, activer, désactiver et supprimer des connecteurs
domains:readSupprimé. Conservé uniquement pour la compatibilité ; chaque route /domains renvoie 409, car les domaines personnalisés ne sont pas proposés
domains:writeSupprimé. Conservé uniquement pour la compatibilité ; chaque route /domains renvoie 409
broadcasts:readLister les diffusions et l'état de leur envoi
broadcasts:writeCréer des brouillons et mettre en file d'attente l'envoi d'une diffusion
notifications:readLister les notifications du propriétaire
notifications:writeMarquer les notifications comme lues ou non lues
monetization:readLister les produits de monétisation
monetization:writeCréer, mettre à jour, activer, désactiver et supprimer des produits
usage:readLire les événements d'utilisation mesurée
webhooks:readLister les endpoints de webhook et l'état des livraisons
webhooks:writeCréer et supprimer des endpoints de webhook

Utilisez des scopes en lecture pour les tâches de reporting. N'ajoutez un scope en écriture que si l'intégration effectue réellement cette modification. Par exemple, un export de leads nécessite normalement sites:read et leads:read, et non sites:write ou agents:write.

Échecs liés aux scopes#

{
  "error": {
    "code": "insufficient_scope",
    "message": "The API key does not grant the required scope.",
    "details": { "required": ["sites:write"] },
    "request_id": "6c0b2f2e-..."
  }
}

Ajoutez le scope manquant à la clé dans Paramètres → Développeur → Modifier, ou créez une clé de remplacement et mettez à jour le secret côté serveur. La modification change le nom et les scopes de la clé sur place ; son expiration et son jeton restent identiques. Les clés émises via OAuth ne peuvent pas être modifiées ; reconnectez l'application pour changer les autorisations qui lui ont été accordées.

Enveloppe d'erreur#

Toutes les erreurs de l'API utilisent la même structure de premier niveau :

type ApiError = {
  error: {
    code: string;
    message: string;
    details?: unknown;
    request_id: string;
  };
};

Basez votre logique sur error.code, et non sur le message en anglais. Les messages peuvent être améliorés sans changement de version. Consignez error.request_id et l'en-tête de réponse x-request-id avec le nom de l'opération, le statut et le numéro de la tentative, mais ne consignez jamais l'en-tête d'autorisation ni les secrets de la requête.

Référence des statuts et des codes#

HTTPCode stableSignificationRéponse habituelle
400invalid_requestLa validation a échoué ou un champ n'est pas pris en chargeCorrigez les champs indiqués dans details ; ne réessayez pas avec les mêmes données
400invalid_jsonLe corps n'est pas un objet JSON ou contient du JSON invalideSérialisez un seul objet JSON valide
401authentication_requiredL'en-tête Bearer est absentJoignez un identifiant côté serveur
401invalid_api_keyLa clé est invalide, expirée ou révoquée, ou son propriétaire n'existe plusRemplacez la clé ou effectuez-en la rotation
403subscription_requiredLe propriétaire n'a pas de forfait payant actifRétablissez l'abonnement avant de réessayer
403insufficient_scopeL'identifiant ne dispose pas du scope requis pour l'opérationCréez un identifiant de remplacement au moindre privilège
403account_pausedL'accès à l'API est suspendu pour ce compteReprenez l'accès à l'API ou contactez le propriétaire du compte
404not_foundL'endpoint ou la ressource du compte est introuvableVérifiez le chemin et l'ID appartenant au tenant
409conflictL'état actuel de la ressource empêche l'actionLisez l'état actuel avant de réessayer
413payload_too_largeLe corps JSON dépasse la limite de 256 Ko par requêteEnvoyez un corps plus petit ; répartissez les contenus volumineux sur plusieurs requêtes
415invalid_requestLe corps de la requête de modification n'est pas de type application/jsonEnvoyez Content-Type: application/json
429rate_limit_exceededLe quota d'une minute du forfait pour cette clé est épuiséAttendez le délai indiqué par Retry-After et appliquez un jitter
500internal_errorLa requête n'a pas pu être traitéeRéessayez une opération sûre ou idempotente et signalez l'ID de requête
503outcome_unknownUne modification a peut-être abouti, mais son résultat n'a pas pu être enregistré ; details.retryable vaut falseNe réessayez pas. Lisez la ressource pour vérifier si la modification a eu lieu ; la même clé d'idempotence continue de renvoyer ce résultat

Les ressources extérieures au compte du propriétaire de l'identifiant peuvent renvoyer 404 plutôt que de révéler si l'ID d'un autre tenant existe.

Détails de validation#

La validation des champs renvoie des chemins que vous pouvez afficher à côté de vos propres champs de formulaire :

{
  "error": {
    "code": "invalid_request",
    "message": "Request validation failed.",
    "details": [
      { "path": "content.headline", "message": "String must contain at least 1 character(s)" }
    ],
    "request_id": "6c0b2f2e-..."
  }
}

Les corps des requêtes de modification doivent être des objets JSON. Les tableaux, les corps vides, les données de formulaire et le JSON envoyé avec un type de contenu texte sont rejetés.

Décisions de nouvelle tentative#

  • Réessayez une erreur 429 après le nombre de secondes indiqué dans Retry-After.
  • Ne réessayez une erreur 500 que pour des lectures sûres ou des écritures protégées par la même Idempotency-Key.
  • Réessayez l'erreur 409 d'idempotence « en cours » après le délai de l'en-tête Retry-After: 2.
  • Ne réessayez jamais aveuglément une erreur 503 outcome_unknown. Vérifiez d'abord la ressource ; n'utilisez une nouvelle clé d'idempotence qu'après avoir confirmé que la modification n'a pas eu lieu.
  • Ne réessayez pas les erreurs 400, 401, 403, 404, 413 ni un conflit d'état tant que la cause n'a pas changé.

Consultez Limites de débit pour le comportement de backoff et la Référence de l'API pour le scope requis par chaque opération.