Gateway
Les outils appellent l’API
Le Gateway d’OpenClaw expose un point de terminaison HTTP permettant d’appeler directement un outil unique. Il est toujours activé et utilise l’authentification du Gateway ainsi que la politique des outils. Comme pour la surface /v1/* compatible avec OpenAI, l’authentification par jeton porteur reposant sur un secret partagé est considérée comme un accès opérateur de confiance à l’ensemble du Gateway.
POST /tools/invoke- Même port que le Gateway (multiplexage WS + HTTP) :
http://<gateway-host>:<port>/tools/invoke - Taille maximale par défaut du corps de la requête : 2 Mo
Authentification
Utilise la configuration d’authentification du Gateway.
Méthodes courantes d’authentification HTTP :
- authentification par secret partagé (
gateway.auth.mode="token"ou"password") :Authorization: Bearer <token-or-password> - authentification HTTP de confiance porteuse d’identité (
gateway.auth.mode="trusted-proxy") : acheminez la requête via le proxy configuré prenant en charge les identités et laissez-le injecter les en-têtes d’identité requis - authentification ouverte sur un point d’entrée privé (
gateway.auth.mode="none") : aucun en-tête d’authentification requis
Remarques :
mode="token"utilisegateway.auth.token(ouOPENCLAW_GATEWAY_TOKEN).mode="password"utilisegateway.auth.password(ouOPENCLAW_GATEWAY_PASSWORD).mode="trusted-proxy"exige que la requête HTTP provienne d’une source de proxy de confiance configurée ; les proxys local loopback sur le même hôte nécessitent la définition explicite degateway.auth.trustedProxy.allowLoopback = true.- Les appelants internes sur le même hôte qui contournent le proxy peuvent utiliser
gateway.auth.password/OPENCLAW_GATEWAY_PASSWORDcomme solution de repli locale directe. Toute présence des en-têtesForwarded,X-Forwarded-*ouX-Real-IPmaintient plutôt la requête sur le chemin du proxy de confiance. - Si
gateway.auth.rateLimitest configuré et qu’un trop grand nombre d’échecs d’authentification survient, le point de terminaison renvoie429avecRetry-After.
Périmètre de sécurité (important)
Considérez ce point de terminaison comme une surface offrant un accès opérateur complet à l’instance du Gateway.
- Ici, l’authentification HTTP par jeton porteur ne constitue pas un modèle de portée restreinte par utilisateur.
- Un jeton ou mot de passe Gateway valide pour ce point de terminaison doit être considéré comme un identifiant de propriétaire ou d’opérateur.
- Pour les modes d’authentification par secret partagé (
tokenetpassword), le point de terminaison rétablit les portées complètes par défaut de l’opérateur, même si l’appelant envoie un en-têtex-openclaw-scopesplus restrictif. - L’authentification par secret partagé considère également les appels directs d’outils sur ce point de terminaison comme des tours provenant du propriétaire.
- Les modes HTTP de confiance porteurs d’identité (authentification par proxy de confiance, ou
gateway.auth.mode="none"sur un point d’entrée privé) respectentx-openclaw-scopeslorsqu’il est présent et utilisent sinon l’ensemble normal des portées par défaut de l’opérateur. - Limitez ce point de terminaison au local loopback, au réseau Tailscale ou à un point d’entrée privé ; ne l’exposez pas directement à l’Internet public.
Matrice d’authentification :
| Mode d’authentification | Comportement |
|---|---|
token ou password + Authorization: Bearer ... |
Prouve la possession du secret opérateur partagé du Gateway. Ignore un en-tête x-openclaw-scopes plus restrictif. Rétablit l’ensemble complet des portées opérateur par défaut : operator.admin, operator.approvals, operator.pairing, operator.read, operator.talk.secrets, operator.write. Considère les appels directs d’outils comme des tours provenant du propriétaire. |
HTTP de confiance porteur d’identité (authentification par proxy de confiance, ou mode="none" sur un point d’entrée privé) |
Authentifie une identité externe de confiance ou une limite de déploiement. Respecte x-openclaw-scopes lorsqu’il est présent. Utilise l’ensemble normal des portées par défaut de l’opérateur lorsque l’en-tête est absent. Ne perd la sémantique de propriétaire que lorsque l’appelant restreint explicitement les portées et omet operator.admin. |
Corps de la requête
{ "tool": "sessions_list", "action": "json", "args": {}, "sessionKey": "main", "dryRun": false}Champs :
tool/name(chaîne, obligatoire) : nom de l’outil à appeler.nameest prioritaire si les deux sont envoyés.action(chaîne, facultatif) : fusionné dansargs.actionsi le schéma de l’outil prend en charge une propriétéactionet siargsne l’a pas déjà définie.args(objet, facultatif) : arguments propres à l’outil.sessionKey(chaîne, facultatif) : clé de la session cible. Si elle est omise ou vaut"main", le Gateway utilise la clé de session principale configurée (en respectantsession.mainKeyet l’agent par défaut, ouglobaldans la portée de session globale).agentId(chaîne, facultatif) : résout la clé de session de cet agent. Renvoie une erreur400en cas de conflit avec une valeursessionKeyexplicite déjà associée à un autre agent.idempotencyKey(chaîne, facultatif) : utilisée pour dériver un identifiant stable d’appel d’outil pour cette invocation.dryRun(booléen, facultatif) : réservé à un usage futur ; actuellement ignoré.
Comportement de la politique et du routage
La disponibilité des outils est filtrée au moyen de la même chaîne de politiques que celle utilisée par les agents du Gateway :
tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- politiques de groupe (si la clé de session correspond à un groupe ou à un canal)
- politique de sous-agent (lors d’un appel avec une clé de session de sous-agent)
Si un outil n’est pas autorisé par la politique, le point de terminaison renvoie 404.
Remarques importantes sur le périmètre :
- Les approbations d’exécution sont des garde-fous destinés aux opérateurs, et non un périmètre d’autorisation distinct pour ce point de terminaison HTTP. Si un outil est accessible ici par l’authentification du Gateway et la politique des outils,
/tools/invoken’ajoute aucune demande d’approbation supplémentaire par appel. - Si
execest accessible ici, considérez-le comme une surface d’interpréteur de commandes capable d’effectuer des modifications. Refuserwrite,edit,apply_patchou les outils HTTP d’écriture dans le système de fichiers ne rend pas l’exécution de commandes accessible en lecture seule. - Ne partagez pas les identifiants porteurs du Gateway avec des appelants non fiables. Si vous devez séparer plusieurs périmètres de confiance, exécutez des Gateways distincts, idéalement avec des utilisateurs ou des hôtes de système d’exploitation distincts.
Par défaut, le HTTP du Gateway applique également une liste de refus stricte, même si la politique de session autorise l’outil :
| Outil | Motif |
|---|---|
exec |
Exécution directe de commandes (surface d’exécution de code à distance) |
spawn |
Création arbitraire de processus enfants (surface d’exécution de code à distance) |
shell |
Exécution de commandes d’interpréteur (surface d’exécution de code à distance) |
fs_write |
Modification arbitraire de fichiers sur l’hôte |
fs_delete |
Suppression arbitraire de fichiers sur l’hôte |
fs_move |
Déplacement ou renommage arbitraire de fichiers sur l’hôte |
apply_patch |
L’application de correctifs peut réécrire des fichiers arbitraires |
sessions_spawn |
Orchestration de sessions ; le lancement distant d’agents permet l’exécution de code à distance |
sessions_send |
Injection de messages entre sessions |
cron |
Plan de contrôle de l’automatisation persistante |
gateway |
Plan de contrôle du Gateway ; empêche sa reconfiguration via HTTP |
nodes |
Le relais de commandes Node peut atteindre system.run sur les hôtes appairés |
cron, gateway et nodes sont également réservés au propriétaire : même en dehors de cette liste de refus par défaut, les appelants non propriétaires ne peuvent pas les invoquer sur cette surface.
Personnalisez la liste générale de refus via gateway.tools :
{ gateway: { tools: { // Outils supplémentaires à bloquer via HTTP /tools/invoke deny: ["browser"], // Retirer des outils de la liste de refus par défaut pour les appelants propriétaires/administrateurs allow: ["gateway"], }, },}gateway.tools.allow est une dérogation d’exposition, et non une élévation de portée. Dans les modes HTTP porteurs d’identité, cron, gateway et nodes restent indisponibles pour les appelants dépourvus d’une identité de propriétaire ou d’administrateur (operator.admin), même lorsqu’ils figurent dans gateway.tools.allow. L’authentification par jeton porteur reposant sur un secret partagé continue de suivre la règle de confiance opérateur complète décrite ci-dessus.
Pour aider les politiques de groupe à résoudre le contexte, vous pouvez facultativement définir :
x-openclaw-message-channel: <channel>(exemple :slack,telegram)x-openclaw-account-id: <accountId>(lorsque plusieurs comptes existent)x-openclaw-message-to: <target>(cible de livraison pour la politique des outils de messagerie)x-openclaw-thread-id: <threadId>(contexte du fil pour la politique des outils de messagerie)
Réponses
| Statut | Signification |
|---|---|
200 |
{ ok: true, result } |
400 |
{ ok: false, error: { type, message } } (requête non valide ou erreur dans les données d’entrée de l’outil) |
401 |
Non autorisé |
403 |
{ ok: false, error: { type, message, requiresApproval? } } (appel d’outil bloqué par la politique) |
404 |
Outil indisponible (introuvable ou absent de la liste d’autorisation) |
405 |
Méthode non autorisée |
408 |
Délai d’attente dépassé lors de la lecture du corps de la requête |
413 |
Le corps de la requête dépasse la taille maximale de charge utile |
429 |
Débit d’authentification limité (Retry-After défini) |
500 |
{ ok: false, error: { type, message } } (erreur inattendue d’exécution de l’outil ; message expurgé) |
Exemple
curl -sS http://127.0.0.1:18789/tools/invoke \ -H 'Authorization: Bearer secret' \ -H 'Content-Type: application/json' \ -d '{ "tool": "sessions_list", "action": "json", "args": {} }'