Reference
API reference
Everything lives under /api/v1on your dashboard's address and answers in JSON.
Authentication
Create an API token in the dashboard under Settings → Integrations, and send it as a bearer token. It can reach everything in the team that created it, including environment variables, so treat it like a password.
shell
curl https://dash.example.com/api/v1/apps \
-H "Authorization: Bearer $SKIFF_TOKEN"Apps
| GET | /apps | List the team's apps. |
| GET | /apps/{name} | One app: state, address, replicas and latest commit. |
| GET | /apps/{name}/logs | Recent output from the app and its workers. Add ?lines= up to 2000, or ?follow=1 to stream it as plain text. |
| GET | /apps/{name}/insights | Traffic and uptime. Add ?range= with 1h, 24h or 7d. The default is 24h. |
Deploys
| POST | /apps/{name}/deploy | Deploy the newest commit. For an image project, send {"image": "..."} to change the image. |
| GET | /apps/{name}/deploys | The app's history, marking which can be rolled back to. |
| POST | /apps/{name}/rollback | Go back to an earlier deploy. Send {"deploy": "<id>"}. |
| GET | /deploys/{id} | A deploy's status: building, live, failed or canceled. |
| GET | /deploys/{id}/log | A deploy's status and the last 200 lines of its build log. |
Previews
| POST | /apps/{name}/previews | Create or redeploy a branch's preview. Send {"branch": "feat/login"}. |
| DELETE | /apps/{name}/previews?branch= | Remove a branch's preview. |
Environment variables
| GET | /apps/{name}/env | Read the app's variables, including their values. |
| PUT | /apps/{name}/env | Replace all of them. Send {"vars": [{"key": "A", "value": "1", "build": false}]}. They apply on the next deploy. |
Deploying from a script
A deploy starts in the background. Starting one answers 202with its ID, and you check it until it's no longer building.
shell
curl -X POST https://dash.example.com/api/v1/apps/shop-api/deploy \
-H "Authorization: Bearer $SKIFF_TOKEN"
# {"app":"shop-api","id":"1793677298-2188f1","status":"building","url":"https://shop-api.example.com"}
curl https://dash.example.com/api/v1/deploys/1793677298-2188f1 \
-H "Authorization: Bearer $SKIFF_TOKEN"Errors
Errors answer with a status code and a message, like {"error": "app not found"}. A bad or missing token answers 401. Another team's app answers 404, the same as one that doesn't exist.
On GitHub, the Action does this for you. To let an AI agent use Skiff, see AI agents.