Get domain billing-period options

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…

Read full description Hide full description

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.

Domains & DNS Billing

Authentication

Required API scope: read:domains

Use Authorization: Bearer <token> for API keys. Dashboard sessions may also use hostup_session.

Context

Path Parameters

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.

Headers

Accept Example
Content-Type Example

Responses

200 Billing-period options and change gate.
currentBillingCycle stringnull · 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 integernull · 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 stringnull · 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 required · Example: 1
options[].years integer required · Example: 1

Alias of `periodYears` kept because the upstream options endpoint already exposes `years`.

options[].amount numbernull 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 numbernull 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 stringnull · 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 stringnull required · Example: null
actions.canChangeBillingCycle.code stringnull · enum · Example: null
pending_renewal_order
pending_domain_order
locked
400 Invalid request. The response body is an RFC 7807 Problem Details document.
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
401 Unauthorized. Authentication is required.
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
403 Forbidden. The caller lacks a required scope or does not own the resource.
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
404 Not found. The resource does not exist or is not owned by the caller.
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
429 Rate limited. Retry after the limit resets. 429 responses include `Retry-After` seconds plus `X-RateLimit-*` headers.
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
500 Internal error. Retry later or contact support if the issue persists.
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
GET https://cloud.hostup.se/api/v2/domains/{id}/billing-cycle
For AI assistants
View as Markdown
cURL
curl -X GET "https://cloud.hostup.se/api/v2/domains/dom_01hxa3b4c5d6e7f8g9h0j1k2m3/billing-cycle" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
Response
{
  "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
    }
  }
}