JSON · v1

Ultahost Client API

Programmatic access to your Ultahost account — manage services, billing, domains, and contacts directly from your own apps and automations. One JSON endpoint, authenticated POST requests, with an action field per operation.

Try the API
Paste your API key — it stays in your browser. Then use Try it on any endpoint.
Getting started

Overview & Authentication

All requests are issued as POST against the single base endpoint below. Authenticate by including your API key in the x-api-key header.

POSThttps://bill.ultahost.com/client-api/v1
Required headers
Content-Type
application/json
x-api-key
[API_KEY]
  • Always send requests over HTTPS.
  • Keep your API key out of client-side code and source control.
  • Rotate keys regularly from the dashboard.
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"get_profile"}'
GET

Get Client Profile

Retrieves the complete profile data of the authenticated client.

Parameters
actionrequired
string
Must be set to get_profile.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_profile" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Profile retrieved successfully",
  "data": {
    "id": 5,
    "uuid": "3f780121-c5ba-4573-ae4b-01483cff101a",
    "firstname": "John",
    "lastname": "Doe",
    "companyname": "Acme Inc.",
    "email": "john.doe@example.com",
    "address1": "123 Main Street",
    "address2": "",
    "city": "New York",
    "state": "NY",
    "postcode": "10001",
    "country": "US",
    "phonenumber": "+1.5555550123",
    "tax_id": "",
    "currency": 1,
    "credit": "150.00",
    "taxexempt": 0,
    "status": "Active",
    "language": "english",
    "created_at": "2026-03-02 11:08:00",
    "updated_at": "2026-05-08 08:01:04",
    "currency_code": "USD"
  }
}
GET

Get Client Services

Retrieves a paginated list of all services associated with the client. Supports status filtering and sorting.

Parameters
actionrequired
string
Must be set to get_services.
limit
integer
Maximum records to return. Default: 10.
offset
integer
Starting point for pagination. Default: 0.
status
string
Filter by status: Pending, Active, Suspended, Terminated, Cancelled, Fraud, Completed.
sort
string
Sort: DESC_id, ASC_id, DESC_price, ASC_price, DESC_duedate, ASC_duedate.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_services&limit=10&offset=0&status=Active" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Services retrieved successfully",
  "meta": { "total_records": 2, "limit": 10, "current_offset": 0, "has_more": false, "next_offset": null, "prev_offset": null, "total_pages": 1 },
  "data": [
    {
      "id": 134,
      "product_name": "Basic Windows VPS",
      "domain": "",
      "amount": "19.99",
      "billingcycle": "Monthly",
      "nextduedate": "2026-06-06",
      "nextinvoicedate": "2026-06-06",
      "status": "Pending",
      "regdate": "2026-05-06"
    },
    {
      "id": 125,
      "product_name": "Linux VPS Basic",
      "domain": "example.com",
      "amount": "19.99",
      "billingcycle": "Monthly",
      "nextduedate": "2026-06-04",
      "nextinvoicedate": "2026-06-04",
      "status": "Active",
      "regdate": "2026-05-04"
    }
  ]
}
GET

Get Service Details

Retrieves detailed information regarding a single specific service owned by the client.

Parameters
actionrequired
string
Must be set to get_service.
serviceidrequired
integer
The unique integer ID of the service to fetch.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_service&serviceid=130" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Service retrieved successfully",
  "data": {
    "id": 130,
    "product_name": "Basic Windows VPS",
    "domain": "",
    "amount": "19.99",
    "billingcycle": "Monthly",
    "nextduedate": "2026-06-06",
    "nextinvoicedate": "2026-06-06",
    "status": "Pending",
    "regdate": "2026-05-06",
    "dedicatedip": "",
    "assignedips": "",
    "ns1": "",
    "ns2": ""
  }
}
POST

Request Service Cancellation

Submits an official request to cancel an active product or service. The endpoint validates ownership before processing.

Parameters
actionrequired
string
Must be set to request_cancellation.
serviceidrequired
integer
Unique integer ID of the hosting service or product.
cancellationreasonrequired
string
Reason for leaving. Cannot be empty.
type
string
Execution schedule: Immediate or End of Billing Period. Default: Immediate.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"request_cancellation","serviceid":143,"cancellationreason":"No longer needed","type":"Immediate"}'
Response
{
  "status": 200,
  "message": "Cancellation request submitted successfully",
  "data": { "serviceid": 143, "type": "Immediate" }
}
POST

Reset Service Password

Changes or resets the password for a service owned by the authenticated client using the associated module.

Parameters
actionrequired
string
Must be set to service_reset_password.
serviceidrequired
integer
The integer ID of the service.
servicepassword
string
The new password to set. If omitted, the module performs its default reset behavior.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"service_reset_password","serviceid":130,"servicepassword":"NewStrongPass!2026"}'
Response
{
  "status": 200,
  "message": "Service reset password executed successfully",
  "data": { "result": "success" }
}
POST

Execute Service Module Command

Executes an allowed custom module command for a service owned by the authenticated client.

Parameters
actionrequired
string
Must be set to service_module_custom.
serviceidrequired
integer
The integer ID of the service.
func_namerequired
string
Module command. Allowed: reboot, start, stop, reinstall, shutdown, boot, login, cpanellogin.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"service_module_custom","serviceid":130,"func_name":"reboot"}'
Response
{
  "status": 200,
  "message": "Service 'reboot' executed successfully",
  "data": { "result": "success" }
}
GET

Get Client Orders

Retrieves a paginated list of all product/service orders placed by the client.

Parameters
actionrequired
string
Must be set to get_orders.
limit
integer
Maximum records to return. Default: 10.
offset
integer
Starting point for pagination. Default: 0.
status
string
Filter by status: Pending, Active, Cancelled, Fraud.
sort
string
Sort: DESC_id, ASC_id, DESC_ordernum, ASC_ordernum, DESC_date, ASC_date, DESC_amount, ASC_amount, DESC_status, ASC_status.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_orders&limit=10&offset=0&status=Pending&sort=DESC_id" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Orders retrieved successfully",
  "meta": { "total_records": 26, "limit": 10, "current_offset": 0, "has_more": true, "next_offset": 10, "prev_offset": null, "total_pages": 3 },
  "data": [
    {
      "id": 175,
      "ordernum": 9178151183,
      "amount": "10.00",
      "paymentmethod": "banktransfer",
      "status": "Pending",
      "date": "2026-05-06 14:42:31"
    }
  ]
}
GET

Get Order Details

Retrieves detailed information regarding a single specific order, including associated services and domains.

Parameters
actionrequired
string
Must be set to get_order.
orderidrequired
integer
The unique integer ID of the order to fetch.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_order&orderid=160" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Order retrieved successfully",
  "data": {
    "id": 160,
    "ordernum": 5104338431,
    "amount": "19.99",
    "paymentmethod": "banktransfer",
    "status": "Pending",
    "date": "2026-05-06 12:21:53",
    "invoiceid": 183,
    "notes": "",
    "services": [
      { "id": 129, "product_name": "Basic Windows VPS", "domain": "", "amount": "19.99", "billingcycle": "Monthly", "status": "Pending" }
    ],
    "domains": []
  }
}
POST

Create Order

Creates a new order for services, domains, addons, or renewals for the authenticated client.

Parameters
actionrequired
string
Must be set to create_order.
paymentmethodrequired
string
Payment gateway method (e.g. paypal, stripe).
pid
array/integer
Product IDs.
qty
array/integer
Quantity for products.
domain
array/string
Domain name(s).
billingcycle
array/string
Billing cycle (monthly, annually, etc.).
domaintype
string
Domain registration type.
regperiod
integer
Domain registration period.
eppcode
string
Domain transfer EPP code.
addonid
integer
Single addon ID.
addonids
array
Multiple addon IDs.
addonidsqty
array
Quantities for addons.
serviceid
integer
Service ID for renewals or upgrades.
servicerenewals
array
Service renewal IDs.
addonrenewals
array
Addon renewal IDs.
domainrenewals
object
Domain renewal mappings.
nameserver1-5
string
Custom nameservers.
promocode
string
Discount code.
affid
integer
Affiliate ID.
contactid
integer
Client contact ID.
clientip
string
Client IP address.
promooverride
boolean
Override promotion rules.
noinvoice
boolean
Do not generate invoice.
noinvoiceemail
boolean
Suppress invoice email.
noemail
boolean
Suppress all emails.
customfields
string
Serialized custom field values.
configoptions
string
Serialized configuration options.
domainfields
string
Serialized domain-specific fields.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"create_order","paymentmethod":"stripe","pid":[1],"billingcycle":["monthly"]}'
Response
{
  "status": 200,
  "message": "Order created successfully",
  "data": {
    "orderid": 201,
    "invoiceid": 230,
    "serviceids": "",
    "addonids": "",
    "domainids": "29"
  }
}
POST

Upgrade Service

Processes or calculates an upgrade for an existing service owned by the authenticated client.

Parameters
actionrequired
string
Must be set to upgrade_service.
serviceidrequired
integer
The ID of the service to upgrade.
typerequired
string
Upgrade type. Allowed: product or configoptions.
paymentmethod
string
Payment gateway. Required unless calconly=1.
calconly
boolean
If true, only calculates upgrade cost without processing.
promocode
string
Discount code to apply.
newproductid
integer
Target product ID. Required for product type.
pid
integer
Alternative product ID field.
newproductbillingcycle
string
Billing cycle for upgraded product.
billingcycle
string
Alternative billing cycle field.
configoptions
array
Array of configuration option changes. Required for configoptions type.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"upgrade_service","serviceid":123,"type":"product","newproductid":5,"paymentmethod":"stripe"}'
Response
{
  "status": 200,
  "message": "Upgrade processed successfully",
  "data": {
    "result": "success",
    "serviceid": 123,
    "amount": "9.99",
    "currency": "USD"
  }
}
GET

Get Client Invoices

Retrieves a paginated list of invoices for the client. Supports status filtering and detailed sorting.

Parameters
actionrequired
string
Must be set to get_invoices.
limit
integer
Maximum records to return. Default: 10.
offset
integer
Starting point for pagination. Default: 0.
status
string
Filter by status: Paid, Unpaid, Cancelled, Refunded.
sort
string
Sort: DESC_id, ASC_id, DESC_invoicenum, ASC_invoicenum, DESC_date, ASC_date, DESC_duedate, ASC_duedate, DESC_total, ASC_total, DESC_status, ASC_status.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_invoices&limit=10&offset=0&status=Unpaid&sort=DESC_date" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Invoices retrieved successfully",
  "meta": { "total_records": 27, "limit": 10, "current_offset": 0, "has_more": true, "next_offset": 10, "prev_offset": null, "total_pages": 3 },
  "data": [
    {
      "id": 198,
      "invoicenum": "",
      "date": "2026-05-06",
      "duedate": "2026-05-06",
      "total": "0.00",
      "status": "Paid",
      "paymentmethod": "banktransfer"
    }
  ]
}
GET

Get Invoice Details

Retrieves detailed information regarding a single invoice, including all associated line items.

Parameters
actionrequired
string
Must be set to get_invoice.
invoiceidrequired
integer
The unique integer ID of the invoice to fetch.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_invoice&invoiceid=198" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Invoice retrieved successfully",
  "data": {
    "id": 198,
    "invoicenum": "",
    "date": "2026-05-06",
    "duedate": "2026-05-06",
    "subtotal": "10.00",
    "credit": "10.00",
    "tax": "0.00",
    "tax2": "0.00",
    "total": "0.00",
    "status": "Paid",
    "paymentmethod": "banktransfer",
    "notes": "",
    "items": [
      { "id": 205, "description": "Addon - SSL (06/05/2026 - 05/06/2026)", "amount": "10.00", "taxed": 0 }
    ]
  }
}
POST

Pay Invoice

Captures payment for an unpaid invoice belonging to the authenticated client.

Parameters
actionrequired
string
Must be set to pay_invoice.
invoiceidrequired
integer
The ID of the invoice to pay.
cvv
string
Card verification value if required by the payment gateway.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"pay_invoice","invoiceid":1234}'
Response
{
  "status": 200,
  "message": "Payment captured successfully.",
  "data": { "result": "success" }
}
GET

Get Payment Methods

Retrieves all available payment methods configured for the authenticated client.

Parameters
actionrequired
string
Must be set to get_payment_methods.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_payment_methods" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Payment methods retrieved successfully.",
  "data": [
    {
      "id": 1,
      "type": "BankAccount",
      "description": "Business Checking",
      "gateway_name": "",
      "contact_type": "Client",
      "contact_id": 5,
      "bank_name": "Chase Bank",
      "remote_token": "",
      "last_updated": "15/06/2026 12:46"
    }
  ]
}
POST

Add Payment Method

Adds a new payment method (credit card, remote credit card, or bank account) for the authenticated client.

Parameters
actionrequired
string
Must be set to add_payment_method.
typerequired
string
Payment method type. Allowed: CreditCard, RemoteCreditCard, BankAccount.
description
string
Label for the payment method.
gateway_module_name
string
Payment gateway module name.
set_as_default
boolean
Set as default payment method.
card_number
string
Credit card number (CreditCard/RemoteCreditCard).
card_expiry
string
Expiry date (MMYY or MM/YYYY).
card_start
string
Start date (if applicable).
card_issue_number
string
Issue number.
bank_name
string
Bank name (BankAccount only).
bank_account_type
string
Account type (savings/checking).
bank_code
string
Bank routing/sort code.
bank_account
string
Bank account number.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"add_payment_method","type":"CreditCard","description":"Personal Visa","card_number":"4111111111111111","card_expiry":"12/2030"}'
Response
{
  "status": 200,
  "message": "Payment method added successfully.",
  "data": { "paymethodid": 1 }
}
DELETE

Delete Payment Method

Removes a saved payment method from the authenticated client account.

Parameters
actionrequired
string
Must be set to delete_payment_method.
paymethodidrequired
integer
The ID of the payment method to delete.
Request body (JSON)
curl -X DELETE https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"delete_payment_method","paymethodid":1}'
Response
{
  "status": 200,
  "message": "Payment method deleted successfully."
}
GET

Get Client Emails

Retrieves a paginated list of email logs sent to the client.

Parameters
actionrequired
string
Must be set to get_emails.
limit
integer
Maximum records to return. Default: 10.
offset
integer
Starting point for pagination. Default: 0.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_emails&limit=10&offset=0" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Emails retrieved successfully",
  "meta": { "total_records": 279, "limit": 10, "current_offset": 20, "has_more": true, "next_offset": 30, "prev_offset": 10, "total_pages": 28 },
  "data": [
    { "id": 520, "date": "2026-04-21 14:35:38", "subject": "Customer Invoice" },
    { "id": 519, "date": "2026-04-21 14:35:37", "subject": "Invoice Payment Confirmation" }
  ]
}
GET

Get Email Details

Retrieves the full message content and metadata of a specific email sent to the client.

Parameters
actionrequired
string
Must be set to get_email.
emailidrequired
integer
The unique integer ID of the email log.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_email&emailid=511" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Email retrieved successfully",
  "data": {
    "id": 511,
    "userid": 5,
    "subject": "Invoice Payment Confirmation",
    "message": "",
    "date": "2026-04-21 14:25:20",
    "to": "John Doe <john.doe@example.com>",
    "cc": "",
    "bcc": "",
    "attachments": "[\"Invoice-138.pdf\"]",
    "pending": 0,
    "message_data": null,
    "failed": 0,
    "failure_reason": "",
    "retry_count": 0,
    "created_at": null,
    "updated_at": "2026-04-21 14:25:20",
    "campaign_id": 0
  }
}
GET

Get Announcements

Retrieves a paginated list of published system announcements available to the client.

Parameters
actionrequired
string
Must be set to get_announcements.
limit
integer
Maximum records to return. Default: 10.
offset
integer
Starting point for pagination. Default: 0.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_announcements&limit=10&offset=0" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Announcements retrieved successfully",
  "meta": { "total_records": 2, "limit": 10, "current_offset": 0, "has_more": false, "next_offset": null, "prev_offset": null, "total_pages": 1 },
  "data": [
    { "id": 2, "date": "2026-05-21 08:19:00", "title": "Scheduled Maintenance" },
    { "id": 1, "date": "2026-02-09 08:29:30", "title": "Welcome to our hosting service!" }
  ]
}
GET

Get Announcement Details

Retrieves the full body and details of a specific announcement.

Parameters
actionrequired
string
Must be set to get_announcement.
announcementidrequired
integer
The unique integer ID of the announcement.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_announcement&announcementid=2" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Announcement retrieved successfully",
  "data": {
    "id": 2,
    "date": "2026-05-21 08:19:00",
    "title": "Scheduled Maintenance",
    "announcement": "We will be performing scheduled maintenance on our servers.",
    "published": 1,
    "parentid": 0,
    "language": "",
    "created_at": "2026-05-21 08:19:00",
    "updated_at": "2026-05-21 08:19:00"
  }
}
GET

Get Client Quotes

Retrieves a paginated list of custom quotes generated for the client.

Parameters
actionrequired
string
Must be set to get_quotes.
limit
integer
Maximum records to return. Default: 10.
offset
integer
Starting point for pagination. Default: 0.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_quotes&limit=10&offset=0" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Quotes retrieved successfully",
  "meta": { "total_records": 1, "limit": 10, "current_offset": 0, "has_more": false, "next_offset": null, "prev_offset": null, "total_pages": 1 },
  "data": [
    {
      "id": 1,
      "subject": "VPS Quote",
      "stage": "On Hold",
      "validuntil": "2026-06-21",
      "datecreated": "2026-05-21",
      "total": "19.99"
    }
  ]
}
GET

Get Quote Details

Retrieves detailed information regarding a single quote, including associated items and pricing breakdown.

Parameters
actionrequired
string
Must be set to get_quote.
quoteidrequired
integer
The unique integer ID of the quote to fetch.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_quote&quoteid=1" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Quote retrieved successfully",
  "data": {
    "id": 1,
    "subject": "VPS Quote",
    "stage": "On Hold",
    "validuntil": "2026-06-21",
    "userid": 5,
    "firstname": "John",
    "lastname": "Doe",
    "companyname": "Acme Inc.",
    "email": "john.doe@example.com",
    "address1": "123 Main Street",
    "address2": "",
    "city": "New York",
    "state": "NY",
    "postcode": "10001",
    "country": "US",
    "phonenumber": "+1.5555550123",
    "tax_id": "",
    "currency": 1,
    "subtotal": "19.99",
    "tax1": "0.00",
    "tax2": "0.00",
    "total": "19.99",
    "proposal": "",
    "customernotes": "",
    "adminnotes": "",
    "datecreated": "2026-05-21",
    "lastmodified": "2026-05-21",
    "datesent": "0000-00-00",
    "dateaccepted": "0000-00-00",
    "items": [
      {
        "id": 1,
        "quoteid": 1,
        "description": "Windows VPS - Basic Windows VPS",
        "quantity": "1",
        "unitprice": "19.99",
        "discount": "0.00",
        "taxable": 1,
        "created_at": "0000-00-00 00:00:00",
        "updated_at": "2026-05-21 09:45:12"
      }
    ]
  }
}
POST

Accept Quote

Accepts a sales quote and automatically generates an invoice for the authenticated client.

Parameters
actionrequired
string
Must be set to accept_quote.
quoteidrequired
integer
The ID of the quote to accept.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"accept_quote","quoteid":1}'
Response
{
  "status": 200,
  "message": "Quote accepted successfully. Invoice has been generated.",
  "data": { "invoiceid": 232 }
}
POST

Create Client Contact

Creates a new sub-contact or alternate billing profile under the authenticated client.

Parameters
actionrequired
string
Must be set to create_contact.
firstnamerequired
string
First name of the contact.
lastnamerequired
string
Last name of the contact.
emailrequired
string
Email address of the contact.
companyname
string
Company name.
phonenumber
string
Phone number (e.g., +90.5012345678).
tax_id
string
Tax identification number.
address1
string
Primary address line.
address2
string
Secondary address line.
city
string
City.
state
string
State or Region.
postcode
string
Zip or Postal code.
country
string
2-letter Country Code (e.g., TR).
generalemails
integer
Boolean (1/0) to receive general emails.
invoiceemails
integer
Boolean (1/0) to receive invoice emails.
supportemails
integer
Boolean (1/0) to receive support emails.
productemails
integer
Boolean (1/0) to receive product emails.
domainemails
integer
Boolean (1/0) to receive domain emails.
affiliateemails
integer
Boolean (1/0) to receive affiliate emails.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"create_contact","firstname":"John","lastname":"Doe","email":"john.doe@example.com","companyname":"Acme","phonenumber":"+90.5012345678","country":"TR","generalemails":1,"invoiceemails":1,"supportemails":1}'
Response
{
  "status": 200,
  "message": "Contact created successfully",
  "data": {
    "contact_id": 6,
    "details": {
      "clientid": 5,
      "firstname": "John",
      "lastname": "Doe",
      "companyname": "Acme Inc.",
      "email": "john.doe@example.com",
      "address1": "123 Main Street",
      "address2": "Suite 200",
      "city": "New York",
      "state": "NY",
      "postcode": "10001",
      "country": "US",
      "phonenumber": "+1.5555550123",
      "tax_id": "",
      "generalemails": 1,
      "email_preferences": { "general": 1, "product": 1, "domain": 1, "invoice": 1, "support": 1, "affiliate": 1 },
      "productemails": 1,
      "domainemails": 1,
      "invoiceemails": 1,
      "supportemails": 1,
      "affiliateemails": 1
    }
  }
}
GET

Get Client Contacts

Retrieves a paginated list of all sub-contacts associated with the client account.

Parameters
actionrequired
string
Must be set to get_contacts.
limit
integer
Maximum records to return. Default: 10.
offset
integer
Starting point for pagination. Default: 0.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_contacts&limit=10&offset=0" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Contacts retrieved successfully",
  "meta": { "total_records": 2, "limit": 10, "current_offset": 0, "has_more": false, "next_offset": null, "prev_offset": null, "total_pages": 1 },
  "data": [
    { "id": 5, "firstname": "John", "lastname": "Doe", "email": "john.doe@example.com" },
    { "id": 4, "firstname": "Jane", "lastname": "Smith", "email": "jane.smith@example.com" }
  ]
}
GET

Get Contact Details

Retrieves detailed information regarding a specific sub-contact profile.

Parameters
actionrequired
string
Must be set to get_contact.
contactidrequired
integer
The unique integer ID of the contact to fetch.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_contact&contactid=1" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Contact retrieved successfully",
  "data": {
    "id": 1,
    "userid": 5,
    "firstname": "John",
    "lastname": "Doe",
    "companyname": "Acme Inc.",
    "email": "john.doe@example.com",
    "address1": "123 Main Street",
    "address2": "Suite 200",
    "city": "New York",
    "state": "NY",
    "postcode": "10001",
    "country": "US",
    "phonenumber": "+1.5555550123",
    "tax_id": "",
    "subaccount": 0,
    "password": "",
    "permissions": "",
    "domainemails": 0,
    "generalemails": 0,
    "invoiceemails": 0,
    "productemails": 0,
    "supportemails": 0,
    "affiliateemails": 0,
    "pwresetkey": "",
    "created_at": "0000-00-00 00:00:00",
    "updated_at": "0000-00-00 00:00:00",
    "pwresetexpiry": "0000-00-00 00:00:00"
  }
}
POST

Update Contact

Updates an existing contact belonging to the authenticated client. Only the fields provided in the request will be modified.

Parameters
actionrequired
string
Must be set to update_contact.
contactidrequired
integer
The integer ID of the contact to update.
firstname
string
Contact first name.
lastname
string
Contact last name.
companyname
string
Company name.
email
string
Email address.
address1
string
Address line 1.
address2
string
Address line 2.
city
string
City.
state
string
State or region.
postcode
string
Postal or ZIP code.
country
string
Two-letter country code.
phonenumber
string
Contact phone number.
generalemails
integer
Enable (1) or disable (0) general email notifications.
productemails
integer
Enable (1) or disable (0) product and service emails.
domainemails
integer
Enable (1) or disable (0) domain-related emails.
invoiceemails
integer
Enable (1) or disable (0) invoice emails.
supportemails
integer
Enable (1) or disable (0) support ticket emails.
affiliateemails
integer
Enable (1) or disable (0) affiliate emails.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"update_contact","contactid":5,"firstname":"John","invoiceemails":1}'
Response
{
  "status": 200,
  "message": "Contact updated successfully",
  "data": {
    "contactid": 1,
    "firstname": "John",
    "lastname": "Doe",
    "companyname": "Acme Inc.",
    "email": "john.doe@example.com",
    "address1": "123 Main Street",
    "address2": "Suite 200",
    "city": "New York",
    "state": "NY",
    "postcode": "10001",
    "country": "US",
    "phonenumber": "+1.5555550123",
    "tax_id": "",
    "email_preferences": { "general": 1, "product": 1, "domain": 1, "invoice": 1, "support": 1, "affiliate": 1 }
  }
}
DELETE

Delete Contact

Permanently deletes a contact belonging to the authenticated client.

Parameters
actionrequired
string
Must be set to delete_contact.
contactidrequired
integer
The integer ID of the contact to delete.
Request body (JSON)
curl -X DELETE https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"delete_contact","contactid":5}'
Response
{
  "status": 200,
  "message": "Contact deleted successfully"
}
GET

Get Client Domains

Retrieves a paginated list of domain names owned by the client. Supports comprehensive status filtering.

Parameters
actionrequired
string
Must be set to get_domains.
limit
integer
Maximum records to return. Default: 10.
offset
integer
Starting point for pagination. Default: 0.
status
string
Filter by status: Pending, Pending Registration, Pending Transfer, Active, Grace, Redemption, Expired, Cancelled, Fraud, Transferred Away.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_domains&limit=10&offset=0&status=Active" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Domains retrieved successfully",
  "meta": { "total_records": 12, "limit": 10, "current_offset": 0, "has_more": true, "next_offset": 10, "prev_offset": null, "total_pages": 2 },
  "data": [
    {
      "id": 17,
      "domain": "example.com",
      "firstpaymentamount": "10.00",
      "recurringamount": "0.00",
      "registrationperiod": 1,
      "registrationdate": "2026-05-05",
      "nextduedate": "2027-05-05",
      "status": "Pending",
      "registrar": ""
    }
  ]
}
GET

Get Domain Details

Retrieves detailed information regarding a specific domain name.

Parameters
actionrequired
string
Must be set to get_domain.
domainid
integer
The unique integer ID of the domain. Provide either this or the domain parameter.
domain
string
The full string domain name (e.g., 'example.com'). Provide either this or domainid.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_domain&domainid=15" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "Domain retrieved successfully",
  "data": {
    "id": 15,
    "userid": 5,
    "orderid": 146,
    "type": "Register",
    "registrationdate": "2026-05-05",
    "domain": "example.com",
    "firstpaymentamount": "10.00",
    "recurringamount": "0.00",
    "registrar": "",
    "registrationperiod": 1,
    "expirydate": "0000-00-00",
    "subscriptionid": "",
    "promoid": 0,
    "status": "Pending",
    "nextduedate": "2027-05-05",
    "nextinvoicedate": "2026-05-05",
    "additionalnotes": "",
    "paymentmethod": "banktransfer",
    "dnsmanagement": 0,
    "emailforwarding": 0,
    "idprotection": 0,
    "is_premium": 0,
    "donotrenew": 0,
    "reminders": "",
    "synced": 0,
    "created_at": "0000-00-00 00:00:00",
    "updated_at": "0000-00-00 00:00:00"
  }
}
POST

Update Nameservers

Updates the nameservers for a domain owned by the authenticated client.

Parameters
actionrequired
string
Must be set to update_nameservers.
domainidrequired
integer
The integer ID of the domain to update.
ns1required
string
Primary nameserver.
ns2required
string
Secondary nameserver.
ns3
string
Third nameserver.
ns4
string
Fourth nameserver.
ns5
string
Fifth nameserver.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"update_nameservers","domainid":17,"ns1":"ns1.example.com","ns2":"ns2.example.com"}'
Response
{
  "status": 200,
  "message": "Nameservers updated successfully at the registrar.",
  "data": {
    "domainid": 28,
    "ns1": "ns1.example.com",
    "ns2": "ns2.example.com"
  }
}
POST

Manage Domain Lock

Enables or disables the registrar lock for a domain owned by the authenticated client.

Parameters
actionrequired
string
Must be set to manage_domain_lock.
domainidrequired
integer
The integer ID of the domain to manage.
lockstatusrequired
string
The desired lock state. Accepted values: locked or unlocked.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"manage_domain_lock","domainid":17,"lockstatus":"locked"}'
Response
{
  "status": 200,
  "message": "Domain registrar lock successfully set to: locked"
}
GET

Get EPP Code

Retrieves the EPP (Authorization) code for a domain owned by the authenticated client. Typically required when transferring a domain to another registrar.

Parameters
actionrequired
string
Must be set to get_epp_code.
domainidrequired
integer
The integer ID of the domain for which to retrieve the EPP code.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=get_epp_code&domainid=17" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "EPP Code retrieved successfully",
  "data": { "result": "success", "na": true }
}
POST

Toggle Auto-Renew

Enables or disables automatic renewal for a domain owned by the authenticated client.

Parameters
actionrequired
string
Must be set to toggle_autorenew.
domainidrequired
integer
The integer ID of the domain to manage.
autorenewrequired
integer
Auto-renew status. Accepted values: 1 (enable) or 0 (disable).
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"toggle_autorenew","domainid":17,"autorenew":1}'
Response
{
  "status": 200,
  "message": "Auto-renew has been successfully Enabled."
}
POST

Update Account Details

Updates the profile and account configuration of the authenticated client. You only need to pass the fields you wish to change; omitted fields remain unmodified.

Parameters
actionrequired
string
Must be set to update_account.
firstname
string
Client's first name.
lastname
string
Client's last name.
companyname
string
Client's company name.
email
string
Client's email address.
address1
string
Primary address line.
address2
string
Secondary address line.
city
string
City.
state
string
State or Region.
postcode
string
Zip or Postal code.
country
string
2-letter Country Code (e.g., TR).
phonenumber
string
Phone number (Format: +[CountryCode].[Number]).
paymentmethod
string
Default payment gateway (e.g., banktransfer or none).
billingcid
integer
Billing contact ID (0 for default).
accountLanguage
string
Account language (e.g., english).
marketingoptin
integer
Integer (1 to receive marketing emails, 0 to opt-out).
email_preferences
object
Object with flags (1/0) for: general, invoice, support, product, domain, affiliate.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"update_account","firstname":"John","lastname":"Doe","email":"john@example.com","country":"TR"}'
Response
{
  "status": 200,
  "message": "Account details updated successfully",
  "data": {
    "firstname": "John",
    "lastname": "Doe",
    "companyname": "Acme Inc.",
    "email": "john.doe@example.com",
    "address1": "123 Main Street",
    "address2": "",
    "city": "New York",
    "state": "NY",
    "postcode": "10001",
    "country": "US",
    "phonenumber": "+1.5555550123",
    "defaultgateway": "banktransfer",
    "billingcid": 0,
    "language": "english",
    "marketing_emails_opt_in": 1,
    "emailoptout": 0,
    "email_preferences": "{\"general\":1,\"invoice\":1,\"support\":1,\"product\":1,\"domain\":1,\"affiliate\":0}",
    "updated_at": "2026-06-05 10:34:34"
  }
}
POST

Change Password

Updates the login password for the primary user associated with the authenticated client account. Requires the current active password for security verification.

Parameters
actionrequired
string
Must be set to change_password.
existingpwrequired
string
The current password for the account.
newpwrequired
string
The new desired password (maximum 64 characters).
confirmpwrequired
string
Confirmation of the new password. Must exactly match newpw.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"change_password","existingpw":"OldPassword!","newpw":"NewPassword!","confirmpw":"NewPassword!"}'
Response
{
  "status": 200,
  "message": "Password changed successfully"
}
POST

Disable Two-Factor Authentication

Disables Two-Factor Authentication (2FA) for the authenticated client's primary user account. Requires the current account password to authorize the change.

Parameters
actionrequired
string
Must be set to disable_2fa.
passwordrequired
string
The current account password for security verification.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"disable_2fa","password":"CurrentPassword!"}'
Response
{
  "status": 200,
  "message": "Two-Factor Authentication has been successfully disabled."
}
GET

Setup Two-Factor Authentication

Generates a Time-Based One-Time Password (TOTP) secret and a QR code image URL for configuring 2FA in apps like Google Authenticator or Authy. This endpoint only generates the setup data; you must pass the 6-digit code to verify_2fa to officially enable 2FA.

Parameters
actionrequired
string
Must be set to setup_2fa.
Query params (JSON)
curl -X GET "https://bill.ultahost.com/client-api/v1?action=setup_2fa" \
  -H "x-api-key: sk_live_••••••••••••"
Response
{
  "status": 200,
  "message": "2FA Setup Data generated",
  "data": {
    "secret": "DQUEKJKFTHNFKOS5",
    "qr_image_url": "https://quickchart.io/qr?size=300&text=otpauth%3A%2F%2Ftotp%2FUltahost%253Auser%2540ultahost.com%3Fsecret%3DDQUEKJKFTHNFKOS5%26issuer%3DUltahost",
    "manual_entry_code": "DQUE KJKF THNF KOS5"
  }
}
POST

Verify Two-Factor Authentication

Validates a 6-digit authenticator code against the generated secret and finalizes the setup, officially enabling Two-Factor Authentication on the client's primary user account.

Parameters
actionrequired
string
Must be set to verify_2fa.
secretrequired
string
The 16-character Base32 secret generated during the setup_2fa step.
coderequired
string
The 6-digit numeric code provided by the user from their authenticator app.
Request body (JSON)
curl -X POST https://bill.ultahost.com/client-api/v1 \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_••••••••••••" \
  -d '{"action":"verify_2fa","secret":"DQUEKJKFTHNFKOS5","code":"123456"}'
Response
{
  "status": 200,
  "message": "Two-Factor Authentication has been successfully enabled."
}
Reference

Errors

CodeStatusMeaning
200OKRequest succeeded.
400Bad RequestMissing or invalid parameters in the request body.
401UnauthorizedAPI key missing or invalid.
403ForbiddenKey does not have access to this resource.
404Not FoundRequested service or resource does not exist.
429Too Many RequestsRate limit exceeded — back off and retry.
5xxServer ErrorSomething went wrong on our end.
Reference

Rate limits

Default tier
1,000 req/min
Burst
200 req/sec
Enterprise
Custom

Every response includes X-RateLimit-Remaining and X-RateLimit-Reset headers. When you exceed the limit you receive a 429 — wait until the reset timestamp before retrying.