Aller au contenu principal

Besoin d'un serveur performant pour vos projets ?

Découvrez nos offres

Sandboxes par API et MCP

Avec un compte YorkHost, vos scripts et vos assistants IA peuvent gérer des sandboxes sans passer par ssh yorkhost.sh : les créer, y travailler, retrouver leurs adresses, les supprimer ou les garder en VPS. Ce sont les mêmes machines (mêmes limites), mais rattachées à votre compte, avec quelques avantages :

Sandbox sans compte (ssh yorkhost.sh)Sandbox créée depuis votre compte
Durée de fonctionnement60 minutes2 heures
Suppression24 h après la création, sauf passage en VPSidem
Sandboxes simultanées1 par clé SSH3 par compte
Clés SSH du compte—Acceptées sur toutes les sandboxes du compte
Secrets du compte—Injectés dans chaque nouvelle sandbox Linux
Commandes et fichiers sans SSH—sandbox_exec, sandbox_read_file…

Une sandbox créée avec ssh yorkhost.sh puis réclamée par votre compte garde les règles d'une sandbox sans compte.

Cette page ne détaille que la partie sandboxes. Pour la mise en route (double authentification, création de clé, connexion d'un assistant), voir :

Permissions nécessaires​

PermissionLibellé dans l'espace clientCe qu'elle ouvre
sandbox:readVoir les sandboxes agentslist_sandboxes, sandbox_list_files, sandbox_read_file, list_sandbox_keys, list_sandbox_secrets
sandbox:writeCréer et supprimer des sandboxes agentscreate_sandbox, sandbox_links, delete_sandbox, sandbox_exec, sandbox_write_file, ajout et retrait des clés et des secrets
orders:writeCommander des services (facture à régler, plafond journalier)keep_sandbox, claim_sandbox, create_order
services:readLister les serviceslist_products (catalogue, prix, offres de sandbox)
billing:readLire factures et créditget_payment_link (statut d'une facture et lien de paiement)

sandbox:write et orders:write ne font partie d'aucun modèle de permissions proposé à la création d'une clé : cochez-les explicitement. Chaque commande exige un préflight qui affiche le prix (voir plus bas), mais c'est l'assistant qui vous demande votre accord avant de confirmer : ne donnez orders:write qu'à un assistant de confiance.

Outils MCP​

OutilRôlePermission
list_sandboxesSandboxes du compte : commande SSH, URL de preview, échéances, avancement du passage en VPSsandbox:read
create_sandboxCrée une sandbox gratuite. Arguments : ssh_public_key (requis), kind (linux), inject_secrets (false pour ne pas injecter les secrets du compte)sandbox:write
sandbox_linksNouveau lien de bureau graphique, l'ancien cesse de fonctionner (sandboxes avec bureau, bientôt disponibles)sandbox:write
delete_sandboxSupprime une sandbox et tous ses fichiers (irréversible)sandbox:write
sandbox_execExécute une commande shell dans une sandbox en cours, sans SSHsandbox:write
sandbox_list_filesListe un dossier de la sandboxsandbox:read
sandbox_read_fileLit un fichier de la sandboxsandbox:read
sandbox_write_fileCrée ou remplace un fichier dans la sandboxsandbox:write
list_sandbox_keysClés SSH enregistrées sur le comptesandbox:read
add_sandbox_key, remove_sandbox_keyAjoute ou retire une clé SSH du comptesandbox:write
list_sandbox_secretsNoms des secrets du compte (jamais les valeurs)sandbox:read
set_sandbox_secret, delete_sandbox_secretCrée, remplace ou supprime un secret du comptesandbox:write
keep_sandboxTransforme une sandbox du compte en VPS (commande + facture)orders:write
claim_sandboxRattache au compte une sandbox créée avec ssh yorkhost.sh (lien ou jeton yhsc_…) et la transforme en VPSorders:write
list_productsProduits commandables par API, prix par cycle, plafond de dépense et offres de sandboxservices:read
create_orderCommande un produit du catalogue (crée une vraie facture)orders:write
get_payment_linkStatut d'une facture et, si elle est impayée, lien vers la page de paiement sécuriséebilling:read

Le serveur MCP ne montre à l'assistant que les outils permis par la clé ou l'autorisation accordée. Les outils de commande exigent toujours un préflight et votre validation (voir plus bas).

Endpoints REST​

Base : https://api.yorkhost.fr, en-tête Authorization: Bearer <clé>.

Méthode et routeRôlePermission
GET /client/v1/sandboxesSandboxes actives du compte et offres disponiblessandbox:read
GET /client/v1/sandboxes/{id}Détail d'une sandboxsandbox:read
POST /client/v1/sandboxesCréer une sandbox (3 par minute et par clé)sandbox:write
DELETE /client/v1/sandboxes/{id}Supprimer une sandboxsandbox:write
POST /client/v1/sandboxes/{id}/linksNouveau lien de bureausandbox:write
POST /client/v1/sandboxes/{id}/execExécuter une commande (60 par minute et par compte)sandbox:write
GET /client/v1/sandboxes/{id}/files?path=&depth=Lister un dossier (120 lectures par minute et par compte)sandbox:read
GET /client/v1/sandboxes/{id}/files/content?path=Lire un fichiersandbox:read
PUT /client/v1/sandboxes/{id}/files/contentÉcrire un fichiersandbox:write
GET /client/v1/sandbox-keysClés SSH du comptesandbox:read
POST /client/v1/sandbox-keysAjouter une clé ({"public_key": "…", "name": "…"})sandbox:write
DELETE /client/v1/sandbox-keys?fingerprint=SHA256:…Retirer une clésandbox:write
GET /client/v1/sandbox-secretsNoms des secrets du comptesandbox:read
PUT /client/v1/sandbox-secrets/{nom}Créer ou remplacer un secret ({"value": "…"})sandbox:write
DELETE /client/v1/sandbox-secrets/{nom}Supprimer un secretsandbox:write
POST /client/v1/sandboxes/{id}/keepGarder une sandbox du compte en VPSorders:write
POST /client/v1/sandboxes/claimRéclamer une sandbox ssh yorkhost.sh et la garder en VPSorders:write
GET /client/v1/catalogCatalogue, plafond journalier (daily_cap_eur), offres de sandboxservices:read
POST /client/v1/ordersCommander un produit (5 par minute et par clé)orders:write
GET /client/v1/invoices/{id}/payment-linkStatut et lien de paiement d'une facturebilling:read

L'identifiant d'une sandbox a la forme sbx suivi de 12 caractères (sbxabcd2345efgh).

Créer une sandbox​

curl -X POST https://api.yorkhost.fr/client/v1/sandboxes \
-H "Authorization: Bearer yhk_client_v1_..." \
-H "Content-Type: application/json" \
-d '{"kind": "linux", "ssh_public_key": "ssh-ed25519 AAAA... moi@portable"}'

Réponse 201 :

{
"sandbox": {
"id": "sbxabcd2345efgh",
"kind": "linux",
"status": "running",
"ssh": "ssh sbxabcd2345efgh@yorkhost.sh",
"preview_url": "https://sbxabcd2345efgh-8080.yorkhost.sh",
"created_at": "2026-09-27T13:32:00Z",
"run_until": "2026-09-27T15:32:00Z",
"claim_until": "2026-09-28T13:32:00Z"
},
"secrets_injected": 2,
"message": "Connect with the SSH key you provided (or any SSH key registered on the account with add_sandbox_key): ssh sbxabcd2345efgh@yorkhost.sh …"
}
Connectez-vous avec l'identifiant

Pour une sandbox créée par API ou MCP, utilisez toujours la commande renvoyée, ssh <id>@yorkhost.sh, avec la clé fournie à la création ou une clé enregistrée sur le compte. Un simple ssh yorkhost.sh créerait une autre sandbox, anonyme cette fois.

secrets_injected indique combien de secrets du compte ont été injectés ; un champ warnings apparaît si un réglage du compte n'a pas pu être appliqué (la sandbox est livrée quand même).

Seul le type linux est ouvert pour le moment ; les types desktop (bureau Linux) et windows (bureau Windows) répondent 400 kind_unavailable en attendant leur ouverture.

Travailler dans la sandbox sans SSH​

Les assistants connectés par le web (Claude.ai, ChatGPT…) créent des sandboxes mais ne peuvent pas ouvrir de session SSH. Quatre outils leur permettent d'y travailler quand même :

OutilCe qu'il fait
sandbox_execLance command avec bash -lc et renvoie exit_code, stdout, stderr, timed_out, duration_ms. Options : cwd, timeout_seconds, stdin.
sandbox_list_filesListe path (par défaut /home/agent), sur 1 à 3 niveaux (depth), 1 000 entrées au plus.
sandbox_read_fileRenvoie le contenu de path : texte, ou base64 pour un fichier binaire.
sandbox_write_fileCrée ou remplace path (dossiers parents créés), texte ou base64, avec des droits optionnels (mode, ex. 755).

Les règles :

  • Tout s'exécute sous l'utilisateur agent, comme en SSH (sudo sans mot de passe disponible pour apt-get, etc.).
  • La sandbox doit être en cours (409 not_running si elle est arrêtée ou en passage en VPS) et appartenir au compte. Pas de sandbox Windows.
  • Chemins sous /home/agent ou /tmp (un chemin relatif part de /home/agent).
  • Délai : 60 s par défaut, 300 s au plus ; la commande et ses processus enfants sont arrêtés à l'échéance.
  • Tailles : stdout et stderr coupés au-delà de 256 Kio chacun (stdout_truncated, stderr_truncated) ; fichiers de 1 Mio au plus en lecture comme en écriture.
  • Débit : 4 commandes simultanées par sandbox, 60 commandes ou écritures et 120 lectures par minute et par compte.

Pour un serveur de dev ou une tâche longue, lancez-la en arrière-plan en redirigeant ses sorties, puis lisez le journal :

nohup npm run dev -- --host 0.0.0.0 --port 8080 > /tmp/dev.log 2>&1 &

Sans redirection, la commande attend jusqu'au délai. Testez ensuite l'application avec curl localhost:8080 ou sur sa preview.

Clés SSH du compte​

Enregistrez jusqu'à 10 clés SSH publiques (ed25519, ECDSA ou RSA ≥ 2048 bits) sur votre compte, avec add_sandbox_key ou POST /client/v1/sandbox-keys :

  • chacune ouvre toutes les sandboxes du compte, y compris celles créées avant son ajout : ssh <id>@yorkhost.sh ;
  • elles sont aussi ajoutées dans les sandboxes créées ensuite, à côté de la clé fournie à la création ;
  • une clé retirée (remove_sandbox_key, avec son empreinte SHA256:…) n'est plus acceptée.

Pratique pour rejoindre depuis votre ordinateur une sandbox créée par un assistant. Sans identifiant (ssh yorkhost.sh), une clé du compte ouvre toujours sa propre sandbox anonyme, pas celles du compte.

Uniquement la clé publique

Envoyez le contenu du fichier .pub. Une clé privée collée par erreur est refusée et n'est jamais enregistrée.

Secrets du compte​

Les secrets sont des variables d'environnement (ANTHROPIC_API_KEY, OPENAI_API_KEY, GITHUB_TOKEN…) injectées automatiquement dans chaque nouvelle sandbox Linux du compte : les agents préinstallés et vos outils les trouvent sans que vous ayez à les retaper.

  • Création ou remplacement : set_sandbox_secret ou PUT /client/v1/sandbox-secrets/{nom}. Nom en majuscules (A-Z, 0-9, _), valeur de 4 Kio au plus, 20 secrets par compte.
  • Chiffrés chez YorkHost et jamais réaffichés : l'API et le MCP ne renvoient que les noms et les dates.
  • Dans la sandbox, ils sont écrits dans ~/.config/yorkhost/env (lisible par agent seul) et chargés par le shell, y compris pour ssh <id>@yorkhost.sh 'commande' et sandbox_exec.
  • Un secret modifié ou supprimé vaut pour les sandboxes créées ensuite ; celles qui existent gardent leur fichier jusqu'à leur suppression.
  • Pour faire tourner du code dont vous n'êtes pas sûr, créez la sandbox avec inject_secrets: false.
  • Les sandboxes sans compte (ssh yorkhost.sh) ne reçoivent jamais les secrets, même réclamées ensuite.
Des clés dédiées

Tout programme lancé dans la sandbox peut lire ces variables. Préférez des clés dédiées, avec un plafond de dépense et des droits limités, et ne donnez à un assistant que des secrets que vous avez choisis pour cet usage.

Confirmation des commandes​

keep_sandbox, claim_sandbox et create_order dépensent votre argent. Aucune commande ne peut être passée en un seul appel : le prix est toujours obtenu d'abord, et les instructions du serveur MCP demandent à l'assistant de vous le montrer et d'attendre votre accord.

  1. Préflight : l'appel sans confirmation_token ne commande rien. Il renvoie le produit, le prix, le cycle et un confirmation_token.
  2. Votre accord : l'agent vous montre le prix et attend votre validation explicite.
  3. Confirmation : le même appel, avec confirmation_token, passe la commande et crée la facture.
# 1. Préflight : rien n'est commandé
curl -X POST https://api.yorkhost.fr/client/v1/sandboxes/sbxabcd2345efgh/keep \
-H "Authorization: Bearer yhk_client_v1_..." -H "Content-Type: application/json" -d '{}'
{
"preflight": true,
"sandbox_id": "sbxabcd2345efgh",
"kind": "linux",
"product_id": 123,
"cycle": "m",
"price": 3.99,
"currency": "EUR",
"recurring": true,
"confirmation_token": "1790000000.4f1c…",
"expires_in": 600,
"message": "Nothing was ordered. …"
}
# 2. Après votre accord : confirmation
curl -X POST https://api.yorkhost.fr/client/v1/sandboxes/sbxabcd2345efgh/keep \
-H "Authorization: Bearer yhk_client_v1_..." -H "Content-Type: application/json" \
-d '{"confirmation_token": "1790000000.4f1c…"}'

Réponse 201 : order_id, invoice_id, total, currency, invoice_status (unpaid ou paid si le crédit du compte a couvert la facture) et, si elle est impayée, payment_url à ouvrir pour payer.

Pour une sandbox créée avec ssh yorkhost.sh, le principe est identique avec POST /client/v1/sandboxes/claim et le corps {"claim_token": "yhsc_…"} (le lien complet de réclamation est aussi accepté), puis {"claim_token": "yhsc_…", "confirmation_token": "…"}.

Les garde-fous :

  • Jeton de confirmation valable 10 minutes, lié à la clé qui a fait le préflight, au produit ou à la sandbox, au cycle et au prix : si le prix change, il faut refaire le préflight.
  • Usage unique : rejouer une confirmation (après un timeout par exemple) ne commande jamais deux fois.
  • Plafond de dépense journalier par compte pour les commandes passées par API ou MCP (100 € par défaut ; la valeur est donnée par daily_cap_eur du catalogue). Au-delà, commandez depuis l'espace client.
  • Liste blanche : seuls les produits renvoyés par list_products peuvent être commandés par create_order.
  • Paiement hors conversation : la facture se règle sur la page sécurisée YorkHost (payment_url). Ne communiquez jamais vos données de carte à un agent.

Erreurs​

HTTPcodeCause
400bad_public_keyClé SSH absente ou invalide (ed25519, ECDSA ou RSA ≥ 2048 attendue), ou clé privée envoyée
400kind_unavailableType de sandbox non ouvert, ou sandbox non convertible en VPS
400bad_requestCommande, dossier, chemin (hors /home/agent et /tmp), profondeur ou droits invalides
400bad_secret_name, bad_secret_valueNom de secret invalide ou réservé, valeur trop longue
403permission_deniedFichier inaccessible à l'utilisateur agent
404not_foundSandbox inconnue ou appartenant à un autre compte
404file_not_foundFichier introuvable dans la sandbox
409billed_serviceSuppression impossible : la sandbox est en cours de passage en VPS (annulez la commande ou le service)
409not_runningCommande ou fichier refusé : la sandbox est arrêtée, démarre encore ou passe en VPS
409key_exists, limit_reachedClé déjà enregistrée, ou 10 clés / 20 secrets atteints
413too_largeFichier de plus de 1 Mio
422file_errorLe chemin n'est pas un fichier (ou pas un dossier pour un listing)
409not_claimableSandbox déjà réclamée, expirée ou plus convertible
409quote_invalidJeton de confirmation expiré ou ne correspondant plus (prix changé) : refaites le préflight
409already_orderedConfirmation déjà utilisée : la commande existe, vérifiez vos factures
403spend_capPlafond de dépense journalier atteint
429sandbox_quotaTrop de sandboxes actives sur le compte (3) : supprimez-en ou gardez-en une
429busy4 commandes tournent déjà dans cette sandbox : attendez qu'une se termine
502provision_failedLa sandbox n'a pas pu être créée, rien n'est facturé : réessayez dans quelques minutes
503capacityCapacité momentanément atteinte ou créations suspendues : réessayez plus tard
503guest_unavailableLa sandbox ne répond pas encore aux commandes : réessayez dans quelques secondes
503secrets_disabledSecrets du compte momentanément indisponibles
503order_unavailableCommandes temporairement indisponibles

Les erreurs suivent le format {"error": "...", "code": "..."} ; le message error est rédigé pour être relu tel quel par un agent.