HelipodDocs

Volumes

Persistent storage mounted into a service.

Files written to a volume survive deploys and restarts. Everything else in the container is reset on every deploy. Volume changes take effect on the next deploy.

List

GET/containers/services/{serviceId}/volumes
{ "success": true, "data": [ { "id": "7d8e…", "name": "uploads", "mountPath": "/app/uploads", "sizeMb": 5120, "usedMb": 312 } ] }

Add

POST/containers/services/{serviceId}/volumes
Storage is billed daily, the first 1 GB per service is free.

Prop

Type

curl -X POST https://api.helipod.io/api/containers/services/$SERVICE/volumes \
  -H "Authorization: Bearer hel_your_key" -H "Content-Type: application/json" \
  -d '{ "name": "uploads", "mountPath": "/app/uploads", "sizeGb": 5 }'

Returns 201 with { "volume": { ... }, "needsRedeploy": true }. Your plan's storage limit applies.

Resize

PATCH/containers/services/{serviceId}/volumes/{volumeId}charges your walletdryRun
Change the size of a volume. Applied on the next deploy.

Prop

Type

Send exactly one of sizeGb or sizeMb. A volume can't be made smaller than the space it already uses (409 VOLUME_TOO_SMALL). Check the cost first:

curl -X PATCH "https://api.helipod.io/api/containers/services/$SERVICE/volumes/$VOLUME?dryRun=true" \
  -H "Authorization: Bearer hel_your_key" -H "Content-Type: application/json" \
  -d '{ "sizeGb": 10 }'
{
  "success": true,
  "data": { "dryRun": true, "currency": "IDR", "currentSizeMb": 5120, "newSizeMb": 10240, "usedMb": 312, "currentDailyCost": 1250, "newDailyCost": 1625 }
}

Without dryRun the response is { "volume": { ... }, "needsRedeploy": true }. The new size is charged pro rata when the service is redeployed, and in full from the next daily renewal.

Delete

DELETE/containers/services/{serviceId}/volumes/{volumeId}
Removes the volume on the next deploy. Its data is lost.

On this page