Check domain availability

GET /api/v2/domains/availability

Check one domain name and return the same availability contract used by checkout.

Use this before creating a domain order: actions.canRegister tells whether registration is possible, actions.canTransfer tells whether transfer is possible, and registryRequirements lists the fields the order body must include for the TLD.

Use supportedRegisterYears and supportedTransferYears as the allowed period lists for this availability result; do not infer extra years from the TLD name or from generic 1-10 year assumptions.

Domains & DNS Domains

Authentication

No authentication required.

Context

Query Parameters

name string required · Example: example.se

Full domain name to check, including the TLD.

locale string · Example: en

Optional locale hint for registry-requirement labels and reasons.

Headers

Accept application/json

Responses

200 Availability result for the requested domain.
name string · Example: example.se

Checked domain name in lowercase.

state string · enum · Example: available

Typed availability state. Read this instead of inferring from available or the human-readable reason. unknown means the check could not be completed (the name is not confirmed taken, so do not present it as unavailable); already_owned means the name is already registered with HostUp; checking means the check is still in progress; invalid marks an input that is not a checkable domain name.

available
unavailable
unknown
already_owned
checking
invalid
unknownReason string · nullable · enum · Example: null

Present only when state is unknown: whether the availability check timed out or the lookup service was unavailable. null for every other state.

upstream_timeout
upstream_unavailable
available boolean · Example: true

True when the domain can be registered right now.

reason string · nullable · Example: null

Customer-facing reason when the domain is not available for registration.

actions object
actions.canRegister object required
actions.canRegister.allowed boolean required · Example: true
actions.canRegister.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canRegister.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canTransfer object required
actions.canTransfer.allowed boolean required · Example: true
actions.canTransfer.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canTransfer.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

billing object | null

Default registration billing summary. null means the availability check did not return a usable registration price.

billing.amount number required · Example: 99
billing.currencyCode string required · Example: SEK
billing.billingCycle string required · Example: annually
currencyCode string · Example: SEK

ISO-4217 currency for renewalAmount and other top-level price fields. Mirrors billing.currencyCode when billing is present.

premium boolean · Example: false

True when the registry classifies the name as premium.

requiresRegistrarFeeAcceptance boolean · Example: false

True when the order must explicitly accept additional registrar fees.

eppRequired boolean · Example: true

True when transfers for this result require an authorization code.

renewalAmount number · nullable · Example: 169

Default one-year renewal amount in currencyCode when exposed by the catalog.

supportedRegisterYears array<integer> · Example: [1,2,3,5]

Registration periods currently supported for this result. Only use years present in this array.

supportedTransferYears array<integer> · Example: [1]

Transfer periods currently supported for this result. A free transfer can still be represented as a supported year.

existingDomainId string · nullable · Example: null

Public domain ID when the authenticated caller already owns this name; otherwise null.

existingDomainServiceStatus string · nullable · Example: null

Existing service status for a caller-owned domain, when present.

registryRequirements object

Server-derived registration and transfer requirements for this TLD. Do not reimplement TLD rules in clients.

registryRequirements.registration array<object> required
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 array<any> · nullable · Example: null

Nullable: may be null when not applicable.

registryRequirements.registration[].allowedRegistrantTypes array<any> · nullable · Example: null

Nullable: may be null when not applicable.

registryRequirements.registration[].alternativeRequirementKey string · nullable · Example: null

Nullable: may be null when not applicable.

registryRequirements.registration[].acceptedTermsKey string · nullable · Example: se_registration_terms

Nullable: may be null when not applicable.

registryRequirements.registration[].reason string required · Example: An authorization code is required to transfer this domain.
registryRequirements.transfer array<object> required
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 array<any> · nullable · Example: null

Nullable: may be null when not applicable.

registryRequirements.transfer[].allowedRegistrantTypes array<any> · nullable · Example: null

Nullable: may be null when not applicable.

registryRequirements.transfer[].alternativeRequirementKey string · nullable · Example: null

Nullable: may be null when not applicable.

registryRequirements.transfer[].acceptedTermsKey string · nullable · Example: se_registration_terms

Nullable: may be null when not applicable.

registryRequirements.transfer[].reason string required · Example: An authorization code is required to transfer this domain.
registryRequirements.countryEligibility object required
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/domains/availability
For AI assistants
View as Markdown
cURL
curl -X GET "https://cloud.hostup.se/api/v2/domains/availability?name=example.se" \
  -H "Accept: application/json"
Response
{
  "name": "example.se",
  "state": "available",
  "unknownReason": null,
  "available": true,
  "reason": null,
  "actions": {
    "canRegister": {
      "allowed": true,
      "reason": null
    },
    "canTransfer": {
      "allowed": false,
      "reason": "Domain is available for registration, not transfer."
    }
  },
  "billing": {
    "amount": 99,
    "currencyCode": "SEK",
    "billingCycle": "annually"
  },
  "currencyCode": "SEK",
  "premium": false,
  "requiresRegistrarFeeAcceptance": false,
  "eppRequired": true,
  "renewalAmount": 169,
  "supportedRegisterYears": [
    1,
    2,
    3,
    5
  ],
  "supportedTransferYears": [
    1
  ],
  "existingDomainId": null,
  "existingDomainServiceStatus": null,
  "registryRequirements": {
    "registration": [
      {
        "key": "phoneNumber",
        "label": "Phone number",
        "required": true,
        "appliesTo": "register",
        "registrantType": "any",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null,
        "reason": ".se and .nu domains require a registrant phone number before the order can be submitted."
      },
      {
        "key": "registrationIdentifier",
        "label": "Personal identity number or organization number",
        "required": true,
        "appliesTo": "register",
        "registrantType": "any",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null,
        "reason": ".se and .nu domains require a personal identity number or organization number for the registrant."
      },
      {
        "key": "acceptedTerms",
        "label": ".se registration terms",
        "required": true,
        "appliesTo": "register",
        "registrantType": "any",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": "se_registration_terms",
        "reason": ".se domain registrations require acceptance of the registry registration terms before the order can be submitted."
      }
    ],
    "transfer": [
      {
        "key": "phoneNumber",
        "label": "Phone number",
        "required": true,
        "appliesTo": "transfer",
        "registrantType": "any",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null,
        "reason": ".se and .nu domains require a registrant phone number before the order can be submitted."
      },
      {
        "key": "registrationIdentifier",
        "label": "Personal identity number or organization number",
        "required": true,
        "appliesTo": "transfer",
        "registrantType": "any",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null,
        "reason": ".se and .nu domains require a personal identity number or organization number for the registrant."
      },
      {
        "key": "eppCode",
        "label": "Authorization code",
        "required": true,
        "appliesTo": "transfer",
        "registrantType": "any",
        "allowedCountryCodes": null,
        "allowedRegistrantTypes": null,
        "alternativeRequirementKey": null,
        "acceptedTermsKey": null,
        "reason": "Transfers for this domain extension require an authorization code from the current provider."
      }
    ],
    "countryEligibility": {
      "required": false,
      "allowedCountryCodes": null,
      "reason": null
    }
  }
}