Développeurs

API REST et serveur MCP

Catalogue et prix en CAD, disponibilité, serveurs GPU, clés SSH, sauvegardes, crédit et budget sont accessibles par programme : vos scripts utilisent l’API REST (opérations listées ci-dessous), vos agents IA se connectent au serveur MCP. Les clés d’accès se créent dans la console.

Démarrer en 3 étapes

  1. 1

    Créez un compte

    Inscrivez-vous en ligne. Ajoutez du crédit quand vous êtes prêt à déployer.

    Créer un compte
  2. 2

    Créez une clé API

    Dans la console, page Paramètres, section Clés API. La clé complète n’est affichée qu’une fois : conservez-la dans un gestionnaire de secrets.

    Créer une clé API
  3. 3

    Faites votre premier appel

    Listez le catalogue avec vos prix en dollars canadiens et la disponibilité en direct.

curl "https://gpucloud.ca/api/v1/gpu"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"

Remplacez $GPUCLOUD_API_KEY par votre clé (préfixe gpu_).

Disponibilité publique, sans clé

Pour vérifier si un modèle GPU peut être déployé maintenant. Réponse mise en cache 15 secondes, CORS ouvert.

curl "https://gpucloud.ca/api/v1/availability"

Authentification

  • Chaque requête porte l’en-tête Authorization: Bearer suivi de votre clé API REST (préfixe gpu_).
  • Les clés sont créées depuis la console seulement, jamais par l’API : une clé ne peut pas créer ni supprimer d’autres clés.
  • Une clé expire après 90 jours. Seul son préfixe reste visible ; la clé est stockée sous forme d’empreinte SHA-256.
  • Deux niveaux : accès complet, ou lecture seule (GET uniquement ; toute autre méthode répond 401).
  • Les clés MCP (préfixe gpc_mcp_) sont refusées par l’API REST et réservées au serveur MCP.

Les requêtes d’écriture (POST, PUT, DELETE) doivent aussi envoyer l’en-tête Origin: https://gpucloud.ca, sinon elles répondent 403. Les exemples ci-dessous l’incluent.

Endpoints

URL de base : https://gpucloud.ca/api. Les opérations ci-dessous sont générées depuis la spécification OpenAPI publiée.

Catalogue, prix et disponibilité

GET/api/v1/gpuLister les plans GPUClé API, 60 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/v1/gpu" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"

Réponse

{
  "data": [
    {
      "id": "gpu-l40",
      "name": "NVIDIA L40",
      "gpu": "1x NVIDIA L40 (48 GB GDDR6)",
      "gpuModel": "NVIDIA L40",
      "gpuCount": 1,
      "spot": false,
      "hourlyOnly": false,
      "specs": {
        "vcores": 28,
        "ram": 58,
        "storage": 100,
        "localStorage": 725,
        "storageType": "NVMe"
      },
      "pricing": {
        "hourly": 1.57,
        "monthly": 1146.1,
        "annual": 1146.1,
        "currency": "CAD"
      },
      "priceOnRequest": false,
      "available": true,
      "purchasable": true,
      "autoProvisioning": true,
      "eligibility": "deployable"
    },
    {
      "id": "gpu-l40-x2",
      "name": "NVIDIA L40 × 2",
      "gpu": "2x NVIDIA L40 (48 GB GDDR6)",
      "gpuModel": "NVIDIA L40",
      "gpuCount": 2,
      "spot": false,
      "hourlyOnly": false,
      "specs": {
        "vcores": 60,
        "ram": 116,
        "storage": 100,
        "localStorage": 1550,
        "storageType": "NVMe"
      },
      "pricing": {
        "hourly": 3.12,
        "monthly": 2277.6,
        "annual": 2277.6,
        "currency": "CAD"
      },
      "priceOnRequest": false,
      "available": true,
      "purchasable": true,
      "autoProvisioning": true,
      "eligibility": "deployable"
    }
  ]
}
GET/api/v1/availabilityDisponibilité publique des GPUPublic, 60 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/v1/availability"

Réponse

{
  "data": {
    "region": "canada-montreal",
    "updatedAt": "2026-09-28T12:00:00.000Z",
    "models": [
      {
        "slug": "h100",
        "name": "NVIDIA H100 PCIe",
        "sizes": [
          {
            "id": "gpu-h100",
            "gpuCount": 1,
            "spot": false,
            "available": true,
            "priceOnRequest": false
          },
          {
            "id": "gpu-h100-x2",
            "gpuCount": 2,
            "spot": false,
            "available": false,
            "priceOnRequest": false
          }
        ]
      },
      {
        "slug": "h200",
        "name": "NVIDIA H200 SXM",
        "sizes": [
          {
            "id": "gpu-h200-sxm-x8",
            "gpuCount": 8,
            "spot": false,
            "available": false,
            "priceOnRequest": false
          }
        ]
      }
    ]
  }
}
GET/api/v1/catalogCatalogue public des prix des GPUPublic, 60 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/v1/catalog"
GET/api/v1/stockDisponibilité par modèle et par taille (même vue que /v1/availability).Clé API, 30 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/v1/stock"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"
GET/api/v1/regionsRégions servies.Clé API, 30 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/v1/regions"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"
GET/api/v1/flavorsTailles de machine du catalogue.Clé API, 30 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/v1/flavors"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"
GET/api/v1/imagesImages de système d’exploitation.Clé API, 30 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/v1/images"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"
GET/api/v1/environmentsEnvironnements où vos serveurs sont déployés.Clé API, 30 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/v1/environments"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"
GET/api/servers/deploy-quoteCe que coûtera un déploiement pour votre compte (prix et crédit requis), sans rien créer.Clé API, 60 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/servers/deploy-quote?productId=gpu-l40"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"

Serveurs : créer, lister, démarrer, arrêter, supprimer

GET/api/serversLister les serveursClé API, 30 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/servers" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"

Réponse

{
  "data": [
    {
      "id": "clxyz123456",
      "name": "gpu-abc12345-1719000000000",
      "status": "ACTIVE",
      "gpu": "L40",
      "specs": {
        "vcores": 28,
        "ram": 58,
        "storage": 100
      },
      "ipv4": "1.2.3.4",
      "region": "canada-montreal",
      "monthlyCost": 1146.1,
      "createdAt": "2026-06-24T12:00:00.000Z"
    }
  ]
}
POST/api/serversCréer un serveurClé API, 5 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/servers" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"productId":"gpu-l40","sshKeyId":"clxyz123456","name":"my-ml-server","region":"canada-montreal"}'

Réponse

{
  "data": {
    "id": "clxyz123456",
    "name": "gpu-abc12345-1719000000000",
    "status": "PROVISIONING",
    "gpu": "L40"
  }
}
GET/api/servers/{id}Obtenir un serveurClé API, 30 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"
DELETE/api/servers/{id}Supprimer un serveurClé API, 5 requêtes par minute

Requête

curl -X DELETE "https://gpucloud.ca/api/servers/<id>" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca"
POST/api/servers/{id}/actionsAction sur un serveurClé API, 5 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/servers/<id>/actions" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"action":"reboot"}'
PUT/api/servers/{id}/threshold-actionChoisir l’action au seuilClé API, 10 requêtes par minute

Requête

curl -X PUT "https://gpucloud.ca/api/servers/<id>/threshold-action" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"onFundsExhausted":"DELETE"}'
GET/api/servers/{id}/metricsMétriques d’un serveurClé API, 30 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>/metrics" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"
GET/api/servers/{id}/firewallLister les règles de pare-feuClé API, 30 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>/firewall" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"
POST/api/servers/{id}/firewallAjouter une règle de pare-feuClé API, 5 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/servers/<id>/firewall" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"direction":"ingress","protocol":"tcp","portRangeMin":8080,"portRangeMax":8080,"remoteIpPrefix":"0.0.0.0/0"}'
DELETE/api/servers/{id}/firewallSupprimer une règle de pare-feuClé API, 5 requêtes par minute

Requête

curl -X DELETE "https://gpucloud.ca/api/servers/<id>/firewall" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"ruleId":123}'
GET/api/servers/{id}/backupsLister les sauvegardesClé API, 60 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>/backups" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"
POST/api/servers/{id}/backupsSauvegarder maintenantClé API, 5 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/servers/<id>/backups" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca"
PUT/api/servers/{id}/backupsOption de sauvegardeClé API, 10 requêtes par minute

Requête

curl -X PUT "https://gpucloud.ca/api/servers/<id>/backups" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true,"hourLocal":3,"retention":7,"expectedMonthlyPriceCad":14.99}'
DELETE/api/servers/{id}/backups/{backupId}Supprimer une sauvegardeClé API, 10 requêtes par minute

Requête

curl -X DELETE "https://gpucloud.ca/api/servers/<id>/backups/<backupId>" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca"
GET/api/servers/{id}/backups/{backupId}/restorePrix de la restaurationClé API, 30 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>/backups/<backupId>/restore" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"
POST/api/servers/{id}/backups/{backupId}/restoreRestaurer vers un nouveau serveurClé API, 3 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/servers/<id>/backups/<backupId>/restore" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"name":"train-restored"}'
GET/api/servers/{id}/migrateChangement de GPU : optionsClé API, 30 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>/migrate" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"
POST/api/servers/{id}/migrateMigrer vers un autre GPUClé API, 3 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/servers/<id>/migrate" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"targetProductId":"gpu-a100-pcie","source":"fresh","expectedHourlyRateCad":2.09}'
GET/api/reservationsLister les réservationsClé API, 60 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/reservations" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"
POST/api/reservationsRéserver un GPUClé API, 10 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/reservations" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"productId":"gpu-h100-x8","sshKeyId":"clxyz123456","maxHourlyCad":25,"validityDays":7,"acceptAlternative":false,"consent":true,"consentVersion":"2026-10-10","consentLang":"en"}'
DELETE/api/reservations/{reservationId}Annuler une réservationClé API, 20 requêtes par minute

Requête

curl -X DELETE "https://gpucloud.ca/api/reservations/<reservationId>" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca"
POST/api/reservations/{reservationId}/renewRenouveler une réservationClé API, 20 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/reservations/<reservationId>/renew" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"validityDays":7}'
GET/api/servers/{id}/eventsJournal d’activité d’un serveur.Clé API, 30 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>/events"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"

Clés SSH

GET/api/settings/ssh-keysLister les clés SSHClé API, 30 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/settings/ssh-keys" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"
POST/api/settings/ssh-keysAjouter une clé SSHClé API, 5 requêtes par minute

Requête

curl -X POST "https://gpucloud.ca/api/settings/ssh-keys" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca" \
  -H "Content-Type: application/json" \
  -d '{"name":"my-laptop","publicKey":"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExample user@laptop"}'
DELETE/api/settings/ssh-keysSupprimer une clé SSHClé API, 5 requêtes par minute

Requête

curl -X DELETE "https://gpucloud.ca/api/settings/ssh-keys?id=<id>" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY" \
  -H "Origin: https://gpucloud.ca"

Facturation et budget

GET/api/creditsSolde de crédit et transactions (summary=1 pour le solde seul).Clé API, 30 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/credits"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"
GET/api/servers/{id}/usageFacturation heure par heure d’un serveur.Clé API, 30 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>/usage"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"
GET/api/servers/{id}/budgetLimite mensuelle d’un serveur et son coût du mois.Clé API, 60 requêtes par minute

Lecture seule, pas encore dans la spécification OpenAPI.

Requête

curl -X GET "https://gpucloud.ca/api/servers/<id>/budget"   -H "Authorization: Bearer $GPUCLOUD_API_KEY"

Clés API

GET/api/v1/api-keysLister les clés APIClé API, 30 requêtes par minute

Requête

curl -X GET "https://gpucloud.ca/api/v1/api-keys" \
  -H "Authorization: Bearer $GPUCLOUD_API_KEY"

Réponse

{
  "data": [
    {
      "id": "clxyz123456",
      "name": "CI/CD Pipeline",
      "prefix": "gpu_k_abc1",
      "lastUsedAt": "2026-06-24T10:00:00.000Z",
      "createdAt": "2026-06-01T12:00:00.000Z"
    }
  ]
}

La création et la révocation des clés API se font uniquement depuis la console, connecté à votre compte : une clé API ne peut ni créer ni supprimer de clé. Gérer mes clés API dans la console

Limites de débit

Chaque opération est limitée par adresse IP et par minute. Au-delà, la réponse est 429 Too many requests : attendez la minute suivante avant de réessayer. La limite de chaque opération est indiquée à côté d’elle ci-dessus.

Codes d’erreur

400
Requête invalide (paramètre manquant ou hors limites).
401
Clé absente (NO_API_KEY) ou invalide, expirée, révoquée, ou en lecture seule sur une écriture (INVALID_API_KEY). La réponse donne le lien pour créer un compte et une clé.
402
Crédit insuffisant, carte requise (PAYMENT_REQUIRED) ou plafond de budget atteint (BUDGET_CAP_REACHED). La réponse donne le lien direct pour payer ou relever le plafond.
403
Requête d’écriture sans en-tête Origin autorisé.
404
Ressource introuvable ou qui n’appartient pas à votre compte.
409
Conflit, par exemple un modèle GPU indisponible en ce moment.
429
Limite de débit atteinte.
500
Erreur interne : réessayez plus tard ou écrivez au support.

Les erreurs sont du JSON avec au moins un champ error (code ou message), parfois accompagné d’un champ message et de détails.

Compte ou paiement : quoi faire, avec le lien

Quand une requête échoue pour une raison de compte ou de paiement, la réponse contient un objet accountAction : un code stable, un message clair (en français si votre en-tête Accept-Language le demande, sinon en anglais), l’action à faire avec son lien absolu, tous les liens utiles et, quand il est connu, le montant minimum en dollars canadiens pour couvrir une heure du GPU demandé. Ajoutez votre carte et des crédits au lien donné, relancez la même requête : vous aurez votre GPU.

NO_API_KEY
401 : aucune clé envoyée. Créez un compte, puis une clé API dans la console.
INVALID_API_KEY
401 : clé invalide, expirée, révoquée ou sans la permission requise. Créez une nouvelle clé.
PAYMENT_REQUIRED
402 : crédit insuffisant, aucune carte enregistrée ou carte refusée. Ajoutez une carte et des crédits ; minimumCad indique le prix d’une heure du GPU demandé.
BUDGET_CAP_REACHED
402 : limite de budget du compte ou du serveur, ou plafond d’une clé MCP, atteint. Rien n’est facturé ; le lien mène au réglage du plafond.

Compatibilité : le champ error garde sa valeur d’avant (une chaîne, par exemple Unauthorized ou INSUFFICIENT_CREDITS), comme message et les détails existants ; accountAction est ajouté à côté. Lisez accountAction.code pour le code stable.

Agents IA (MCP) : la réponse HTTP reste 200, comme le veut le protocole MCP, et le refus revient dans le résultat d’outil en erreur (isError). structuredContent.error.httpStatus vaut 402, structuredContent.error.accountAction est le même objet, et le texte du message contient le lien, lisible par l’IA.

Exemple de réponse 402 :

{
  "error": "INSUFFICIENT_CREDITS",
  "message": "Payment required. You need a paid order or at least enough credits for 1 hour of usage.",
  "requiredCredits": 1.57,
  "currentBalance": 0,
  "accountAction": {
    "code": "PAYMENT_REQUIRED",
    "message": "Paiement requis. Ajoutez votre carte et des crédits ici, puis relancez la même requête : vous aurez votre GPU. https://gpucloud.ca/fr/console/billing?addCredits=25 Il faut au moins 1.57 $ CAD pour couvrir une heure de ce GPU (achat de crédits minimum : 25 $ CAD).",
    "action": {
      "label": "Ajouter une carte et des crédits",
      "url": "https://gpucloud.ca/fr/console/billing?addCredits=25"
    },
    "links": {
      "signup": "https://gpucloud.ca/fr/auth/register",
      "login": "https://gpucloud.ca/fr/auth/login",
      "apiKeys": "https://gpucloud.ca/fr/console/settings#api-keys",
      "billing": "https://gpucloud.ca/fr/console/billing",
      "addCredits": "https://gpucloud.ca/fr/console/billing?addCredits=25",
      "paymentMethod": "https://gpucloud.ca/fr/console/billing?addCredits=25#payment-method",
      "budget": "https://gpucloud.ca/fr/console/billing#budget-limit",
      "documentation": "https://gpucloud.ca/fr/developers#errors"
    },
    "minimumCad": 1.57,
    "minimumTopupCad": 25
  }
}

Exemple de résultat d’outil MCP (structuredContent) :

{
  "isError": true,
  "structuredContent": {
    "error": {
      "code": "INSUFFICIENT_CREDITS",
      "message": "Paiement requis. Ajoutez votre carte et des crédits ici, puis relancez la même requête : vous aurez votre GPU. https://gpucloud.ca/fr/console/billing?addCredits=25 Il faut au moins 1.57 $ CAD pour couvrir une heure de ce GPU (achat de crédits minimum : 25 $ CAD).",
      "details": {
        "requiredCredits": 1.57
      },
      "httpStatus": 402,
      "accountAction": {
        "code": "PAYMENT_REQUIRED",
        "message": "Paiement requis. Ajoutez votre carte et des crédits ici, puis relancez la même requête : vous aurez votre GPU. https://gpucloud.ca/fr/console/billing?addCredits=25 Il faut au moins 1.57 $ CAD pour couvrir une heure de ce GPU (achat de crédits minimum : 25 $ CAD).",
        "action": {
          "label": "Ajouter une carte et des crédits",
          "url": "https://gpucloud.ca/fr/console/billing?addCredits=25"
        },
        "links": {
          "signup": "https://gpucloud.ca/fr/auth/register",
          "login": "https://gpucloud.ca/fr/auth/login",
          "apiKeys": "https://gpucloud.ca/fr/console/ai",
          "billing": "https://gpucloud.ca/fr/console/billing",
          "addCredits": "https://gpucloud.ca/fr/console/billing?addCredits=25",
          "paymentMethod": "https://gpucloud.ca/fr/console/billing?addCredits=25#payment-method",
          "budget": "https://gpucloud.ca/fr/console/billing#budget-limit",
          "documentation": "https://gpucloud.ca/fr/developers#errors"
        },
        "minimumCad": 1.57,
        "minimumTopupCad": 25
      }
    }
  }
}

Crédit, budget et plafonds

  • La facturation à l’heure est prélevée sur votre solde de crédit prépayé en dollars canadiens ; un déploiement à l’heure exige au moins une heure de crédit.
  • GET /api/servers/deploy-quote indique le prix et le crédit requis avant de créer un serveur.
  • Un serveur en hibernation libère son GPU mais conserve son disque principal : il coûte alors de 0,02 $ à 0,19 $ par heure (environ 14,60 $ à 138,70 $ par mois), selon la machine. Supprimez-le pour ne plus rien payer. GET /api/servers/{id} donne ce coût sous hibernationFee, et l’action hibernate le renvoie avec le message à afficher.
  • Vous pouvez fixer une limite de budget mensuelle (et quotidienne) pour le compte : une fois atteinte, les serveurs à l’heure en marche sont mis en hibernation sans perte de données et les nouveaux déploiements sont refusés.
  • Chaque serveur à l’heure peut aussi avoir sa propre limite mensuelle, lisible par GET /api/servers/{id}/budget.
  • Les clés MCP ont leurs propres plafonds, choisis à leur création (voir la section Agents IA).

Agents IA (MCP)

GPU Cloud expose un serveur Model Context Protocol : un agent IA (Claude, Cursor, VS Code ou tout client MCP) peut consulter le catalogue, préparer un devis, déployer et gérer vos serveurs GPU, dans les limites que vous fixez.

Endpoint (Streamable HTTP, POST)

https://gpucloud.ca/api/mcp

Authentification : Authorization: Bearer suivi d’une clé MCP (préfixe gpc_mcp_). Les clés API REST y sont refusées.

Créer une clé MCP dans la console

Essayer sans clé

Sans clé, le serveur MCP répond à initialize, tools/list et ping, et les outils de catalogue (gpucloud_list_products, gpucloud_get_product, gpucloud_get_stock, gpucloud_list_regions, gpucloud_list_images, gpucloud_list_templates) donnent les prix en CAD, la disponibilité en direct, les images système et les modèles en un clic, comme l’API publique. Les autres outils demandent un compte gratuit et une clé MCP.

curl -s https://gpucloud.ca/api/mcp -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -H "MCP-Protocol-Version: 2025-11-25" -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"gpucloud_list_products","arguments":{}}}'

Configuration des clients

Claude Code

Dans un terminal

claude mcp add --transport http gpucloud https://gpucloud.ca/api/mcp --header "Authorization: Bearer gpc_mcp_YOUR_KEY"

Cursor

Fichier ~/.cursor/mcp.json

{
  "mcpServers": {
    "gpucloud": {
      "url": "https://gpucloud.ca/api/mcp",
      "headers": {
        "Authorization": "Bearer gpc_mcp_YOUR_KEY"
      }
    }
  }
}

VS Code

Fichier <project>/.vscode/mcp.json

{
  "servers": {
    "gpucloud": {
      "type": "http",
      "url": "https://gpucloud.ca/api/mcp",
      "headers": {
        "Authorization": "Bearer gpc_mcp_YOUR_KEY"
      }
    }
  }
}

Claude Desktop

Fichier claude_desktop_config.json

{
  "mcpServers": {
    "gpucloud": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://gpucloud.ca/api/mcp",
        "--header",
        "Authorization: Bearer ${GPUCLOUD_KEY}"
      ],
      "env": {
        "GPUCLOUD_KEY": "gpc_mcp_YOUR_KEY"
      }
    }
  }
}

Streamable HTTP

Tout client MCP qui accepte une URL et des en-têtes

{
  "mcpServers": {
    "gpucloud": {
      "type": "streamable-http",
      "url": "https://gpucloud.ca/api/mcp",
      "headers": {
        "Authorization": "Bearer gpc_mcp_YOUR_KEY"
      }
    }
  }
}

Sécurité et dépenses

  • Chaque clé MCP a ses permissions : lancer des serveurs, supprimer, débiter la carte enregistrée.
  • Plafonds par clé : tarif horaire maximal par serveur, coût horaire total, nombre de serveurs simultanés, dépense mensuelle, montant maximal par paiement et total mensuel des paiements.
  • Plafond atteint : les nouveaux lancements sont refusés, et selon votre choix les serveurs créés par la clé sont arrêtés.
  • Toute action qui coûte de l’argent se fait en deux temps : un devis renvoie le prix et un jeton à usage unique valable 10 minutes, puis l’agent confirme après votre accord.
  • Les tentatives d’authentification ratées sont limitées par adresse IP.

Outils disponibles

Le serveur MCP expose 63 outils, listés ici depuis leur définition.

Catalogue et stock

  • gpucloud_list_products: Lister les produits GPU
  • gpucloud_get_product: Obtenir un produit GPU
  • gpucloud_get_stock: Stock des GPU
  • gpucloud_list_regions: Lister les régions
  • gpucloud_list_images: Lister les images de système d’exploitation
  • gpucloud_list_templates: Lister les modèles en un clic

Serveurs

  • gpucloud_list_servers: Lister les serveurs
  • gpucloud_get_server: Obtenir un serveur
  • gpucloud_quote_server: Estimer le prix d’un serveur
  • gpucloud_create_server: Lancer un serveur (dépense)
  • gpucloud_start_server: Démarrer un serveur (dépense)
  • gpucloud_restore_server: Restaurer un serveur en hibernation (dépense)
  • gpucloud_stop_server: Arrêter un serveur
  • gpucloud_reboot_server: Redémarrer un serveur
  • gpucloud_hibernate_server: Mettre un serveur en hibernation
  • gpucloud_delete_server: Supprimer un serveur (irréversible)
  • gpucloud_cancel_server: Annuler un serveur (irréversible)
  • gpucloud_renew_server: Renouveler un serveur prépayé (débite la carte)
  • gpucloud_set_server_threshold_action: Choisir l’action au seuil
  • gpucloud_get_console_url: Ouvrir la console Web
  • gpucloud_get_server_metrics: Métriques du serveur
  • gpucloud_list_server_volumes: Volumes du serveur
  • gpucloud_list_server_snapshots: Instantanés du serveur
  • gpucloud_list_firewall_rules: Règles de pare-feu
  • gpucloud_add_firewall_rule: Ajouter une règle de pare-feu
  • gpucloud_delete_firewall_rule: Supprimer une règle de pare-feu
  • gpucloud_reserve_server: Réserver un GPU (lancement automatique au retour du stock)
  • gpucloud_list_reservations: Lister les réservations de GPU
  • gpucloud_cancel_reservation: Annuler une réservation de GPU
  • gpucloud_list_monthly_rentals: Lister les locations de H100 au mois
  • gpucloud_list_contracts: Lister les locations de H100 au mois (ancien nom)
  • gpucloud_list_server_backups: Sauvegardes du serveur
  • gpucloud_create_server_backup: Sauvegarder un serveur maintenant
  • gpucloud_restore_server_backup: Restaurer une sauvegarde vers un nouveau serveur (dépense)
  • gpucloud_set_server_backup_policy: Option de sauvegarde d’un serveur
  • gpucloud_migrate_server: Migrer un serveur vers un autre GPU (dépense)

Clés SSH

  • gpucloud_list_ssh_keys: Lister les clés SSH
  • gpucloud_add_ssh_key: Ajouter une clé SSH publique
  • gpucloud_generate_ssh_key: Générer une paire de clés SSH
  • gpucloud_delete_ssh_key: Supprimer une clé SSH

Facturation, budget et commandes

  • gpucloud_get_server_usage: Historique de facturation du serveur
  • gpucloud_get_balance: Solde de crédits
  • gpucloud_list_transactions: Transactions de crédits
  • gpucloud_list_invoices: Lister les factures
  • gpucloud_get_invoice: Obtenir une facture
  • gpucloud_topup_credits: Acheter des crédits (débite la carte)
  • gpucloud_get_payment_method: Carte de paiement enregistrée
  • gpucloud_add_payment_method: Ajouter une carte de paiement (lien vers la console)
  • gpucloud_get_auto_reload: Réglages de la recharge automatique
  • gpucloud_set_auto_reload: Modifier la recharge automatique
  • gpucloud_list_orders: Lister les commandes
  • gpucloud_get_order: Obtenir une commande
  • gpucloud_quote_order: Estimer le prix d’une commande
  • gpucloud_create_order: Passer une commande (débite la carte)
  • gpucloud_get_budget: Limite de budget du compte
  • gpucloud_set_budget: Fixer la limite de budget du compte

Compte et support

  • gpucloud_whoami: Qui suis-je
  • gpucloud_get_profile: Obtenir le profil
  • gpucloud_update_profile: Modifier le profil
  • gpucloud_list_tickets: Lister les billets de soutien
  • gpucloud_create_ticket: Ouvrir un billet de soutien
  • gpucloud_reply_ticket: Répondre à un billet de soutien
  • gpucloud_set_notices: Activer ou désactiver les avis de GPU Cloud

Fichiers de découverte

Prix indicatifs, révisés chaque heure selon le marché et le taux de change.