DevelopersREST API

REST API

The Hostwolf Apps API is plain HTTPS and JSON. Everything the SDK and the MCP server do goes through these endpoints. The OpenAPI 3.1 description has every field, for code generators and tools such as Postman.

Base URL#

https://console.app.hostwolf.net/api/v1

All paths below are relative to it. GET /health and GET /version need no token.

Authentication#

Send an API token in the Authorization header, and ask for JSON:

curl https://console.app.hostwolf.net/api/v1/team \
  -H "Authorization: Bearer 12|your_token" \
  -H "Accept: application/json"

A token acts for the team it was created in, with the permissions you ticked: Read, Read sensitive data, Write, Deploy or Root. Request bodies are JSON (Content-Type: application/json). Resources are addressed by their uuid.

Errors#

Errors are always JSON with a message, and validation errors list the fields:

{"message": "Validation failed.", "errors": {"ports_exposes": ["The ports exposes field is required."]}}
StatusMeaning
400Malformed request, or the action can't run now (e.g. logs of a stopped app).
401Missing, wrong, expired or revoked token.
403The token lacks a permission, your team role is too low, or the endpoint isn't available on Hostwolf (the answer has a docs link).
404Not found, or it belongs to another team.
409Conflict: the key already exists, or the resource isn't ready.
422Validation error; see errors.
429Rate limited; wait for Retry-After seconds.
503A Hostwolf service is briefly unavailable. Nothing was changed; try again.

Send Accept-Language: de, fr, es or fi to get messages in that language.

Changes that cost money#

Calls that raise the bill need "confirm": true in the body: adding or enlarging a storage volume, turning its backups on or setting auto-grow, attaching a volume that is not billed, restoring into a new volume, and upgrading a database plan. Without it nothing changes, and the answer is a 422 with the price:

{"message": "A 50 GB volume costs $6.19/month, billed hourly, plus its backups per GB stored. Send \"confirm\": true to go ahead.",
 "confirm_required": true, "quote": {"size_gb": 50, "monthly_price": 6.19, "hourly_price": 0.0085, "currency": "USD"}}

Show the price, then send the same call with "confirm": true. The SDK throws a HostwolfAppsError with code confirm_required and the price in error.quote; the MCP tools hand the message to the assistant. Restoring a backup over a volume's files needs confirm too.

Some upstream endpoints don't apply on Hostwolf, because Hostwolf runs the servers for you: adding, validating, importing or deleting servers, cloud provider tokens and instance settings. They answer 403 with a message and a docs link, and aren't listed below. Buy and cancel servers in the console under Servers & Billing.

Rate limits#

  • 200 requests a minute per user. Every answer carries X-RateLimit-Limit and X-RateLimit-Remaining.
  • Managed database actions: 10 a minute. Storage volume changes: 10 a minute, shared with the console.
  • Over the limit you get 429 with Retry-After (seconds). The SDK waits out short limits for you.
  • The hosted MCP server allows 300 requests a minute per address and 180 per token.

Pagination#

Most lists return everything at once. The exceptions:

  • GET /deployments/applications/{uuid} takes skip and take (default 10) and returns {count, deployments}.
  • GET /audit-events takes page and per_page and returns {data, current_page, last_page, per_page, total}.

The SDK wraps both in async iterators (allForApplication, allAuditEvents).

Endpoints#

HW marks endpoints that only exist on Hostwolf Apps. Type in the box to filter, or press /.

278 endpoints

Projects#

MethodPathBody / queryWhat it does
GET/projectsList projects.
POST/projects+2 optionalCreate Project.
GET/projects/{uuid}Get project by UUID.
PATCH/projects/{uuid}+2 optionalUpdate Project.
DELETE/projects/{uuid}Delete project by UUID.
GET/projects/{uuid}/environmentsList all environments in a project.
POST/projects/{uuid}/environments+1 optionalCreate environment in project.
PATCH/projects/{uuid}/environments/{environment_name_or_uuid}+2 optionalUpdate environment by name or UUID within a project.
DELETE/projects/{uuid}/environments/{environment_name_or_uuid}Delete environment by name or UUID.
GET/projects/{uuid}/{environment_name_or_uuid}Get environment by name or UUID.

Applications#

MethodPathBody / queryWhat it does
GET/applications?tagList all applications.
POST/applications/dockerfileproject_uuid, server_uuid, dockerfile, +80 optionalCreate new application based on a simple Dockerfile (without git).
POST/applications/dockerimageproject_uuid, server_uuid, docker_registry_image_name, +77 optionalCreate new application based on a prebuilt docker image (without git).
POST/applications/private-deploy-keyproject_uuid, server_uuid, private_key_uuid, git_repository, git_branch, build_pack, +96 optionalCreate new application based on a private repository through a Deploy Key.
POST/applications/private-github-appproject_uuid, server_uuid, github_app_uuid, git_repository, git_branch, build_pack, +96 optionalCreate new application based on a private repository through a Github App.
POST/applications/publicproject_uuid, server_uuid, git_repository, git_branch, build_pack, +96 optionalCreate new application based on a public git repository.
GET/applications/{uuid}Get application by UUID.
PATCH/applications/{uuid}+95 optionalUpdate application by UUID.
DELETE/applications/{uuid}?delete_configurations, ?delete_volumes, ?docker_cleanup, ?delete_connected_networksDelete application by UUID.
POST/applications/{uuid}/clonedestination_uuid, +2 optionalClone an application to a destination owned by the authenticated team.
GET/applications/{uuid}/destinationsList primary and additional destinations for a standalone application.
POST/applications/{uuid}/destinationsdestination_uuidAttach an additional standalone Docker destination to an application.
DELETE/applications/{uuid}/destinations/{destination_uuid}Detach an additional destination from an application.
GET/applications/{uuid}/envsList all envs by application UUID.
POST/applications/{uuid}/envs+6 optionalCreate env by application UUID.
PATCH/applications/{uuid}/envskey, value, +4 optionalUpdate env by application UUID.
PATCH/applications/{uuid}/envs/bulkdataUpdate multiple envs by application UUID.
DELETE/applications/{uuid}/envs/{env_uuid}Delete env by UUID.
GET/applications/{uuid}/logs?lines, ?show_timestamps, ?service_nameGet application logs by UUID.
GET/applications/{uuid}/metrics?minutesRead Sentinel history. HW
POST/applications/{uuid}/migratedestination_uuid, +1 optionalMigrate an application to another destination/server owned by the authenticated team.
POST/applications/{uuid}/moveenvironment_uuidMove application to another project/environment.
GET/applications/{uuid}/previewsList the preview deployments of an application, newest pull request first.
POST/applications/{uuid}/previewspull_request_id, +6 optionalOpen a preview deployment for a pull request and queue its deployment.
GET/applications/{uuid}/previews/{pull_request_id}Get a preview deployment by pull request ID.
PATCH/applications/{uuid}/previews/{pull_request_id}+3 optionalReplace domains for a preview deployment.
DELETE/applications/{uuid}/previews/{pull_request_id}Delete a preview deployment for a pull request.
GET/applications/{uuid}/previews/{pull_request_id}/logs?lines, ?show_timestamps, ?service_nameGet runtime container logs for a preview deployment by application UUID and pull request ID.
POST/applications/{uuid}/restartRestart application.
POST/applications/{uuid}/rollbackcommitQueue a rollback deployment for an application to a previous image commit/tag.
GET/applications/{uuid}/rollback-imagesList available Docker images for rolling back an application.
POST/applications/{uuid}/start?force, ?instant_deployStart application.
POST/applications/{uuid}/stop?docker_cleanupStop application.
GET/applications/{uuid}/storagesList all persistent storages and file storages by application UUID.
POST/applications/{uuid}/storagestype, mount_path, +4 optionalCreate a persistent storage or file storage for an application.
PATCH/applications/{uuid}/storagestype, +6 optionalUpdate a persistent storage or file storage by application UUID.
DELETE/applications/{uuid}/storages/{storage_uuid}Delete a persistent storage or file storage by application UUID.
PUT/applications/{uuid}/storages/{storage_uuid}/backupsfrequency, +12 optionalCreate or replace the backup schedule for an application persistent volume or directory storage.
DELETE/applications/{uuid}/storages/{storage_uuid}/backupsDelete the backup schedule and its local and S3 archives for an application storage.
POST/applications/{uuid}/storages/{storage_uuid}/backups/runQueue an immediate volume backup for an application storage that has a schedule.
GET/applications/{uuid}/tagsList tags for an application by UUID.
POST/applications/{uuid}/tags+2 optionalAdd tag(s) to an application by UUID.
DELETE/applications/{uuid}/tags/{tag_uuid}Remove a tag from an application by UUID.

Deployments#

MethodPathBody / queryWhat it does
POST/deploy?tag, ?uuid, ?force, ?pr, …Deploy by tag or UUID using query parameters or a JSON body.
GET/deploymentsList currently running deployments
GET/deployments/applications/{uuid}?skip, ?takeList application deployments by using the app uuid
GET/deployments/{uuid}Get deployment by UUID.
POST/deployments/{uuid}/cancelCancel a deployment by UUID.

Purchased servers HW#

Servers your team bought. Buying and cancelling happen in the console, so these are read-only.

MethodPathBody / queryWhat it does
GET/hostwolf/regions?sizeThe cities Hostwolf sells servers in, with the monthly price of each server size (the same catalog as the pricing page).
POST/servers/{uuid}/resizesize, confirmChange the size of a purchased app server or VPS in place, keeping its location and IP.
GET/hostwolf/serversApp servers and VPS your team bought, with their size, city, status and monthly price.
GET/hostwolf/servers/{uuid}One purchased app server or VPS by its uuid.
GET/hostwolf/servers/{uuid}/traffic?monthOutbound (egress) traffic of a purchased server in a calendar month (UTC), and what it costs so far: 1 TB a month is included, then each whole GB costs price_per_gb.
GET/hostwolf/traffic?monthOutbound traffic of every server of your team in a calendar month (UTC), deleted servers included, with the total bill so far.

Managed databases HW#

PostgreSQL, MariaDB and Redis on Hostwolf database servers. See the databases guide.

MethodPathBody / queryWhat it does
GET/managed-databasesYour team's managed databases with their current status.
POST/managed-databasesengine, plan, region, +1 optionalCreates a managed database.
GET/managed-databases/catalogEngines, plans with their limits, and regions with the monthly and hourly price of each plan.
GET/managed-databases/{uuid}Get a managed database
PATCH/managed-databases/{uuid}eviction_policyRedis: change the eviction policy (applied live, no restart).
DELETE/managed-databases/{uuid}Deletes the database and stops its billing.
POST/managed-databases/{uuid}/attachapplication_uuid, +2 optionalSaves the pooled connection URL on an application as DATABASE_URL and the direct one as DATABASE_DIRECT_URL (Redis: REDIS_URL only): runtime only, encrypted, shown once…
POST/managed-databases/{uuid}/backupsStarts an extra backup now.
GET/managed-databases/{uuid}/connectionThe connection URLs with the password, TLS required.
POST/managed-databases/{uuid}/upgradeplan, +1 optionalMoves the database to a bigger plan from its upgrades list.

Autoscaling HW#

Per-app autoscaling. See the scaling guide.

MethodPathBody / queryWhat it does
GET/applications/{uuid}/autoscalingThe application's autoscaling policy, whether it can be turned on (and why not), and the live status: copies, CPU and this month's autoscaling spend.
PUT/applications/{uuid}/autoscaling+10 optionalTurns autoscaling on or off and changes its settings.

Servers#

Your app servers. Adding, validating and deleting servers is done by Hostwolf; those calls answer 403 with a docs link.

MethodPathBody / queryWhat it does
GET/serversList all servers.
GET/servers/{uuid}Get server by UUID.
PATCH/servers/{uuid}+17 optionalUpdate Server.
GET/servers/{uuid}/cloudflare-tunnelGet Cloudflare Tunnel settings for a server owned by the authenticated team.
PATCH/servers/{uuid}/cloudflare-tunnel+1 optionalUpdate stored Cloudflare Tunnel settings for a server.
POST/servers/{uuid}/cloudflare-tunnel/disableMark Cloudflare Tunnel as disabled and restore ip_previous when available.
POST/servers/{uuid}/cloudflare-tunnel/enableManually mark Cloudflare Tunnel as enabled for a server (matches UI manual enable).
GET/servers/{uuid}/docker-cleanupGet Docker cleanup settings for a server owned by the authenticated team.
PATCH/servers/{uuid}/docker-cleanup+6 optionalUpdate Docker cleanup settings for a server owned by the authenticated team.
GET/servers/{uuid}/docker-cleanup/executionsList recent Docker cleanup execution logs for a server owned by the authenticated team.
POST/servers/{uuid}/docker-cleanup/run+2 optionalDispatch a manual Docker cleanup job for a server owned by the authenticated team.
GET/servers/{uuid}/domainsGet domains by server.
GET/servers/{uuid}/log-drainsGet log drain settings for a server owned by the authenticated team.
PATCH/servers/{uuid}/log-drains+9 optionalUpdate New Relic, Axiom, or custom log drain settings for a server owned by the authenticated team.
GET/servers/{uuid}/metrics?minutesRead Sentinel history. HW
GET/servers/{uuid}/proxyGet proxy settings for a server owned by the authenticated team.
PATCH/servers/{uuid}/proxy+4 optionalUpdate proxy redirect settings, exact labels generation, and optionally the proxy type for a team-owned server.
PUT/servers/{uuid}/proxy/configurationconfigurationSave the raw proxy Docker Compose configuration for a team-owned server.
POST/servers/{uuid}/proxy/restartQueue a proxy restart for a team-owned server.
GET/servers/{uuid}/registriesList the Docker registries a server is logged in to and the registries its resources pull from or push to.
POST/servers/{uuid}/registriesregistry, username, passwordRun docker login on the server, writing to the Docker config that deployments use.
DELETE/servers/{uuid}/registries/{registry}Run docker logout on the server for a registry.
POST/servers/{uuid}/registries/{registry}/checkCheck that the saved login of the server for a registry still works.
GET/servers/{uuid}/resourcesGet resources by server.
GET/servers/{uuid}/sentinelGet Sentinel settings for a server owned by the authenticated team.
PATCH/servers/{uuid}/sentinel+14 optionalUpdate Sentinel settings for a server owned by the authenticated team.

Shared variables#

MethodPathBody / queryWhat it does
GET/projects/{uuid}/environments/{environment_name_or_uuid}/envsList shared environment variables for a project environment (type=environment).
POST/projects/{uuid}/environments/{environment_name_or_uuid}/envsCreate a shared environment variable for a project environment (type=environment).
PATCH/projects/{uuid}/environments/{environment_name_or_uuid}/envs/{env_id}Update an environment shared environment variable by id.
DELETE/projects/{uuid}/environments/{environment_name_or_uuid}/envs/{env_id}Delete an environment shared environment variable by id.
GET/projects/{uuid}/envsList shared environment variables for a project (type=project).
POST/projects/{uuid}/envsCreate a shared environment variable for a project (type=project).
PATCH/projects/{uuid}/envs/{env_id}Update a project shared environment variable by id.
DELETE/projects/{uuid}/envs/{env_id}Delete a project shared environment variable by id.
GET/servers/{uuid}/envsList shared environment variables for a server (type=server).
POST/servers/{uuid}/envsCreate a shared environment variable for a server (type=server).
PATCH/servers/{uuid}/envs/{env_id}Update a server shared environment variable by id.
DELETE/servers/{uuid}/envs/{env_id}Delete a server shared environment variable by id.
GET/team/envsList shared environment variables for the current team (type=team).
POST/team/envskey, +5 optionalCreate a shared environment variable for the current team (type=team).
PATCH/team/envs/{env_id}Update a team shared environment variable by id.
DELETE/team/envs/{env_id}Delete a team shared environment variable by id.

Teams#

MethodPathBody / queryWhat it does
GET/teamGet the team bound to the API token.
PATCH/teamis_build_server_fallback_enabledUpdate settings for the team bound to the API token.
GET/team/membersGet members of the team bound to the API token.
GET/teamsGet all teams.
GET/teams/{id}Get team by TeamId.
GET/teams/{id}/membersGet members by TeamId.

Audit log#

MethodPathBody / queryWhat it does
GET/audit-events?per_page, ?page, ?search, ?action, …List audit events of the team.

Destinations#

MethodPathBody / queryWhat it does
GET/destinationsList all Docker network destinations for the authenticated team.
GET/destinations/{uuid}Get a Docker network destination by UUID.
PATCH/destinations/{uuid}+1 optionalUpdate a Docker network destination name.
DELETE/destinations/{uuid}Delete an unused Docker network destination.
GET/servers/{server_uuid}/destinationsList Docker network destinations attached to a server owned by the authenticated team.
POST/servers/{server_uuid}/destinationsnetwork, +2 optionalCreate a Docker network destination on a server owned by the authenticated team.

Scheduled tasks#

MethodPathBody / queryWhat it does
GET/applications/{uuid}/scheduled-tasksList all scheduled tasks for an application.
POST/applications/{uuid}/scheduled-tasksname, command, frequency, +3 optionalCreate a new scheduled task for an application.
PATCH/applications/{uuid}/scheduled-tasks/{task_uuid}+6 optionalUpdate a scheduled task for an application.
DELETE/applications/{uuid}/scheduled-tasks/{task_uuid}Delete a scheduled task for an application.
POST/applications/{uuid}/scheduled-tasks/{task_uuid}/executeQueue immediate execution of a scheduled task for an application.
GET/applications/{uuid}/scheduled-tasks/{task_uuid}/executionsList all executions for a scheduled task on an application.
GET/services/{uuid}/scheduled-tasksList all scheduled tasks for a service.
POST/services/{uuid}/scheduled-tasksname, command, frequency, +3 optionalCreate a new scheduled task for a service.
PATCH/services/{uuid}/scheduled-tasks/{task_uuid}+6 optionalUpdate a scheduled task for a service.
DELETE/services/{uuid}/scheduled-tasks/{task_uuid}Delete a scheduled task for a service.
POST/services/{uuid}/scheduled-tasks/{task_uuid}/executeQueue immediate execution of a scheduled task for a service.
GET/services/{uuid}/scheduled-tasks/{task_uuid}/executionsList all executions for a scheduled task on a service.

Tags#

MethodPathBody / queryWhat it does
GET/tagsList all tags for the current team.
POST/tagsnameCreate a tag for the current team.
PATCH/tags/{uuid}nameUpdate a tag name for the current team.
DELETE/tags/{uuid}Delete a tag for the current team.

Resources#

MethodPathBody / queryWhat it does
GET/resourcesGet all resources.

Secret managers#

MethodPathBody / queryWhat it does
PATCH/applications/{uuid}/secret-managerintegration_token_uuid, +1 optionalConfigure the secret manager source used by an application.
POST/security/integration-tokensprovider, name, token, +1 optionalCreate and validate a Doppler, Infisical, or Vault integration token.

Cloud-init scripts#

MethodPathBody / queryWhat it does
GET/cloud-init-scriptsList all cloud-init scripts for the authenticated team.
POST/cloud-init-scriptsname, scriptCreate a new cloud-init script for the authenticated team.
GET/cloud-init-scripts/{uuid}Get a cloud-init script by UUID.
PATCH/cloud-init-scripts/{uuid}+2 optionalUpdate a cloud-init script by UUID.
DELETE/cloud-init-scripts/{uuid}Delete a cloud-init script by UUID.

Databases (legacy)#

Databases created on app servers before managed databases existed. New databases are managed databases.

MethodPathBody / queryWhat it does
GET/databasesList all databases.
GET/databases/{uuid}Get database by UUID.
PATCH/databases/{uuid}+46 optionalUpdate database by UUID.
DELETE/databases/{uuid}?delete_configurations, ?delete_volumes, ?docker_cleanup, ?delete_connected_networksDelete database by UUID.
GET/databases/{uuid}/backupsGet backups details by database UUID.
POST/databases/{uuid}/backupsfrequency, +14 optionalCreate a new scheduled backup configuration for a database
PATCH/databases/{uuid}/backups/{scheduled_backup_uuid}+15 optionalUpdate a specific backup configuration for a given database, identified by its UUID and the backup ID
DELETE/databases/{uuid}/backups/{scheduled_backup_uuid}?delete_s3Deletes a backup configuration and all its executions.
GET/databases/{uuid}/backups/{scheduled_backup_uuid}/executionsGet all executions for a specific backup configuration.
DELETE/databases/{uuid}/backups/{scheduled_backup_uuid}/executions/{execution_uuid}?delete_s3Deletes a specific backup execution.
GET/databases/{uuid}/envsList all envs by database UUID.
POST/databases/{uuid}/envs+5 optionalCreate env by database UUID.
PATCH/databases/{uuid}/envskey, value, +3 optionalUpdate env by database UUID.
PATCH/databases/{uuid}/envs/bulkdataUpdate multiple envs by database UUID.
DELETE/databases/{uuid}/envs/{env_uuid}Delete env by UUID.
GET/databases/{uuid}/logs?lines, ?show_timestampsGet database logs by UUID.
POST/databases/{uuid}/restartRestart database.
POST/databases/{uuid}/startStart database.
POST/databases/{uuid}/stop?docker_cleanupStop database.
GET/databases/{uuid}/storagesList all persistent storages and file storages by database UUID.
POST/databases/{uuid}/storagestype, mount_path, +4 optionalCreate a persistent storage or file storage for a database.
PATCH/databases/{uuid}/storagestype, +6 optionalUpdate a persistent storage or file storage by database UUID.
DELETE/databases/{uuid}/storages/{storage_uuid}Delete a persistent storage or file storage by database UUID.
PUT/databases/{uuid}/storages/{storage_uuid}/backupsfrequency, +12 optionalCreate or replace the backup schedule for a database persistent volume or directory storage.
DELETE/databases/{uuid}/storages/{storage_uuid}/backupsDelete the backup schedule and its local and S3 archives for a database storage.
POST/databases/{uuid}/storages/{storage_uuid}/backups/runQueue an immediate volume backup for a database storage that has a schedule.
GET/databases/{uuid}/tagsList tags for a database by UUID.
POST/databases/{uuid}/tags+2 optionalAdd tag(s) to a database by UUID.
DELETE/databases/{uuid}/tags/{tag_uuid}Remove a tag from a database by UUID.

GitHub Apps#

MethodPathBody / queryWhat it does
GET/github-appsList all GitHub apps.
POST/github-appsname, html_url, app_id, installation_id, client_id, client_secret, private_key_uuid, +6 optionalCreate a new GitHub app.
PATCH/github-apps/{github_app_id}+13 optionalUpdate an existing GitHub app.
DELETE/github-apps/{github_app_id}Delete a GitHub app if it's not being used by any applications.
GET/github-apps/{github_app_id}/repositoriesFetch repositories from GitHub for a given GitHub app.
GET/github-apps/{github_app_id}/repositories/{owner}/{repo}/branchesFetch branches from GitHub for a given repository.

GitLab Apps#

MethodPathBody / queryWhat it does
GET/gitlab-appsList all GitLab apps for the current team (and system-wide sources).
POST/gitlab-appsname, html_url, +9 optionalCreate a new GitLab app (OAuth source).
PATCH/gitlab-apps/{gitlab_app_id}+11 optionalUpdate an existing GitLab app.
DELETE/gitlab-apps/{gitlab_app_id}Delete a GitLab app if it is not being used by any applications.

Storage volumes#

MethodPathBody / queryWhat it does
GET/hostwolf/servers/{uuid}/volumesThe storage volumes of one of your purchased servers (including volumes you detached from it), with size, use, backups and price.
POST/hostwolf/servers/{uuid}/volumessize_gb, +3 optionalAdds a block storage volume (10-1000 GB) to an app server or VPS, mounted at /mnt/volume- in about a minute.
GET/hostwolf/servers/{uuid}/volumes/offer?size_gbWhether volumes can be added to this server, the sizes allowed in its city, and the price of a size (size_gb), with or without backups.
GET/hostwolf/servers/{uuid}/volumes/{volume}Get a volume
PATCH/hostwolf/servers/{uuid}/volumes/{volume}+4 optionalEnlarge it (size_gb; volumes never shrink), turn nightly backups on or off, or set the auto-grow limit.
DELETE/hostwolf/servers/{uuid}/volumes/{volume}Unmounts and deletes the volume and its files.
POST/hostwolf/servers/{uuid}/volumes/{volume}/backupsStarts a backup now, in addition to the nightly one.
POST/hostwolf/servers/{uuid}/volumes/{volume}/detachUnmounts the volume and detaches it from the server.
POST/hostwolf/servers/{uuid}/volumes/{volume}/restorebackup_id, target, +1 optionalRestores a backup into the volume itself (target: same: files written after the backup are removed, the volume is unavailable meanwhile) or into a new volume of the same size…
GET/hostwolf/volumes?statusEvery volume of your team: attached ones, ones you detached, and the volumes of deleted servers that are kept for 7 days (kept_until).
GET/hostwolf/volumes/{volume}One volume by id, attached or detached.
DELETE/hostwolf/volumes/{volume}Deletes a detached volume and its files now (instead of at the end of the 7 days).
POST/hostwolf/volumes/{volume}/attachserver_uuid, +1 optionalAttaches a detached volume (one you detached, or one kept after its server was deleted) to one of your ready servers in the same city, mounted at the same path in about a minute.
GET/hostwolf/volumes/{volume}/backupsBackups that can be restored, newest first (nightly, kept 7 days).
POST/hostwolf/volumes/{volume}/restorebackup_id, server_uuid, +1 optionalRestores a backup of a detached volume into a new volume on one of your servers in the same city (billed like any volume, so "confirm": true is needed).

Notifications#

MethodPathBody / queryWhat it does
GET/notifications/discordGet the current team Discord notification settings.
PATCH/notifications/discordUpdate the current team Discord notification settings.
GET/notifications/emailGet the current team email notification settings, including smtp_ehlo_domain, the hostname sent with SMTP EHLO.
PATCH/notifications/emailUpdate the current team email notification settings.
GET/notifications/pushoverGet the current team Pushover notification settings.
PATCH/notifications/pushoverUpdate the current team Pushover notification settings.
GET/notifications/slackGet the current team Slack notification settings.
PATCH/notifications/slackUpdate the current team Slack notification settings.
GET/notifications/telegramGet the current team Telegram notification settings.
PATCH/notifications/telegramUpdate the current team Telegram notification settings.
GET/notifications/webhookGet the current team webhook notification settings.
PATCH/notifications/webhookUpdate the current team webhook notification settings.

S3 storages#

MethodPathBody / queryWhat it does
GET/s3-storagesList all S3 storages for the authenticated team.
POST/s3-storagesname, endpoint, bucket, region, key, secret, +2 optionalCreate a new S3 storage configuration for the authenticated team.
GET/s3-storages/{uuid}Get S3 storage by UUID.
PATCH/s3-storages/{uuid}+8 optionalUpdate S3 storage by UUID.
DELETE/s3-storages/{uuid}Delete S3 storage by UUID.
POST/s3-storages/{uuid}/validateValidate an S3 storage connection using ListObjectsV2.

Deploy keys#

MethodPathBody / queryWhat it does
GET/security/keysList all private keys.
POST/security/keysprivate_key, +2 optionalCreate a new private key.
GET/security/keys/{uuid}Get key by UUID.
PATCH/security/keys/{uuid}private_key, +2 optionalUpdate a private key.
DELETE/security/keys/{uuid}Delete a private key.

Service containers#

MethodPathBody / queryWhat it does
GET/services/{uuid}/applicationsList compose service applications (containers) for a single service.
GET/services/{uuid}/applications/{app_uuid}Get a single compose service application by service UUID and application UUID.
PATCH/services/{uuid}/applications/{app_uuid}+11 optional, ?force_domain_overrideUpdate fields for a compose service application.
GET/services/{uuid}/applications/{app_uuid}/logs?linesGet Docker logs for a single compose service container.
POST/services/{uuid}/applications/{app_uuid}/logs?linesGet Docker logs for a single compose service container.
POST/services/{uuid}/applications/{app_uuid}/restartRestarts a single compose service container.
POST/services/{uuid}/applications/{app_uuid}/start?force, ?latestRuns docker compose up for a single compose service (no-deps), optionally pulling the image and rebuilding.
POST/services/{uuid}/applications/{app_uuid}/stopStops a single compose service container.

Service databases#

MethodPathBody / queryWhat it does
GET/services/{uuid}/databasesList compose databases for a single service.
GET/services/{uuid}/databases/{database_uuid}Get a compose database by service UUID and database UUID.
PATCH/services/{uuid}/databases/{database_uuid}+8 optionalUpdate mutable fields for a compose service database.
POST/services/{uuid}/databases/{database_uuid}/importsImport service database backup
POST/services/{uuid}/databases/{database_uuid}/imports/uploadsUpload service database import
GET/services/{uuid}/databases/{database_uuid}/imports/{activity_id}Get service database import status
GET/services/{uuid}/databases/{database_uuid}/logs?linesGet Docker logs for a compose database container.
POST/services/{uuid}/databases/{database_uuid}/restartRestart a compose database container.
POST/services/{uuid}/databases/{database_uuid}/start?force, ?latestRun docker compose up for a single compose database.
POST/services/{uuid}/databases/{database_uuid}/stopStop a compose database container.

Services#

One-click services (Docker Compose templates) on your app servers.

MethodPathBody / queryWhat it does
GET/servicesList all services.
POST/servicesserver_uuid, project_uuid, +12 optionalCreate a one-click / custom service
GET/services/{uuid}Get service by UUID.
PATCH/services/{uuid}+8 optionalUpdate service by UUID.
DELETE/services/{uuid}?delete_configurations, ?delete_volumes, ?docker_cleanup, ?delete_connected_networks, …Delete service by UUID.
POST/services/{uuid}/clonedestination_uuid, +2 optionalClone a service to a destination owned by the authenticated team.
GET/services/{uuid}/envsList all envs by service UUID.
POST/services/{uuid}/envs+6 optionalCreate env by service UUID.
PATCH/services/{uuid}/envskey, value, +4 optionalUpdate env by service UUID.
PATCH/services/{uuid}/envs/bulkdataUpdate multiple envs by service UUID.
DELETE/services/{uuid}/envs/{env_uuid}Delete env by UUID.
GET/services/{uuid}/logs?sub_service_name, ?lines, ?show_timestampsGet logs for a specific service sub-resource by service UUID.
POST/services/{uuid}/migratedestination_uuid, +1 optionalMigrate a service to another destination/server owned by the authenticated team.
POST/services/{uuid}/moveenvironment_uuidMove service to another project/environment.
POST/services/{uuid}/restart?latestRestart service.
POST/services/{uuid}/startStart service.
POST/services/{uuid}/stop?docker_cleanupStop service.
GET/services/{uuid}/storagesList all persistent storages and file storages by service UUID.
POST/services/{uuid}/storagestype, mount_path, resource_uuid, +4 optionalCreate a persistent storage or file storage for a service sub-resource.
PATCH/services/{uuid}/storagestype, +6 optionalUpdate a persistent storage or file storage by service UUID.
DELETE/services/{uuid}/storages/{storage_uuid}Delete a persistent storage or file storage by service UUID.
PUT/services/{uuid}/storages/{storage_uuid}/backupsfrequency, +12 optionalCreate or replace the backup schedule for a service persistent volume or directory storage.
DELETE/services/{uuid}/storages/{storage_uuid}/backupsDelete the backup schedule and its local and S3 archives for a service storage.
POST/services/{uuid}/storages/{storage_uuid}/backups/runQueue an immediate volume backup for a service storage that has a schedule.
GET/services/{uuid}/tagsList tags for a service by UUID.
POST/services/{uuid}/tags+2 optionalAdd tag(s) to a service by UUID.
DELETE/services/{uuid}/tags/{tag_uuid}Remove a tag from a service by UUID.

Health and version#

MethodPathBody / queryWhat it does
GET/healthHealthcheck endpoint.
GET/versionGet Hostwolf version.

Server upgrades#

Quote a larger size with POST /servers/{uuid}/resize and {"size":"m"}. The uuid is a purchased app server or VPS uuid; app servers also accept their server uuid. A quote returns 200 with the new monthly price, the price difference, the downtime estimate and the disk note. No server changes yet.

Confirm with {"size":"m","confirm":true} and an Idempotency-Key header. Save one UUID for this confirmation and reuse it on retries. The response is 202 with the operation id. An unavailable size or a busy server returns 409; another team's server returns 404.

The server keeps its location, IP, attached volumes and app registration. Its status is resizing until the upgrade and billing update finish. The new price starts at completion; the prorated adjustment appears on the next invoice.

In SDK 0.2.2, call servers.resize(uuid, 'm') to quote, then pass {confirm:true, idempotencyKey:key} to confirm. The MCP tool is resize_server. This patch is not published yet.

Stuck, or missing an endpoint? Tell us at app.hostwolf.net/contact or [email protected].