Skip to content

Changelog

Checked against the API code 2 November 2026

This page lists the changes to the public API that you could notice in your integration: new endpoints, new fields, new error codes, changed behaviour, fixes and deprecations. The newest change comes first.

Each date is the day the change takes effect. A change that could break an integration is listed here before that day. A Fixed entry is a response that did not match its documentation and now does. Fixes take effect without advance notice. Versioning says which changes count as breaking.

The changelog starts on 2 November 2026, with this site. Earlier changes are not listed.

  • New in the reference: GET /api/jobs/{jobId} returns the progress and outcome of a job that runs in the background. A VPS restart, for example, returns this path in operation.pollUrl. The endpoint was already live. It is now part of the public API, although its path does not start with /api/v2/.

  • Fixed: For a cancellation with cancelType: "immediate", scheduledAt is now the time of the request, the same as cancelledAt. It used to be the service’s next due date. end_of_period cancellations are unchanged. This applies to:

  • Fixed: For a web hosting account whose serviceStatus is cancelled, the cancellation now has status: "completed". It used to be revoked, which means a withdrawn cancellation. This applies to GET /api/v2/shared-hosting/{accountId}/cancellation, the web hosting items of GET /api/v2/cancellations and POST /api/v2/shared-hosting/{accountId}/actions/cancel. VPS cancellations already worked this way.

  • Changed: POST /api/v2/shared-hosting/{accountId}/actions/billing-cycle and POST /api/v2/vps/{id}/actions/billing-cycle now return 409 with their own codes where they used to return 400 invalid_request:

    Both carry recovery.action: "pay_outstanding_invoice" and the invoice in existingInvoice. existingInvoice is null when the API cannot name the invoice. Pay the invoice, then send the change again. If your code handles 400 invalid_request on these endpoints, branch on the new codes instead.

  • Changed: On web hosting whose paid period has ended, POST /api/v2/shared-hosting/{accountId}/actions/billing-cycle without cancelExistingInvoice now returns 409 overdue_invoice_blocking. When an unpaid invoice was open, it used to return 409 existing_invoice_blocking, which suggested a retry with cancelExistingInvoice: true. That retry could not succeed.

  • Changed: GET /api/v2/shared-hosting/{accountId}/actions/billing-cycle now returns actions.canChangeBillingCycle.allowed: false with a new field, code: "overdue_invoice", when the renewal invoice is overdue. That is when the paid period has ended. It is also when an invoice in blockingInvoices is past its due date. Pay the invoice first. Sending cancelExistingInvoice: true to the POST does not get past this gate. A preview with dryRun: true and cancelExistingInvoice: true returns wouldBlock: true only once the paid period has ended. Before that, it can return wouldBlock: false while the change itself fails with 409 overdue_invoice_blocking. Go by the gate’s code, not by the preview.