Get availability job

GET /api/v2/domains/availability/{jobId}

Poll a queued availability check returned by POST /api/v2/domains/availability.

Use exactly the dcheck_... value returned as operation.jobId, or follow the returned operation.pollUrl; do not poll this route with generic job_... IDs or domain bulk dbj_... IDs.

When status is processing, data[] may contain partial results for TLDs that have already finished; keep polling until completed or failed.

When status is completed, read data[] exactly like the inline POST response.

Anonymous callers can poll, but only authenticated callers can receive existingDomainId for domains already owned by their account.

Domains & DNS Domains

Authentication

No authentication required.

Context

Path Parameters

jobId string required Example: dom_01hxa3b4c5d6e7f8g9h0j1k2m3

Public availability-check job ID returned as operation.jobId by POST /api/v2/domains/availability. This value starts with dcheck_; do not pass generic job_... IDs or domain bulk dbj_... IDs. Do not invent this value; use the exact ID returned by the referenced API response.

Query Parameters

locale string · Example: en

Optional locale hint for registry-requirement labels and reasons.

Headers

Accept application/json

Responses

200 Availability job status.
status: completed
status string · enum required
completed
data array<object> required
data[].name string required · Example: example.se

Checked domain name in lowercase.

data[].state string · enum required · 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
data[].unknownReason string · nullable · enum required · 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
data[].available boolean required · Example: true

True when the domain can be registered right now.

data[].reason string · nullable 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 string · nullable required · Example: null

Nullable: may be null when not applicable.

data[].actions.canRegister.code string · nullable · 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 string · nullable required · Example: null

Nullable: may be null when not applicable.

data[].actions.canTransfer.code string · nullable · 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 number · nullable 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 string · nullable required · Example: null

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

data[].existingDomainServiceStatus string · nullable 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 array<any> · nullable · Example: null

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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 array<any> · nullable · Example: null

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

data[].registryRequirements.transfer[].reason string required · Example: An authorization code is required to transfer this domain.
data[].registryRequirements.countryEligibility object required
status: processing
status string · enum required
processing
progress number required · Example: 25
data array<object>

Partial availability rows for domains that have already finished. Omitted until the first row is ready.

data[].name string required · Example: example.se

Checked domain name in lowercase.

data[].state string · enum required · 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
data[].unknownReason string · nullable · enum required · 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
data[].available boolean required · Example: true

True when the domain can be registered right now.

data[].reason string · nullable 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 string · nullable required · Example: null

Nullable: may be null when not applicable.

data[].actions.canRegister.code string · nullable · 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 string · nullable required · Example: null

Nullable: may be null when not applicable.

data[].actions.canTransfer.code string · nullable · 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 number · nullable 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 string · nullable required · Example: null

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

data[].existingDomainServiceStatus string · nullable 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 array<any> · nullable · Example: null

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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 array<any> · nullable · Example: null

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

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

Nullable: may be null when not applicable.

data[].registryRequirements.transfer[].reason string required · Example: An authorization code is required to transfer this domain.
data[].registryRequirements.countryEligibility object required
status: failed
status string · enum required
failed
reason string · nullable required · Example: The availability check could not be completed.

Fixed customer-safe failure message. Raw upstream/queue error text is logged server-side only, never returned here.

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/{jobId}
For AI assistants
View as Markdown
cURL
curl -X GET "https://cloud.hostup.se/api/v2/domains/availability/dom_01hxa3b4c5d6e7f8g9h0j1k2m3" \
  -H "Accept: application/json"
Response
// Completed check
{
  "status": "completed",
  "data": [
    {
      "name": "example.se",
      "state": "unavailable",
      "unknownReason": null,
      "available": false,
      "reason": "Domain already registered.",
      "actions": {
        "canRegister": {
          "allowed": false,
          "reason": "Domain already registered."
        },
        "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
        }
      }
    }
  ]
}

// Still processing
{
  "status": "processing",
  "progress": 20
}

// Processing with partial results
{
  "status": "processing",
  "progress": 55,
  "data": [
    {
      "name": "example.com",
      "available": true,
      "reason": null,
      "actions": {
        "canRegister": {
          "allowed": true,
          "reason": null
        },
        "canTransfer": {
          "allowed": false,
          "reason": "Domain is available for registration, not transfer."
        }
      },
      "billing": {
        "amount": 159,
        "currencyCode": "SEK",
        "billingCycle": "annually"
      },
      "currencyCode": "SEK",
      "premium": false,
      "requiresRegistrarFeeAcceptance": false,
      "eppRequired": false,
      "renewalAmount": 189,
      "supportedRegisterYears": [
        1
      ],
      "supportedTransferYears": [
        1
      ],
      "existingDomainId": null,
      "existingDomainServiceStatus": null,
      "registryRequirements": {
        "registration": [],
        "transfer": [],
        "countryEligibility": {
          "required": false,
          "allowedCountryCodes": null,
          "reason": null
        }
      }
    }
  ]
}