Skip to content

Reactivate an expired domain

POST /api/v2/domains/{id}/actions/reactivate

Create the invoice that brings an expired domain back. The invoice covers a one-time reactivation fee and one year of renewal. Check available and the price on GET /api/v2/domains/{id}/reactivation first. Send no body. Nothing changes at the registry until the invoice is paid in full. The domain is then restored and renewed for one year without further calls. Follow reactivation.status on the same GET. When a reactivation is already open, the call returns it with its invoice instead of creating a second one. After restorableUntil the domain can no longer be restored.

Authentication: An API key with the scopes write:domains and write:billing. About keys and scopes

Request

Path parameters

idstringrequired
The domain ID (dom_…).

Example

POST /api/v2/domains/{id}/actions/reactivate
curl -X POST "https://cloud.hostup.se/api/v2/domains/dom_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/reactivate" \
-H "Authorization: Bearer $HOSTUP_API_KEY" \
-H "Content-Type: application/json"

Responses

200 The new or already open reactivation with its invoice.

Response 200
{
"domainId": "dom_01hxa3b4c5d6e7f8g9h0j1k2m3",
"domainName": "example.com",
"reactivation": {
"status": "awaiting_payment",
"createdAt": "2026-08-05T14:30:00.000Z",
"restorableUntil": "2026-08-30",
"renewalYears": 1,
"paymentInvoice": {
"id": "inv_01hxa3b4c5d6e7f8g9h0j1k2m3",
"number": "202600001",
"amount": 430,
"currencyCode": "SEK",
"dueAt": "2026-08-12T00:00:00.000Z",
"status": "unpaid",
"paymentUrl": "/billing?invoice=202600001"
}
}
}
Response fields
domainIdstring
domainNamestring or null
reactivationobject
statusstring
One of awaiting_payment, processing, completed, failed, cancelled.
createdAtstring or null
restorableUntilstring or null
renewalYearsinteger
paymentInvoiceobject or null
idstring
numberstring or null
amountnumber or null
currencyCodestring
dueAtstring or null
statusstring
paymentUrlstring

Errors

Errors are Problem Details with a stable code. Branch on the code, not on the text.

400Invalid request. The response body is an RFC 7807 Problem Details document.
401Unauthorized. Authentication is required.
403Forbidden. The caller lacks a required scope or does not own the resource.
404Not found. The resource does not exist or is not owned by the caller; code is domain_not_found.
409The domain cannot be reactivated online (domain_not_eligible). detail says why. Either the domain is not in the restore window, the window has passed or it can still be renewed normally.
429Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers.
500Internal error. Retry later or contact support if the issue persists.
502The reactivation price could not be confirmed right now (renewal_pricing_unavailable). Try again later.