Manage your Hostodo VPS instances, SSH keys, reverse DNS, orders, and account programmatically. The Customer API is a REST JSON API that mirrors everything you can do from the Hostodo Console.
# 1. Create a token in Hostodo Console Settings > Developer Access# 2. Call an endpoint with your bearer token:curl-H"Authorization: Bearer <your-token>" \
https://api.hostodo.com/client/instances/# 3. The API returns JSON
{ "count": 1, "results": [ { "hostname": "my-server", ... } ] }
Base URL
All Customer API endpoints live under /client/ and are served from the Hostodo API host:
Base URL:https://api.hostodo.com/client/
The Customer API is a Django REST Framework JSON API. Send Content-Type: application/json for requests with a body.
Pagination
List endpoints are paginated with the limit/offset style and return a JSON object with count, next, previous, and results keys. Pagination is controlled by query parameters (default limit is 25):
Query param
Type
Description
limit
integer
Number of results to return per page
offset
integer
Zero-based offset into the full result set
Path parameters
Colon-prefixed segments in a path are parameters that must be replaced with a resource identifier:
Param
Meaning
:pk / :id
Primary key of the resource (e.g. plan, template, ISO, region, order, SSH key)
:customer_id
Customer identifier
:instance_id
Instance identifier
Authentication
Authenticated endpoints accept Hostodo developer tokens using the standard bearer-token header. Create a token in Hostodo Console under Settings → Developer Access, copy it once, then send it with each API request:
The Hostodo Console can also authenticate browser requests with its session cookie, but bearer tokens are the recommended option for scripts, automations, and direct API clients. OAuth tokens issued for MCP are audience-restricted to the MCP endpoint and should not be used for the Customer API.
Most endpoints below require authentication. Public endpoints (signup, activation, forgot-password, plans, templates, ISOs, regions, and order pricing) can be called without a token.
Errors
Endpoints return standard HTTP status codes and DRF-style JSON errors:
Code
Meaning
200 / 201
Success
400
Invalid request or validation error
401 / 403
Missing, expired, or invalid session
404
Resource not found
429
Rate limit exceeded
Signup & Activation
Method
Path
Description
Auth
POST
/client/signup
Create a new customer account
No
GET
/client/signup/verify-email
Verify an email address during signup
No
POST
/client/activate
Activate an account
No
POST
/client/forgot-password
Request a password reset
No
Signup request body
Field
Type
Required
Description
email
string
Yes
Account email address
password
string
Yes
Account password
first_name
string
Yes
First name
last_name
string
Yes
Last name
Activate request body
Field
Type
Required
Description
user
integer
Yes
User ID from the activation email
confirmation_token
string
Yes
Confirmation token from the activation email
Forgot-password request body
Field
Type
Required
Description
username
string
Yes
Account email address to send the reset link to
Customer Profile
Method
Path
Description
Auth
GET
/client/customer
Get the authenticated customer's profile
Yes
PUT
/client/customer/:customer_id
Update the customer profile
Yes
PATCH
/client/customer/:customer_id
Partially update the customer profile
Yes
Customer update request body
Field
Type
Required
Description
company
string
No
Company name
street
string
Yes
Street address
street_line_two
string
No
Address line two
city
string
Yes
City
state
string
Yes
State / province
postal_code
string
Yes
Postal / ZIP code
country
string
Yes
Country
phone_number
string
No
Phone number
Password
Method
Path
Description
Auth
PATCH
/client/user/password
Change the authenticated user's password
Yes
Plans
Method
Path
Description
Auth
GET
/client/plans
List available plans
No
GET
/client/plans/:pk
Get a single plan
No
Templates
Method
Path
Description
Auth
GET
/client/templates
List available OS templates
No
GET
/client/templates/:pk
Get a single template
No
ISOs
Method
Path
Description
Auth
GET
/client/isos
List available ISOs
No
GET
/client/isos/:pk
Get a single ISO
No
Regions
Method
Path
Description
Auth
GET
/client/regions
List available regions (datacenters)
No
GET
/client/regions/:pk
Get a single region
No
List & Details
Instance paths take the instance ID in place of :instance_id.
Method
Path
Description
Auth
GET
/client/instances
List the authenticated user's instances
Yes
GET
/client/instances/:instance_id
Get a single instance
Yes
GET
/client/instances/:instance_id/power_status
Get the instance power status
Yes
GET
/client/instances/:instance_id/rrd
Get RRD (bandwidth) data
Yes
GET
/client/instances/:instance_id/events
Get the instance event log
Yes
Power & Actions
Method
Path
Description
Auth
POST
/client/instances/:instance_id/start
Start the instance
Yes
POST
/client/instances/:instance_id/stop
Stop the instance
Yes
POST
/client/instances/:instance_id/reboot
Reboot the instance
Yes
POST
/client/instances/:instance_id/reinstall
Reinstall the instance from a template
Yes
POST
/client/instances/:instance_id/reset_root
Reset the root password
Yes
POST
/client/instances/:instance_id/cancel
Request instance cancellation
Yes
PATCH
/client/instances/:instance_id/update_info
Update instance attributes (e.g. hostname)
Yes
GET
/client/instances/:instance_id/instance_settings
Get instance settings
Yes
PATCH
/client/instances/:instance_id/instance_settings
Update instance settings
Yes
POST
/client/instances/:instance_id/configure_vnc
Configure noVNC console access
Yes
POST
/client/instances/:instance_id/mount_iso
Mount an ISO
Yes
POST
/client/instances/:instance_id/unmount_iso
Unmount the ISO
Yes
Update-info request body
Field
Type
Required
Description
hostname
string
No
New hostname (max 64 chars)
autorenewal_enabled
boolean
No
Enable/disable autorenewal (requires a default payment method)
Instance-settings request body (PATCH)
Field
Type
Required
Description
machine_type
string
No
Change the machine type
boot_order
string
No
Change the boot order
Reinstall request body
Field
Type
Required
Description
template_id
integer
Yes
ID of an enabled template to reinstall with
ssh_key_id
integer
No
SSH key to install on the reinstalled instance
Cancel request body
Field
Type
Required
Description
cancellation_reason
string
Yes
Reason for cancellation (max 256 chars)
Network
Method
Path
Description
Auth
GET
/client/instances/:instance_id/network
Get instance networking
Yes
POST
/client/instances/:instance_id/ipv6
Add an IPv6 address
Yes
Orders
Method
Path
Description
Auth
GET
/client/orders
List the authenticated user's orders
Yes
GET
/client/orders/:pk
Get a single order
Yes
POST
/client/orders/price
Price an order without placing it
No
POST
/client/orders/deploy_instance
Deploy an instance from an order
Yes
Price-order request body
Field
Type
Required
Description
quantity
integer
No
Quantity (default 1, min 1, max 10)
region
string
No
Region name
template
string
No
Template
plan_id
string
No
Plan ID
billing_cycle
string
No
Billing cycle
promocode
string
No
Promo code
deploy_page_variant
string
No
Deploy page variant
Deploy-instance request body
Field
Type
Required
Description
hostname
string
Yes
Instance hostname (valid FQDN, max 253 chars)
quantity
integer
No
Quantity (default 1, min 1, max 10)
region
string
Yes
Region
template
string
Yes
Template
plan
string
Yes
Plan
billing_cycle
string
Yes
Billing cycle
payment_method
string
No
Payment method
payment_method_id
string
No
Saved payment method ID
promocode
string
No
Promo code
ssh_key
string
No
SSH key
deploy_page_variant
string
No
Deploy page variant
SSH Keys
Method
Path
Description
Auth
GET
/client/ssh-keys
List the user's SSH keys
Yes
POST
/client/ssh-keys
Add an SSH key
Yes
GET
/client/ssh-keys/:pk
Get a single SSH key
Yes
PUT
/client/ssh-keys/:pk
Update an SSH key
Yes
PATCH
/client/ssh-keys/:pk
Partially update an SSH key
Yes
DELETE
/client/ssh-keys/:pk
Delete an SSH key
Yes
Add / update SSH key request body
Field
Type
Required
Description
name
string
Yes
Key label
public_key
string
Yes
SSH public key (e.g. ssh-ed25519 AAAA...)
Reverse DNS
Method
Path
Description
Auth
GET
/client/rdns
List the user's reverse DNS records
Yes
POST
/client/rdns
Create a reverse DNS record
Yes
Create reverse DNS request body
Field
Type
Required
Description
ip
string
Yes
IP address the PTR record applies to
record_content
string
Yes
Reverse DNS hostname (PTR value)
All Endpoints
Complete list of Customer API endpoints. :pk, :customer_id, and :instance_id are path parameters identifying the resource.