Skip to main content
Required scope: deployments:read (read), deployments:write (mutations)

Trigger a deployment

POST /v1/servers/:serverId/deploy
Start a new deployment by providing an OCI image URI. Request body:
{
  "imageUri": "registry.fly.io/my-project/my-server:latest"
}
FieldTypeRequiredDescription
imageUristringOCI image URI to deploy
Response 201: Deployment created and pipeline complete.
{
  "data": {
    "id": "dep_qrs456",
    "serverId": "srv_xyz789",
    "status": "running",
    "imageUri": "registry.fly.io/my-project/my-server:latest",
    "version": 1,
    "trivyScanResult": null,
    "createdAt": "2026-01-15T12:00:00Z",
    "deployedAt": "2026-01-15T12:03:15Z"
  }
}
Deployment statuses:
StatusDescription
pendingQueued, not yet started
buildingImage is being built or scanned
runningSuccessfully deployed and serving traffic
failedDeploy failed (see errorMessage)
rolled_backSuperseded by a rollback

List deployments

GET /v1/servers/:serverId/deployments
Returns deployment history, newest first. Query parameters: Standard pagination (limit, cursor) Response 200:
{
  "data": [
    {
      "id": "dep_qrs456",
      "status": "running",
      "imageUri": "registry.fly.io/my-project/my-server:latest",
      "version": 1,
      "trivyScanResult": {
        "critical": 0,
        "high": 0,
        "medium": 2
      },
      "createdAt": "2026-01-15T12:00:00Z",
      "deployedAt": "2026-01-15T12:03:15Z"
    }
  ],
  "meta": { "cursor": null, "hasMore": false, "total": 1 }
}

Roll back

POST /v1/servers/:serverId/rollback
Redeploy a previous version by version number. Up to 10 historical deployments are kept (3 on the Free tier). Request body:
{
  "version": 3
}
FieldTypeRequiredDescription
versionintegerVersion number of the deployment to roll back to
Response 201: New deployment object (type: rollback).

Stream logs

GET /v1/servers/:serverId/logs
Coming soon. This endpoint is planned but not yet implemented. It currently returns 501 Not Implemented.
Returns a Server-Sent Events (SSE) stream of real-time server logs. Query parameters:
ParameterDescription
levelFilter by level: debug, info, warn, error
sinceISO 8601 timestamp; return logs after this time
limitNumber of historical lines to return before streaming
Response: Content-Type: text/event-stream
data: {"level":"info","message":"MCP server listening on port 8080","timestamp":"2026-01-15T12:00:00Z"}

data: {"level":"info","message":"Tool called: get_weather","timestamp":"2026-01-15T12:00:01Z"}
Required scope: logs:read