Create Order
Create new proxy orders
Create a new order for a specific plan.
Endpoint: POST /orders
The endpoint accepts both application/json and multipart/form-data; use whichever your client finds convenient.
Common Fields
| Field | Type | Required | Notes |
|---|---|---|---|
plan | string (slug) | yes | Plan slug from GET /plans (e.g. residential, datacenter). |
bandwidth | number (GB) | varies | Required for bandwidth-type plans. Integer GB; must satisfy tier rules from GET /plans/{slug}. |
duration | string (slug) | varies | Required for duration-type plans. Must match plan.durations[].slug. |
config | object | varies | Required when the chosen duration exposes options; keys are option name values, values from option.options[].value or numeric constraints. |
discount_code | string | no | Optional discount code. |
Orders are always charged to the authenticated user's account balance. Do not send payment_gateway_id.
Pick the relevant page for examples:
- Residential — bandwidth plan
- Residential Budget — bandwidth plan
- Mobile — bandwidth plan
- IPv6 Residential — duration plan
- IPv6 Datacenter — duration plan
- Unlimited Residential (Dedicated) — duration plan
- Unlimited Residential Budget — duration plan
- Static ISP — duration plan with
config - Static Datacenter — duration plan with
config - Datacenter — duration plan with
config
Examples
Bandwidth plan:
{
"plan": "residential",
"bandwidth": 2
}Duration plan with options:
{
"plan": "datacenter",
"duration": "1_week",
"config": {
"speed": 10
}
}Successful Response
POST /orders returns 201 Created with a UserPlanResource as the root (no data envelope):
{
"uuid": "9bdfe2d6-2c9a-4f7e-9e8c-1a2b3c4d5e6f",
"username": null,
"password": null,
"initial_bandwidth_in_bytes": 10737418240,
"remaining_bandwidth_in_bytes": 10737418240,
"consumed_bandwidth_in_bytes": 0,
"expires_at": "2026-06-03T12:00:00Z",
"status": "active",
"price": { "gross": 19.99, "discount": 0, "net": 19.99 },
"plan": { /* ... */ },
"duration_options": [],
"created_at": "2026-01-04T21:19:12.000000Z",
"updated_at": "2026-01-04T21:19:12.000000Z"
}For duration-type orders with configurable options, duration_options lists the resolved choices (labels, values, and line prices). username and password remain null until the order status allows credentials (i.e. not awaiting_payment, pending, or invoice_expired).
Error Responses
422 Unprocessable Entity:
{ "error": "<human-readable message>" }Common messages:
Plan '<slug>' not found.Invalid duration format '<slug>'. Expected e.g. '30_days', '1_day', '20_minutes'.Duration '<slug>' is not available for plan '<plan-slug>'.The config field is required for this plan duration.Missing config value for option '<name>'.Option '<name>' does not exist for the selected plan duration.Invalid value for option '<name>'.Value for option '<name>' must be numeric.Value for option '<name>' must be at least <min>.Value for option '<name>' must be at most <max>.Value for option '<name>' must be a multiple of <step>.The selected plan is not active.The entered bandwidth is not valid.You have reached the maximum number of orders for this plan.Insufficient balance.