SKILL.md
Hostinger Billing
The Billing API allows you to browse the Hostinger service catalog, manage payment methods, and control subscriptions programmatically. Orders are placed through resource-specific endpoints (e.g., domains and VPS), not a generic billing order endpoint.
Table of Contents
- [Core Concepts](#core-concepts)
- [Common Patterns](#common-patterns)
- [API Reference](#api-reference)
- [Best Practices](#best-practices)
- [Troubleshooting](#troubleshooting)
- [References](#references)
Core Concepts
Catalog
The catalog contains available products and pricing. Prices are displayed in cents (integer), e.g., 1799 means $17.99. Use the catalog to discover available services and their item_id values before placing orders.
Orders
Orders are placed through resource-specific endpoints (e.g., POST /api/domains/v1/portfolio, POST /api/vps/v1/virtual-machines) by referencing catalog itemid values and a payment method. There is no longer a generic billing order endpoint. Orders created via API are set for automatic renewal by default. Some creditcard payments may require additional verification.
Payment Methods
Payment methods must be added via hPanel. The API lets you list, set a default, or delete existing payment methods.
Subscriptions
Subscriptions represent active service plans. You can list subscriptions and toggle auto-renewal on or off.
Common Patterns
Browse Catalog and Place an Order
CLI (curl):
# Get available catalog items
curl -X GET "https://developers.hostinger.com/api/billing/v1/catalog" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json"
# Filter catalog by category
curl -X GET "https://developers.hostinger.com/api/billing/v1/catalog?category=vps" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
Python SDK:
from hostinger_api import Hostinger
client = Hostinger(api_token="YOUR_API_TOKEN")
# List catalog items
catalog = client.billing.catalog.get_catalog_item_list()
for item in catalog:
print(f"{item.name}: {item.price / 100:.2f} USD")
TypeScript SDK:
import { Hostinger } from "hostinger-api-sdk";
const client = new Hostinger({ apiToken: "YOUR_API_TOKEN" });
const catalog = await client.billing.catalog.list();
for (const item of catalog) {
console.log(`${item.name}: ${(item.price / 100).toFixed(2)} USD`);
}
PHP SDK:
use Hostinger\Api\HostingerApi;
$client = new HostingerApi('YOUR_API_TOKEN');
$catalog = $client->billing->catalog->list();
foreach ($catalog as $item) {
echo $item->name . ': ' . number_format($item->price / 100, 2) . " USD\n";
}
Manage Payment Methods
# List payment methods
curl -X GET "https://developers.hostinger.com/api/billing/v1/payment-methods" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Set default payment method
curl -X POST "https://developers.hostinger.com/api/billing/v1/payment-methods/517244" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Delete a payment method
curl -X DELETE "https://developers.hostinger.com/api/billing/v1/payment-methods/517244" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
Manage Subscriptions
# List all subscriptions
curl -X GET "https://developers.hostinger.com/api/billing/v1/subscriptions" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Disable auto-renewal for a subscription
curl -X DELETE "https://developers.hostinger.com/api/billing/v1/subscriptions/12345/auto-renewal/disable" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Enable auto-renewal for a subscription
curl -X PATCH "https://developers.hostinger.com/api/billing/v1/subscriptions/12345/auto-renewal/enable" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
API Reference
Catalog
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/billing/v1/catalog |
Get catalog items (filterable by category and name) |
Orders
Removed: the generic
POST /api/billing/v1/ordersendpoint is no longer part of the API. Place orders through the resource-specific endpoints instead —POST /api/domains/v1/portfoliofor domains andPOST /api/vps/v1/virtual-machinesfor VPS.
Payment Methods
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/billing/v1/payment-methods |
List payment methods |
POST |
/api/billing/v1/payment-methods/{id} |
Set default payment method |
DELETE |
/api/billing/v1/payment-methods/{id} |
Delete payment method |
Subscriptions
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/billing/v1/subscriptions |
List all subscriptions |
DELETE |
/api/billing/v1/subscriptions/{id}/auto-renewal/disable |
Disable auto-renewal |
PATCH |
/api/billing/v1/subscriptions/{id}/auto-renewal/enable |
Enable auto-renewal |
Best Practices
Pricing
- Always fetch catalog prices before displaying to users — prices are in cents
- Divide by 100 and format appropriately for display
Orders
- The generic
/api/billing/v1/ordersendpoint has been removed from the API - Use
POST /api/domains/v1/portfoliofor domain purchases - Use
POST /api/vps/v1/virtual-machinesfor VPS purchases - Prefer non-credit-card payment methods to avoid verification delays
Payment Methods
- New payment methods must be added through hPanel, not the API
- If no payment method is specified in an order, the default method is used automatically
- Remove unused payment methods to keep your account clean
Subscriptions
- Monitor subscriptions to avoid unexpected service interruptions
- Disable auto-renewal well before expiration if you intend to cancel
Troubleshooting
401 Unauthorized
- Verify your API token is valid and not expired
- Token permissions match the owning user's permissions
- Check
Authorization: Bearer <token>header format
422 Unprocessable Content
- Invalid
item_idin order request — verify against catalog - Invalid
paymentmethodid— list payment methods first
429 Too Many Requests
- You've exceeded rate limits — back off and retry
- Repeated violations may temporarily block your IP
Order Not Processing
credit_cardpayments may require additional verification- Check order status in hPanel
- Try a different payment method