/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.
No authentication required.
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.
locale string
· Example: en Optional locale hint for registry-requirement labels and reasons.
Accept application/json 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 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 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.
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 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 Retry-After seconds plus X-RateLimit-* headers. 10 fields 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 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 https://cloud.hostup.se/api/v2/domains/availability/{jobId} curl -X GET "https://cloud.hostup.se/api/v2/domains/availability/dom_01hxa3b4c5d6e7f8g9h0j1k2m3" \
-H "Accept: application/json" // 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
}
}
}
]
}