/api/v2/domains/{id}/billing-cycle Return the current domain renewal period, product-supported period options, prices, and the server-side action gate for changing it.
Get {id} from GET /api/v2/domains data[].id.
Always read this endpoint immediately before POST and choose one row from options[]; supported periods vary by TLD and product, so callers must not assume every 1-9 year value is available.
For 1, 2, and 3 year rows, billingCycle is annually, biennially, or triennially.
For longer rows, billingCycle is null and periodYears is the value to send.
If locked is true or actions.canChangeBillingCycle.allowed is false, do not call POST until the blocker is resolved.
A pending renewal order can be declined with POST /api/v2/domains/{id}/actions/respond-to-renewal and { "accept": false }; a pending domain order can be inspected and cancelled with GET /api/v2/orders/{id} and POST /api/v2/orders/{id}/actions/cancel.
read:domains
Authenticate with an API key in the Authorization: Bearer <token> header.
id string required
Example: dom_01hxa3b4c5d6e7f8g9h0j1k2m3 Public domain ID from GET /api/v2/domains data[].id. Do not invent this value; use the exact ID returned by the referenced API response.
Authorization Bearer <token> Accept application/json currentBillingCycle string · nullable · enum
· Example: annually Canonical slug for the current period when it is 1, 2, or 3 years. Null for longer domain-only periods.
annually biennially triennially currentPeriodYears integer · nullable · min: 1 · max: 9
· Example: 1 Current renewal period length in years.
currencyCode string
· Example: SEK ISO-4217 currency for all amounts in options[].
options array<object> Available renewal periods for this exact domain. Select one returned row before POST; supported year counts vary by TLD/product.
options[].billingCycle string · nullable · enum required
· Example: annually Canonical slug for one-, two-, and three-year periods. Four- to nine-year periods return null and are selected with periodYears.
annually biennially triennially options[].periodYears integer · min: 1 · max: 9 required
· Example: 1 options[].years integer · min: 1 · max: 9 required
· Example: 1 Alias of periodYears kept because the upstream options endpoint already exposes years.
options[].amount number · nullable required
· Example: 169 Canonical renewal amount for this period in currencyCode.
options[].currencyCode string required
· Example: SEK ISO-4217 currency for this option's amount and legacy renewPrice alias.
options[].renewPrice number · nullable required
· Example: 169 Deprecated alias of amount, kept for old dashboard consumers during migration.
options[].isCurrent boolean required
· Example: true locked boolean
· Example: false lockReason string · nullable
· Example: null pendingRenewalOrder null
· Example: null pendingOrder null
· Example: null actions object actions.canChangeBillingCycle object required actions.canChangeBillingCycle.allowed boolean required
· Example: true actions.canChangeBillingCycle.reason string · nullable required
· Example: null Nullable: may be null when not applicable.
actions.canChangeBillingCycle.code string · nullable · enum
· Example: null Nullable: may be null when not applicable.
pending_renewal_order pending_domain_order locked type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object Retry-After seconds plus X-RateLimit-* headers. 10 fields type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object https://cloud.hostup.se/api/v2/domains/{id}/billing-cycle curl -X GET "https://cloud.hostup.se/api/v2/domains/dom_01hxa3b4c5d6e7f8g9h0j1k2m3/billing-cycle" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" {
"currentBillingCycle": "annually",
"currentPeriodYears": 1,
"currencyCode": "SEK",
"options": [
{
"billingCycle": "annually",
"periodYears": 1,
"years": 1,
"amount": 169,
"currencyCode": "SEK",
"renewPrice": 169,
"isCurrent": true
},
{
"billingCycle": "biennially",
"periodYears": 2,
"years": 2,
"amount": 338,
"currencyCode": "SEK",
"renewPrice": 338,
"isCurrent": false
},
{
"billingCycle": "triennially",
"periodYears": 3,
"years": 3,
"amount": 507,
"currencyCode": "SEK",
"renewPrice": 507,
"isCurrent": false
},
{
"billingCycle": null,
"periodYears": 5,
"years": 5,
"amount": 845,
"currencyCode": "SEK",
"renewPrice": 845,
"isCurrent": false
}
],
"locked": false,
"lockReason": null,
"pendingRenewalOrder": null,
"pendingOrder": null,
"actions": {
"canChangeBillingCycle": {
"allowed": true,
"reason": null
}
}
}