Deployments
Deploy a service, follow its progress, read build logs and restart it.
A deployment builds the service (Git and Dockerfile sources; images skip this), rolls it out and waits until it is healthy. Settings, variables and volumes you changed since the last deploy take effect here.
Deploy
/containers/services/{serviceId}/deploymentscharges your walletdryRunIdempotency-KeyQueues a new deployment. Git services build the latest commit of their branch.
curl -X POST https://api.helipod.io/api/containers/services/$SERVICE/deployments \
-H "Authorization: Bearer hel_your_key" \
-H "Idempotency-Key: deploy-$(date +%s)"Returns 202 with { "deploymentId": "...", "status": "queued" }. If a deployment of this service is already running, you get 409 DEPLOY_IN_PROGRESS.
Billing: when the build starts, today's cost of the service is charged (minus what it already paid today) and refunded if the build fails. ?dryRun=true returns { dryRun, currency, dailyCost, note } without deploying.
Follow a deployment
/containers/services/{serviceId}/deployments/{deploymentId}/containers/services/{serviceId}/deployments?limit= 1 to 100 (default 20).{ "success": true, "data": { "id": "0c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f", "serviceId": "9a8b…", "status": "running", "createdAt": "2026-10-16T09:12:03.000Z" } }| status | Meaning |
|---|---|
pending | Queued, waiting for a builder |
running | Building or rolling out |
success | Live and healthy |
failed | Build, rollout or health check failed; the previous version keeps serving if there was one |
cancelled | Replaced by a newer deployment before it finished |
removed | An older deployment that was replaced by a newer successful one |
Poll every few seconds until the status is success, failed or cancelled. Builds usually take one to five minutes; image deploys are faster. A service with a health check is only success once the check passes.
Deploy logs
/containers/services/{serviceId}/deployments/{deploymentId}/logs{
"success": true,
"data": {
"deploymentId": "0c1d2e3f-…",
"logs": "🚁 Starting build\n#5 [2/4] RUN npm ci\n…\n✅ Live"
}
}The log holds the last 50,000 characters. For what the running app prints, use runtime logs.
Restart
/containers/services/{serviceId}/restartReturns 202 with { "id": "...", "status": "restarting" }. Only a running service can be restarted (409 NOT_RUNNING otherwise); deploy it instead.