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}/volumesStorage 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 walletdryRunChange 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.