HelipodDocs

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

POST/containers/services/{serviceId}/deploymentscharges your walletdryRunIdempotency-Key

Queues 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

GET/containers/services/{serviceId}/deployments/{deploymentId}
One deployment.
GET/containers/services/{serviceId}/deployments
The latest deployments, newest first. ?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" } }
statusMeaning
pendingQueued, waiting for a builder
runningBuilding or rolling out
successLive and healthy
failedBuild, rollout or health check failed; the previous version keeps serving if there was one
cancelledReplaced by a newer deployment before it finished
removedAn 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

GET/containers/services/{serviceId}/deployments/{deploymentId}/logs
The build and rollout log of one deployment.
{
  "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

POST/containers/services/{serviceId}/restart
Restarts the running containers without building again.

Returns 202 with { "id": "...", "status": "restarting" }. Only a running service can be restarted (409 NOT_RUNNING otherwise); deploy it instead.

On this page