Fly.io
Connect
Connect Fly.io from the terminal. Pass --help for the flags Fly.io accepts, plus --no-browser for headless environments.
polylane cloud connect --provider flyAPI token from your Fly.io dashboard.
Fly.io connects with an API token from your dashboard. Use the most restrictive token type: Polylane only needs read access. Your token is encrypted before it is stored, and the agent never sees it.
Setup
- Open the Fly.io Dashboard and go to Tokens.
- Create a new read-only token.
- Copy the token and paste it into Polylane.
- Polylane validates the token and starts syncing.
Polylane discovers your apps, machines, volumes, certificates, and other Fly.io resources.
Token types
| Type | Scope | Recommended |
|---|---|---|
| Read-only | Can only read resources | Use this |
| Deploy | Can deploy apps | Not needed |
| Personal | Full account access | Not recommended |
Disconnecting
Disconnect the account in Polylane, then revoke the token from your Fly.io dashboard under Tokens.
Connect Fly.io from a CI job or any other environment without a browser.
Connecting Fly.io needs no browser: the same endpoint the console calls fits in a CI job. One authenticated POST creates the connection and starts the first sync.
Prerequisites
- A Polylane API key with the
cloud_accounts:writeandcloud_accounts:readscopes. See API keys and OAuth. - Your workspace ID, which starts with
ws_. Read it fromGET /v1/workspaceswith the same key. - A Fly.io read-only API token, created under Tokens in the Fly.io dashboard.
Create the connection
curl -X POST https://api.polylane.com/v1/cloud_accounts \
-H "x-api-key: $POLYLANE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "fly",
"workspaceId": "ws_0abc123",
"token": "<fly-api-token>"
}'
The token resolves to one Fly.io organization, so one call connects one organization.
- Organization discovery reads the apps the token can see, so a token that reaches no apps fails with a
400.
The response lists what was connected, with the first sync already running. Trimmed to the two fields the rest of the flow reads:
{
"success": true,
"result": {
"provider": "fly",
"accounts": [{ "id": "acc_34gky74ibc92h8t2efn8csrh", "status": "syncing" }],
"failures": []
}
}
An account that is already connected lands in failures instead of accounts, so repeating the call never duplicates a connection.
Wait for the first sync
Poll each returned account by its id until status reaches ready (new on registration, syncing while resources stream in):
until [ "$(curl -s "https://api.polylane.com/v1/cloud_accounts/$WORKSPACE_ID/$ACCOUNT_ID" \
-H "x-api-key: $POLYLANE_API_KEY" | jq -r '.result.status')" = "ready" ]; do
sleep 15
done
Give the loop a deadline so a failed connect fails the job instead of hanging it. Once the account is ready, its resources are in the topology and Polylane has started its first check.
Disconnect from the API
Deleting the connection stops every sync and check and deletes the credentials Polylane held. The call needs the cloud_accounts:delete scope:
curl -X DELETE "https://api.polylane.com/v1/cloud_accounts/$WORKSPACE_ID/$ACCOUNT_ID" \
-H "x-api-key: $POLYLANE_API_KEY"
Then revoke the Fly.io credential on the provider side, as described under Disconnect below.
Disconnect
Disconnecting stops every sync and check and deletes the credentials Polylane held. Everything Polylane set up in Fly.io is removed as well; nothing is left behind.
polylane cloud disconnect <id>Tools
4Operations agents can perform in threads.
Supported resources
5Resource types that show up in your infrastructure graph.