Get TLD pricing and registry requirements

Return current pricing, orderable periods, configurable options, and server-derived registry requirements for one TLD. Start with GET /api/v2/products/domains, then call this endpoint for the selected tlds[].tld value. Call this before POST /api/v2/orders when building a registration or transfer payload. Use…

Read full description Hide full description

Return current pricing, orderable periods, configurable options, and server-derived registry requirements for one TLD. Start with GET /api/v2/products/domains, then call this endpoint for the selected tlds[].tld value. Call this before POST /api/v2/orders when building a registration or transfer payload. Use registryRequirements.registration[] for action: register, registryRequirements.transfer[] for action: transfer, and copy any acceptedTermsKey values into the domain item acceptedTerms[] array. Only the domainPricing[].years entries returned here are supported for multi-year orders or renewal cost displays; unsupported periods are omitted, not represented by a generated range.

Domains & DNS Domains

Authentication

No authentication required.

Context

Path Parameters

tld string required Example: fi

TLD suffix from `GET /api/v2/products/domains` `tlds[].tld`. The route accepts `se` or `.se`; examples use `se` because path segments normally omit the dot.

Query Parameters

locale string · Example: en

Optional locale for configurable-option labels when the upstream catalog provides localized labels.

Headers

Accept Example
Content-Type Example

Responses

200 TLD product details.
tld string · Example: .se

Canonical TLD suffix with a leading dot.

register null

One-year new-registration price. `null` means this action is not currently priced for the TLD.

transfer null

One-year inbound transfer price. `0` means free; `null` means not configured.

renew null

One-year renewal price for existing domains using this TLD.

redemption null

One-year redemption or restore-from-expired price when configured.

billing object

Canonical billing summary for the one-year registration price. Use `domainPricing[]` for multi-year pricing.

billing.amount number required · Example: 199
billing.currencyCode string required · Example: SEK
billing.billingCycle stringnull · enum required · Example: annually

Canonical billing cycle. VPS services with `isPayg: true` still report `monthly` for summary display; use `isPayg` to distinguish PAYG Cloud VPS from fixed-cycle VPS.

monthly
quarterly
semiannually
annually
biennially
triennially
free
billing.isPayg boolean required · Example: false

For VPS service/order billing, true means pay-as-you-go Cloud VPS and false means fixed-cycle/prepaid VPS. Non-VPS resources normally return false.

billing.periodYears integernull · Example: 1
domainPricing array<object>

Per-year pricing matrix from the source catalog. Only years present in this array are orderable; unsupported periods are omitted.

domainPricing[].years integer required · Example: 1

Registration, transfer, or renewal period in years for this pricing row.

domainPricing[].register null
domainPricing[].transfer null
domainPricing[].renew null
domainPricing[].redemption null
configurableOptions array<object>

Low-level configurable option metadata for registry-required domain fields. Prefer `registryRequirements` for order-building decisions.

registryRequirements object

Server-derived, human-readable requirements for registration and transfer payloads. Consumers should not infer TLD rules client-side.

registryRequirements.registration array<object>

Fields and terms required when `items[].action` is `register`.

registryRequirements.registration[].key string · enum required · Example: eppCode
eppCode
phoneNumber
registrationIdentifier
companyRegistrationNumber
birthDate
registrantCountry
registrantType
useDomicile
acceptedTerms
nameservers
registryRequirements.registration[].label string required · Example: Authorization code
registryRequirements.registration[].required boolean required · Example: true
registryRequirements.registration[].appliesTo string · enum required · Example: transfer
register
transfer
both
registryRequirements.registration[].registrantType string · enum required · Example: any
any
private
organisation
registryRequirements.registration[].allowedCountryCodes arraynull · Example: null
registryRequirements.registration[].allowedRegistrantTypes arraynull · Example: null
registryRequirements.registration[].alternativeRequirementKey stringnull · Example: null
registryRequirements.registration[].acceptedTermsKey stringnull · Example: se_registration_terms
registryRequirements.registration[].reason string required · Example: An authorization code is required to transfer this domain.
registryRequirements.transfer array<object>

Fields, terms, and authorization-code requirements when `items[].action` is `transfer`.

registryRequirements.transfer[].key string · enum required · Example: eppCode
eppCode
phoneNumber
registrationIdentifier
companyRegistrationNumber
birthDate
registrantCountry
registrantType
useDomicile
acceptedTerms
nameservers
registryRequirements.transfer[].label string required · Example: Authorization code
registryRequirements.transfer[].required boolean required · Example: true
registryRequirements.transfer[].appliesTo string · enum required · Example: transfer
register
transfer
both
registryRequirements.transfer[].registrantType string · enum required · Example: any
any
private
organisation
registryRequirements.transfer[].allowedCountryCodes arraynull · Example: null
registryRequirements.transfer[].allowedRegistrantTypes arraynull · Example: null
registryRequirements.transfer[].alternativeRequirementKey stringnull · Example: null
registryRequirements.transfer[].acceptedTermsKey stringnull · Example: se_registration_terms
registryRequirements.transfer[].reason string required · Example: An authorization code is required to transfer this domain.
registryRequirements.countryEligibility object

Registrant-country restrictions for this TLD, when any.

registryRequirements.countryEligibility.required boolean · Example: false
registryRequirements.countryEligibility.allowedCountryCodes arraynull · Example: null
registryRequirements.countryEligibility.reason stringnull · Example: null
availabilityStatus string · enum · Example: available
available
out_of_stock
hidden
available boolean · Example: true
reason stringnull · Example: null
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
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/products/domains/{tld}
For AI assistants
View as Markdown
cURL
curl -X GET "https://cloud.hostup.se/api/v2/products/domains/fi" \
  -H "Accept: application/json"
Response
{
  "tld": ".se",
  "register": {
    "amount": 99,
    "currencyCode": "SEK"
  },
  "transfer": {
    "amount": 0,
    "currencyCode": "SEK"
  },
  "renew": {
    "amount": 169,
    "currencyCode": "SEK"
  },
  "redemption": {
    "amount": 0,
    "currencyCode": "SEK"
  },
  "billing": {
    "amount": 99,
    "currencyCode": "SEK",
    "billingCycle": "annually"
  },
  "domainPricing": [
    {
      "years": 1,
      "register": {
        "amount": 99,
        "currencyCode": "SEK"
      },
      "transfer": {
        "amount": 0,
        "currencyCode": "SEK"
      },
      "renew": {
        "amount": 169,
        "currencyCode": "SEK"
      },
      "redemption": {
        "amount": 0,
        "currencyCode": "SEK"
      }
    },
    {
      "years": 2,
      "register": {
        "amount": 268,
        "currencyCode": "SEK"
      },
      "transfer": null,
      "renew": {
        "amount": 338,
        "currencyCode": "SEK"
      },
      "redemption": {
        "amount": 0,
        "currencyCode": "SEK"
      }
    },
    {
      "years": 3,
      "register": {
        "amount": 437,
        "currencyCode": "SEK"
      },
      "transfer": null,
      "renew": {
        "amount": 507,
        "currencyCode": "SEK"
      },
      "redemption": {
        "amount": 0,
        "currencyCode": "SEK"
      }
    },
    {
      "years": 5,
      "register": {
        "amount": 845,
        "currencyCode": "SEK"
      },
      "transfer": null,
      "renew": {
        "amount": 845,
        "currencyCode": "SEK"
      },
      "redemption": {
        "amount": 0,
        "currencyCode": "SEK"
      }
    }
  ],
  "configurableOptions": [],
  "registryRequirements": {
    "registration": [
      {
        "key": "phoneNumber",
        "label": "Phone number",
        "required": true,
        "appliesTo": "register",
        "registrantType": "any",
        "reason": ".se and .nu domains require a registrant phone number before the order can be submitted.",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null
      },
      {
        "key": "registrationIdentifier",
        "label": "Personal identity number or organization number",
        "required": true,
        "appliesTo": "register",
        "registrantType": "any",
        "reason": ".se and .nu domains require a personal identity number or organization number for the registrant.",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null
      },
      {
        "key": "acceptedTerms",
        "label": ".se registration terms",
        "required": true,
        "appliesTo": "register",
        "registrantType": "any",
        "reason": ".se domain registrations require acceptance of the registry registration terms before the order can be submitted.",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": "se_registration_terms"
      }
    ],
    "transfer": [
      {
        "key": "phoneNumber",
        "label": "Phone number",
        "required": true,
        "appliesTo": "transfer",
        "registrantType": "any",
        "reason": ".se and .nu domains require a registrant phone number before the order can be submitted.",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null
      },
      {
        "key": "registrationIdentifier",
        "label": "Personal identity number or organization number",
        "required": true,
        "appliesTo": "transfer",
        "registrantType": "any",
        "reason": ".se and .nu domains require a personal identity number or organization number for the registrant.",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null
      },
      {
        "key": "eppCode",
        "label": "Authorization code",
        "required": true,
        "appliesTo": "transfer",
        "registrantType": "any",
        "reason": "Transfers for this domain extension require an authorization code from the current provider.",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null
      }
    ],
    "countryEligibility": {
      "required": false,
      "allowedCountryCodes": null,
      "reason": null
    }
  },
  "availabilityStatus": "available",
  "available": true,
  "reason": null
}