Check bulk domain availability

Check one or more full domain names. Small single-SLD batches may complete inline with data; larger or slower checks return HTTP 202 with operation.pollUrl. The request field is names, not domains. Use the completed registryRequirements to build POST /api/v2/orders items without frontend inference.

Domains & DNS Domains

Authentication

No authentication required.

Context

Query Parameters

locale string · Example: en

Optional locale hint for registry-requirement labels and reasons.

Headers

Accept Example
Content-Type Example

Body

required
application/json
names array required · Example: ["example.se","example.com"]

Responses

200 Availability results completed inline.
data array<object> required
data[].name string required · Example: example.se

Checked domain name in lowercase.

data[].available boolean required · Example: true

True when the domain can be registered right now.

data[].reason stringnull required · Example: null

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

data[].actions object required
data[].actions.canRegister object required
data[].actions.canRegister.allowed boolean required · Example: true
data[].actions.canRegister.reason stringnull required · Example: null
data[].actions.canRegister.code stringnull · Example: pending_order

Machine-readable reason code when an action is blocked.

data[].actions.canTransfer object required
data[].actions.canTransfer.allowed boolean required · Example: true
data[].actions.canTransfer.reason stringnull required · Example: null
data[].actions.canTransfer.code stringnull · Example: pending_order

Machine-readable reason code when an action is blocked.

data[].billing object | null required

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

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

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

data[].premium boolean required · Example: false

True when the registry classifies the name as premium.

data[].requiresRegistrarFeeAcceptance boolean required · Example: false

True when the order must explicitly accept additional registrar fees.

data[].eppRequired boolean required · Example: true

True when transfers for this result require an authorization code.

data[].renewalAmount numbernull required · Example: 169

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

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

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

data[].supportedTransferYears array<integer> required · Example: [1]

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

data[].existingDomainId stringnull required · Example: null

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

data[].existingDomainServiceStatus stringnull required · Example: null

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

data[].registryRequirements object required

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

data[].registryRequirements.registration array<object> required
data[].registryRequirements.registration[].key string · enum required · Example: eppCode
eppCode
phoneNumber
registrationIdentifier
companyRegistrationNumber
birthDate
registrantCountry
registrantType
useDomicile
acceptedTerms
nameservers
data[].registryRequirements.registration[].label string required · Example: Authorization code
data[].registryRequirements.registration[].required boolean required · Example: true
data[].registryRequirements.registration[].appliesTo string · enum required · Example: transfer
register
transfer
both
data[].registryRequirements.registration[].registrantType string · enum required · Example: any
any
private
organisation
data[].registryRequirements.registration[].allowedCountryCodes arraynull · Example: null
data[].registryRequirements.registration[].allowedRegistrantTypes arraynull · Example: null
data[].registryRequirements.registration[].alternativeRequirementKey stringnull · Example: null
data[].registryRequirements.registration[].acceptedTermsKey stringnull · Example: se_registration_terms
data[].registryRequirements.registration[].reason string required · Example: An authorization code is required to transfer this domain.
data[].registryRequirements.transfer array<object> required
data[].registryRequirements.transfer[].key string · enum required · Example: eppCode
eppCode
phoneNumber
registrationIdentifier
companyRegistrationNumber
birthDate
registrantCountry
registrantType
useDomicile
acceptedTerms
nameservers
data[].registryRequirements.transfer[].label string required · Example: Authorization code
data[].registryRequirements.transfer[].required boolean required · Example: true
data[].registryRequirements.transfer[].appliesTo string · enum required · Example: transfer
register
transfer
both
data[].registryRequirements.transfer[].registrantType string · enum required · Example: any
any
private
organisation
data[].registryRequirements.transfer[].allowedCountryCodes arraynull · Example: null
data[].registryRequirements.transfer[].allowedRegistrantTypes arraynull · Example: null
data[].registryRequirements.transfer[].alternativeRequirementKey stringnull · Example: null
data[].registryRequirements.transfer[].acceptedTermsKey stringnull · Example: se_registration_terms
data[].registryRequirements.transfer[].reason string required · Example: An authorization code is required to transfer this domain.
data[].registryRequirements.countryEligibility object required
202 Availability check queued. Poll `operation.pollUrl` until status is completed or failed.
operation object
operation.status string · enum required · Example: queued
pending
queued
in_progress
completed
failed
operation.jobId string required · Example: job_01hxa3b4c5d6e7f8g9h0j1k2m3
operation.pollUrl string required · Example: /api/jobs/job_01hxa3b4c5d6e7f8g9h0j1k2m3
operation.result objectnull · 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
POST https://cloud.hostup.se/api/v2/domains/availability
For AI assistants
View as Markdown
cURL
curl -X POST "https://cloud.hostup.se/api/v2/domains/availability" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "names": [
      "example.se",
      "example.com"
    ]
  }'
Response
{
  "data": [
    {
      "name": "example.se",
      "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
        }
      }
    }
  ]
}
Request Body Check registration candidates
{
  "names": [
    "example.se",
    "example.com"
  ]
}