# Auto-inscription des agents : un agent IA ouvre son bac à sable Shager en un appel, mais c'est un humain qui garde la main sur la publication

_2026-09-12 · Un agent ouvre son bac à sable Shager en un seul POST : l'appel, ce que permet le bac à sable, la revendication par un humain et le droit de publier._

Un agent IA peut s'inscrire seul sur Shager en une requête : `POST https://app.shager.ai/api/v1/agent/signup`, avec un corps JSON qui contient au minimum `agent_name`. Il reçoit en retour une clé API, une URL MCP et un lien de revendication, et peut aussitôt créer des espaces de travail, importer des médias et préparer des brouillons. Rien n'est programmé ni publié tant qu'un humain n'a pas ouvert le lien de revendication, ne s'est pas connecté et n'a pas décidé si cette clé a le droit de publier.

Tout le principe repose sur ce partage. L'agent n'est pas bloqué en attendant quelqu'un ; l'humain garde la décision qui touche de vraies audiences.

## Pourquoi laisser un agent s'inscrire tout seul ?

Parce que l'alternative casse le fil du travail de l'agent. Un agent chargé de « mettre en place la diffusion sociale de notre client » se heurte à un mur dès la première étape si la seule porte d'entrée est un humain qui remplit un formulaire d'inscription, valide une adresse e-mail et crée une clé dans un tableau de bord. Le temps que quelqu'un s'en charge, l'agent a perdu son contexte.

Avec l'auto-inscription, l'agent prépare le terrain seul : il crée un espace de travail par client, récupère les médias, rédige des brouillons et remet à l'humain un lien unique où tout est prêt à être relu. La marche à suivre pour s'inscrire est publiée à l'intention des agents sur [/auth.md](/auth.md), et la [page agents](/fr/agents) liste les fichiers de découverte qu'un agent peut lire avant de commencer.

## À quoi ressemble l'appel d'inscription ?

Seul `agent_name` est obligatoire (de 2 à 80 caractères). Les autres champs aident l'humain à reconnaître ce qu'il revendique.

```bash
curl -s https://app.shager.ai/api/v1/agent/signup \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Northwind content agent",
    "contact_email": "ops@northwind-agency.example",
    "organization_name": "Northwind Agency",
    "purpose": "Draft weekly posts for 12 restaurant clients"
  }'
```

La réponse regroupe tout dans `data` :

```json
{
  "data": {
    "api_key": "shgr_live_...",
    "organization_id": "...",
    "sandbox": true,
    "claim_url": "https://app.shager.ai/...",
    "expires_at": "2026-09-19T10:04:11.000Z",
    "mcp_url": "https://app.shager.ai/api/mcp",
    "api_base": "https://app.shager.ai/api/v1",
    "openapi_url": "https://app.shager.ai/api/v1/openapi.json",
    "limits": { "workspaces": 5, "requests_per_minute": 120, "publishing": "after a human claims the sandbox" },
    "next_steps": ["..."]
  }
}
```

Deux champs demandent une action immédiate.

1. `api_key` n'est affichée qu'une seule fois. Enregistrez-la avant toute autre chose, dans un coffre à secrets ou une variable d'environnement, jamais dans une ligne de log.
2. `claim_url` doit parvenir à un humain. Si vous avez renseigné `contact_email`, Shager envoie aussi le lien de revendication à cette adresse, mais l'agent doit tout de même le faire apparaître dans sa propre réponse.

Les inscriptions sont limitées à cinq par heure et par adresse, ce qui empêche un agent pris dans une boucle de créer des dizaines de bacs à sable orphelins.

## Que peut faire un bac à sable non revendiqué ?

| Autorisé avant la revendication | Bloqué tant qu'un humain n'a pas revendiqué |
|---|---|
| Créer jusqu'à 5 espaces de travail | Programmer ou publier quoi que ce soit |
| Importer des médias depuis des URL | Créer des liens de connexion client |
| Créer des brouillons | Envoyer des demandes de validation au client |
| Lister et consulter tout ce qu'il a créé | |

Les appels bloqués échouent avec une erreur explicite, et non en ne faisant rien sans prévenir. Une tentative de programmation renvoie une erreur HTTP 403 avec `"code": "sandbox_unclaimed"`, tout comme `create_connect_link` et `request_approval`. Un sixième espace de travail renvoie une 403 `sandbox_limit`. Un agent bien conçu lit le `code` et explique à l'humain ce qu'il faut faire, au lieu de réessayer.

Si les liens de connexion et les demandes de validation sont bloqués, c'est que les deux touchent de vraies personnes extérieures à l'agence : un client qui clique sur un lien pour connecter sa page Facebook, ou un relecteur qui reçoit un e-mail de validation. Cela ne doit pas se produire au nom d'une organisation que personne n'a vérifiée.

## Une première session raisonnable dans le bac à sable

Voici ce que fait un agent bien élevé pendant ses premières minutes, en Python avec `requests` :

```python
import os, requests

API = "https://app.shager.ai/api/v1"
H = {"Authorization": f"Bearer {os.environ['SHAGER_API_KEY']}"}

def call(method, path, **body):
    r = requests.request(method, f"{API}{path}", headers=H, json=body or None, timeout=60)
    payload = r.json()
    if not r.ok:
        err = payload["error"]
        raise RuntimeError(f"{r.status_code} {err['code']}: {err['message']}")
    return payload["data"]

me = call("GET", "/me")
print(me)  # organization, scopes, sandbox status

ws = call("POST", "/workspaces", name="Harbor Tacos", timezone="America/Chicago")

media = call("POST", f"/workspaces/{ws['id']}/media",
             url="https://harbortacos.example/press/fall-menu.jpg",
             file_name="fall-menu.jpg")

print("Workspace", ws["id"], "media", media["id"], media["kind"])
```

Précisez `timezone` lorsque vous créez un espace de travail. C'est un nom de fuseau IANA, et la programmation ultérieure est interprétée dans ce fuseau : un restaurant de Chicago ne doit pas hériter du fuseau par défaut de quelqu'un d'autre.

À ce stade, aucun compte social n'est encore connecté, car la connexion de comptes passe par un lien de connexion, qui lui-même exige la revendication. L'agent prépare le contenu et la structure, et l'humain ouvre la porte au reste.

## Que se passe-t-il quand l'humain revendique le bac à sable ?

L'humain ouvre `claim_url`, se connecte à Shager (ou crée un compte) et devient propriétaire du bac à sable, avec les espaces de travail, les médias et les brouillons que l'agent a préparés. Au moment de la revendication, il choisit si la clé de l'agent peut aussi programmer et publier, ce qui ajoute le scope `publish`.

Ce choix mérite qu'on y réfléchisse un instant. Laisser `publish` désactivé est une configuration tout à fait valable sur la durée : l'agent prépare les brouillons, l'humain ou le client valide et programme. Beaucoup d'agences commencent ainsi, puis ajoutent plus tard une clé de publication distincte sur https://app.shager.ai/dashboard/agents, où chaque clé peut être révoquée et où chaque appel d'agent apparaît dans le journal d'audit. Les compromis entre ces configurations sont détaillés dans [la routine de diffusion hebdomadaire](/fr/blog/skill-weekly-distribution-routine).

Après la revendication, les étapes suivantes que suggère l'API elle-même sont simples : appeler `create_connect_link` pour que le propriétaire des comptes connecte ses comptes sociaux (Facebook, Instagram, YouTube, X, LinkedIn ou TikTok) sans identifiant Shager, puis `create_post` et, si la clé dispose de `publish`, `schedule_post`.

## Et si personne ne le revendique ?

Les bacs à sable non revendiqués expirent au bout de sept jours, à la date indiquée dans `expires_at`. Les brouillons et les espaces de travail disparaissent avec eux. Un agent engagé dans un projet plus long doit relancer l'humain avant cette date, et ne doit pas réagir à l'expiration en se réinscrivant encore et encore. Un nouveau bac à sable ne récupère pas les anciens brouillons.

## Comment l'agent doit-il formuler la passation ?

Simplement, avec le lien et les conséquences. Par exemple :

```text
I set up a Shager sandbox for Northwind with 3 client workspaces and
9 draft posts. To connect the clients' accounts and publish, open this
link and sign in: <claim_url>
When you claim it you can choose whether I'm allowed to schedule posts
myself. If you don't claim it by Sep 19, the sandbox and drafts are deleted.
```

Ce message dit honnêtement ce qui a été fait, ce qui attend et ce que l'humain contrôle. C'est aussi celui qui a le plus de chances d'être cliqué.

## FAQ

### L'auto-inscription est-elle payante ?

Non. Le bac à sable est gratuit et, pendant la période de lancement, Shager l'est aussi après la revendication, sans carte bancaire ; avant de commencer à facturer, nous vous préviendrons à l'avance. L'accès API et MCP est inclus dans toutes les formules. Les limites de chaque formule sont indiquées sur la [page des tarifs](/fr/pricing).

### Après l'inscription, l'agent peut-il utiliser MCP plutôt que REST ?

Oui. La réponse contient `mcp_url`, et la même clé fonctionne sur le serveur MCP sous la forme `Authorization: Bearer shgr_live_...`. Les outils correspondent un à un aux opérations REST décrites dans le [document OpenAPI](https://app.shager.ai/api/v1/openapi.json).

### Une clé revendiquée peut-elle publier sans qu'un humain ait vu la publication ?

Seulement si l'humain a accordé `publish` lors de la revendication et que l'espace de travail n'exige pas de validation client. Ce sont deux choix de l'humain, et tous deux peuvent être modifiés ensuite : les clés peuvent être révoquées dans le tableau de bord, et la validation peut être exigée espace par espace.

## Prochaine étape

Une fois le bac à sable revendiqué et les comptes connectés, passez de l'exploration à une véritable exécution. Le [pipeline de contenu d'un agent, de A à Z](/fr/blog/agent-content-pipeline-end-to-end) reprend exactement là où cet article s'arrête, du brief jusqu'aux publications en ligne et aux clics par compte.

---
Source: https://shager.ai/fr/blog/agent-self-signup-and-claim
