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).

List server logs

GET /v1/servers/:serverId/logs
Returns paginated server log entries, newest first. Required scope: logs:read or servers:read Query parameters:
ParameterTypeDescription
levelstringFilter by level: debug, info, warn, error
searchstringCase-insensitive substring match on message
limitintegerMax entries to return (1–200, default 50)
beforestringPagination cursor from a previous response (returns older entries)
Response 200:
{
  "data": {
    "items": [
      {
        "id": "1234567890",
        "serverId": "srv_xyz789",
        "level": "info",
        "message": "MCP server listening on port 8080",
        "timestamp": "2026-01-15T12:00:00.000Z"
      }
    ],
    "hasMore": true,
    "cursor": "1746100800000_1234567890"
  }
}
To fetch the next page, pass the cursor value from the response as the before query parameter in your next request. When hasMore is false, no more entries are available.