API publique

Déploiements API

Déclenchez des déploiements, interrogez des enregistrements de déploiement et diffusez des événements de pipeline.

La surface des déploiements couvre les versions préliminaires, les publications de production et les flux d’événements de pipeline. Les chemins ne sont pas préfixés et ont pour racine https://api.showly.ai (il n'y a pas de préfixe de version).

Créer un déploiement

POST /sites/{siteId}/deploy
Authorization: Bearer <token>
Idempotency-Key: <uuid>
Content-Type: application/json

{
  "environment": "preview",
  "commitSha": "abc123...",
  "branch": "main"
}

C'est la seule route qui crée un déploiement (siteId est dans le chemin ; il n'y a pas de POST /deployments). Cela nécessite un en-tête Idempotency-Key — une clé manquante renvoie 428 et une clé rejouée en conflit renvoie 409. Il renvoie 202 + un enregistrement de déploiement dans l'état queued. La build s'exécute de manière asynchrone ; abonnez-vous à des événements ou interrogez l'enregistrement de déploiement.

{
  "ok": true,
  "data": {
    "id": "8c9d3e2a-4f1b-4c6d-9a2e-1f0b3c4d5e6f",
    "siteId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "target": "preview",
    "status": "queued",
    "createdAt": "2026-05-14T15:00:00Z"
  }
}

Le champ d'environnement d'un enregistrement de déploiement est nommé target et est l'un des preview, staging ou production.

Publier en production

Les publications de production utilisent le même point de terminaison avec environment: "production" et un sourceDeploymentId nommant l'aperçu ready déjà construit en cours de promotion :

POST /sites/{siteId}/deploy
Authorization: Bearer <token>
Idempotency-Key: <uuid>
Content-Type: application/json

{
  "environment": "production",
  "sourceDeploymentId": "dep_01HZX..."
}

La publication de production ne nécessite pas d’inscription OTP ou MFA. Cela nécessite encore un action de publication explicite et, lorsque l'espace de travail a approvalWorkflows activé, une approbation à la deuxième personne. Les agents utilisent request_publish lorsque cela la politique est activée ou la confirmation en deux étapes publish_site sinon.

Obtenez un déploiement

GET /deployments/{deploymentId}

Un statut de déploiement est exactement l'une des cinq valeurs suivantes :

queued → building → ready
                  ↘ failed
                  ↘ canceled

ready est l'état de réussite du terminal pour les déploiements en préversion et en production ; failed et canceled sont les états de défaillance du terminal. Il n'y a pas de statut built ou live. Un déploiement d'aperçu ready porte son adresse dans le champ url ; un déploiement de production ready dessert le parcours de production du site.

Progression de la création du flux

La progression de la construction est diffusée en direct sur SSE à partir de la surface des aperçus :

GET /previews/{deploymentId}/stream
Accept: text/event-stream

Le flux émet des transitions d'état et se ferme lorsque le déploiement atteint un état terminal. Pour les lectures post-hoc, deux points de terminaison simples couvrent la plupart des besoins :

  • GET /deployments/{deploymentId}/log?lineCount=200 — la queue du journal de construction capturée.
  • GET /deployments/{deploymentId}/diagnostics — un ensemble de défaillances structuré (étape, code d'erreur, queue de journal, hypothèses classées) conçu pour l'auto-débogage de l'agent.

Approuver/rejeter une demande de publication en production

POST /approvals/{requestId}/decision
Content-Type: application/json

{
  "decision": "approve" | "reject",
  "notes": "looks good"
}

Nécessite un abonnement utilisateur actif avec un rôle d'approbation autorisé. Il est interdit à l'acteur auteur d'approuver sa propre demande (séparation des tâches).

Restauration

Il n’y a pas de point de terminaison de restauration REST. Le retour à un déploiement antérieur est une opération d’interface utilisateur Web uniquement. Pour republier un aperçu ready précédemment, appelez POST /sites/{siteId}/deploy avec environment: "production" et l'identifiant de ce déploiement comme sourceDeploymentId ; l'approbation normale, les quotas et les barrières de sécurité s'appliquent toujours, mais l'inscription à l'OTP n'est pas requise.

Répertorier les déploiements

GET /deployments

Renvoie la liste complète de déploiement pour votre espace de travail sous forme de tableau simple : il n'y a pas encore de paramètres de filtre ou de pagination. Pour l'historique d'un seul site, utilisez GET /sites/{siteId}/deployments.

Erreurs spécifiques aux déploiements

CodesStatutSignification
idempotency_key_required428POST /sites/{siteId}/deploy a été appelé sans en-tête Idempotency-Key.
idempotency_key_conflict409Le Idempotency-Key fourni a déjà été utilisé avec une requête différente.
deployment_not_found404Token ne peut pas voir ce déploiement.
approval_required428La publication de production doit être approuvée avant de pouvoir être promue.
source_deployment_required428La publication de production doit nommer l'aperçu ready via sourceDeploymentId.
self_approval_forbidden403L'approbateur est l'acteur d'origine (séparation des tâches).
source_deployment_not_found404Le sourceDeploymentId n'existe pas ou n'est pas visible par votre token.
source_deployment_not_ready409Le déploiement source nommé n'est pas dans un état publiable (ready).

L'épuisement du quota de déploiement mensuel renvoie 402 avec une erreur de quota : mettez à niveau le plan ou attendez la réinitialisation mensuelle.

Motifs

Attendez la fin d'un déploiement (CI) :

DEP=$(curl ... | jq -r .data.id)
while :; do
  S=$(curl -sS .../deployments/$DEP | jq -r .data.status)
  [ "$S" = "ready" ] && break
  { [ "$S" = "failed" ] || [ "$S" = "canceled" ]; } && exit 1
  sleep 10
done

Lisez le journal de build :

curl -sS ".../deployments/$DEP/log?lineCount=500" \
  | jq -r '.data.lines[]' | tee build.log

Pour la plupart des automatisations, l'MCP create_preview outil est plus simple — le REST API existe pour les cas MCP ne convient pas.