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
idstringrequireddom_…).Example
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.
{ "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
domainIdstringdomainNamestring or nullreactivationobjectstatusstringawaiting_payment, processing, completed, failed, cancelled.createdAtstring or nullrestorableUntilstring or nullrenewalYearsintegerpaymentInvoiceobject or nullidstringnumberstring or nullamountnumber or nullcurrencyCodestringdueAtstring or nullstatusstringpaymentUrlstringErrors
Errors are Problem Details with a stable code. Branch on the code, not on the text.
| 400 | Invalid request. The response body is an RFC 7807 Problem Details document. |
| 401 | Unauthorized. Authentication is required. |
| 403 | Forbidden. The caller lacks a required scope or does not own the resource. |
| 404 | Not found. The resource does not exist or is not owned by the caller; code is domain_not_found. |
| 409 | The 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. |
| 429 | Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers. |
| 500 | Internal error. Retry later or contact support if the issue persists. |
| 502 | The reactivation price could not be confirmed right now (renewal_pricing_unavailable). Try again later. |