Working with the Machines API

The Fly Machines API provides resources to create, destroy, and manage Fly Apps, Fly Machines, and Fly Volumes. Refer to the following reference docs for the usage of each:

Apps resource - Every Fly Machine belongs to a Fly App.

Machines resource - Fly Machines are our fast-launching VMs.

Tokens resource - Support for OpenID Connect tokens.

Volumes resource - Fly Volumes are persistent storage for Machines.

Connecting to the API

API addresses

There are two base URLs available to connect to the Machines API service.

Internal base URL: http://_api.internal:4280

Public base URL: https://api.machines.dev

From within your Fly.io private WireGuard network, you can connect to the API directly using the internal endpoint. From outside the Fly.io WireGuard mesh, use the public endpoint; this proxies your request to the API.

Authentication

All requests must include an API token in the HTTP headers as follows:

Authorization: Bearer <fly_api_token>

Replace <fly_api_token> with a Fly.io authentication token.

Environment setup

The examples in the Machines API reference docs assume that you have two environment variables set: FLY_API_TOKEN, the authorization token to use with the API call; and FLY_API_HOSTNAME, the API base URL.

For local development, you might set them as follows, assuming you have flyctl installed and have authenticated to Fly.io:

$ export FLY_API_HOSTNAME="https://api.machines.dev" # set to http://_api.internal:4280 when using WireGuard
$ export FLY_API_TOKEN=$(fly tokens deploy)

The fly tokens deploy command creates a token capable of managing the application in your current directory. See fly tokens create --help for information on other types of tokens you can generate.

To set an access token as an environment variable on Fly Machines, use a secret; for example:

fly secrets set FLY_API_TOKEN="$(fly tokens deploy)"

Response Codes

The Machines API uses conventional HTTP status codes to provide more information about the response.

Typically, 2xx HTTP status codes denote successful operations, 4xx codes imply failures related to the user, and 5xx codes suggest problems with the infrastructure.

Status Description
200 Successful request.
201 Created successfully.
202 Accepted (success).
204 Successful request. No content.
400 Bad request. Check that the parameters were correct.
401 The API key used was missing or invalid.
404 The resource was not found.
408 Request timed out.
5xx Indicates an error with Fly.io API servers.

Rate Limits

Machines API rate limits apply per-action, per-machine. The limit is 1 request, per second, per action (i.e. Create Machine, Start Machine etc.) — with a short-term burst limit up to 3 req/s, per action.

This applies to all actions except Get Machine which is 5 req/s, with a short-term burst limit up to 10 req/s.