Change hosting plan

POST /api/v2/shared-hosting/{accountId}/actions/upgrade

Preview or commit a shared-hosting plan change.

Send a catalog productSlug such as webbhotell-business; use dryRun: true first.

Upgrades are applied immediately and may require payment.

Downgrades are scheduled for the next paid-period boundary: the current package remains active until scheduledChange.effectiveAt, no current-period refund is issued, and the response has scheduled: true.

A downgrade to a storage-limited package is rejected when current disk usage exceeds that package's limit.

Reseller-package transitions require support.

Only one scheduled package change can exist at a time; cancel it with DELETE on this endpoint before choosing another package.

If an unpaid invoice already exists for the service, the commit returns 409 existing_invoice_blocking with the invoice reference and a suggested retry body; pay the invoice or retry with cancelExistingInvoice: true.

In rare cases a committed change can fail to generate the next renewal invoice; the endpoint then returns 502 upstream_renewal_regeneration_failed — the plan change is already committed, so contact support instead of retrying.

Web Hosting Plans & Billing

Authentication

Required API scope: write:billing

Authenticate with an API key in the Authorization: Bearer <token> header.

Context

Path Parameters

accountId string required Example: acct_01hxa3b4c5d6e7f8g9h0j1k2m3

Public shared-hosting account ID from GET /api/v2/shared-hosting data[].id. Do not invent this value; use the exact ID returned by the referenced API response.

Headers

Authorization Bearer <token>
Accept application/json
Content-Type application/json

Body

required
application/json
productSlug string required · Example: webbhotell-business
dryRun boolean · Example: true
cancelExistingInvoice boolean · Example: false

Responses

200 Plan-change preview or result.
status: preview
dryRun boolean · enum required
true
status string · enum required
preview
changeKind string · enum required
upgrade
downgrade
currentProduct object · nullable required

newProduct object · nullable required

paymentInvoice null required
renewalInvoice object required
renewalInvoice.amount number required · Example: 39
renewalInvoice.currencyCode string required · Example: SEK
renewalInvoice.servicePeriodEndAt string · nullable

End of the service period covered by the immediate charge. For a bandwidth-only increase this is the next monthly bandwidth reset; for a prorated recurring-resource increase it is the current paid-through boundary. Omitted when the preview is not a current-period charge.

renewalInvoice.paymentMethods object
renewalInvoice.paymentMethods.card object required
renewalInvoice.paymentMethods.card.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
renewalInvoice.paymentMethods.card.label string required · Example: Card
renewalInvoice.paymentMethods.card.available boolean required · Example: true
renewalInvoice.paymentMethods.card.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

renewalInvoice.paymentMethods.card.reason string · nullable required · Example: null

Human-readable blocker when available is false.

renewalInvoice.paymentMethods.card.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
renewalInvoice.paymentMethods.card.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

renewalInvoice.paymentMethods.card.requirements.invoiceCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.card.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
renewalInvoice.paymentMethods.card.requirements.accountCountryCode string · Example: SE
renewalInvoice.paymentMethods.card.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

renewalInvoice.paymentMethods.card.requirements.accountType string · enum · Example: private
private
organisation
renewalInvoice.paymentMethods.card.requirements.accountCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.card.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

renewalInvoice.paymentMethods.card.requirements.availableBalance object
renewalInvoice.paymentMethods.card.requirements.availableBalance.amount number required · Example: 100
renewalInvoice.paymentMethods.card.requirements.availableBalance.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.card.requirements.minimumAmount object
renewalInvoice.paymentMethods.card.requirements.minimumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.card.requirements.minimumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.card.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.card.requirements.maximumAmount object
renewalInvoice.paymentMethods.card.requirements.maximumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.card.requirements.maximumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.card.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.accountCredit object required
renewalInvoice.paymentMethods.accountCredit.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
renewalInvoice.paymentMethods.accountCredit.label string required · Example: Card
renewalInvoice.paymentMethods.accountCredit.available boolean required · Example: true
renewalInvoice.paymentMethods.accountCredit.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

renewalInvoice.paymentMethods.accountCredit.reason string · nullable required · Example: null

Human-readable blocker when available is false.

renewalInvoice.paymentMethods.accountCredit.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
renewalInvoice.paymentMethods.accountCredit.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

renewalInvoice.paymentMethods.accountCredit.requirements.invoiceCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.accountCredit.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
renewalInvoice.paymentMethods.accountCredit.requirements.accountCountryCode string · Example: SE
renewalInvoice.paymentMethods.accountCredit.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

renewalInvoice.paymentMethods.accountCredit.requirements.accountType string · enum · Example: private
private
organisation
renewalInvoice.paymentMethods.accountCredit.requirements.accountCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.accountCredit.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

renewalInvoice.paymentMethods.accountCredit.requirements.availableBalance object
renewalInvoice.paymentMethods.accountCredit.requirements.availableBalance.amount number required · Example: 100
renewalInvoice.paymentMethods.accountCredit.requirements.availableBalance.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.accountCredit.requirements.minimumAmount object
renewalInvoice.paymentMethods.accountCredit.requirements.minimumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.accountCredit.requirements.minimumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.accountCredit.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.accountCredit.requirements.maximumAmount object
renewalInvoice.paymentMethods.accountCredit.requirements.maximumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.accountCredit.requirements.maximumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.accountCredit.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.swish object required
renewalInvoice.paymentMethods.swish.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
renewalInvoice.paymentMethods.swish.label string required · Example: Card
renewalInvoice.paymentMethods.swish.available boolean required · Example: true
renewalInvoice.paymentMethods.swish.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

renewalInvoice.paymentMethods.swish.reason string · nullable required · Example: null

Human-readable blocker when available is false.

renewalInvoice.paymentMethods.swish.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
renewalInvoice.paymentMethods.swish.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

renewalInvoice.paymentMethods.swish.requirements.invoiceCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.swish.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
renewalInvoice.paymentMethods.swish.requirements.accountCountryCode string · Example: SE
renewalInvoice.paymentMethods.swish.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

renewalInvoice.paymentMethods.swish.requirements.accountType string · enum · Example: private
private
organisation
renewalInvoice.paymentMethods.swish.requirements.accountCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.swish.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

renewalInvoice.paymentMethods.swish.requirements.availableBalance object
renewalInvoice.paymentMethods.swish.requirements.availableBalance.amount number required · Example: 100
renewalInvoice.paymentMethods.swish.requirements.availableBalance.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.swish.requirements.minimumAmount object
renewalInvoice.paymentMethods.swish.requirements.minimumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.swish.requirements.minimumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.swish.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.swish.requirements.maximumAmount object
renewalInvoice.paymentMethods.swish.requirements.maximumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.swish.requirements.maximumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.swish.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.bankgiro object required
renewalInvoice.paymentMethods.bankgiro.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
renewalInvoice.paymentMethods.bankgiro.label string required · Example: Card
renewalInvoice.paymentMethods.bankgiro.available boolean required · Example: true
renewalInvoice.paymentMethods.bankgiro.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

renewalInvoice.paymentMethods.bankgiro.reason string · nullable required · Example: null

Human-readable blocker when available is false.

renewalInvoice.paymentMethods.bankgiro.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
renewalInvoice.paymentMethods.bankgiro.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

renewalInvoice.paymentMethods.bankgiro.requirements.invoiceCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.bankgiro.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
renewalInvoice.paymentMethods.bankgiro.requirements.accountCountryCode string · Example: SE
renewalInvoice.paymentMethods.bankgiro.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

renewalInvoice.paymentMethods.bankgiro.requirements.accountType string · enum · Example: private
private
organisation
renewalInvoice.paymentMethods.bankgiro.requirements.accountCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.bankgiro.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

renewalInvoice.paymentMethods.bankgiro.requirements.availableBalance object
renewalInvoice.paymentMethods.bankgiro.requirements.availableBalance.amount number required · Example: 100
renewalInvoice.paymentMethods.bankgiro.requirements.availableBalance.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.bankgiro.requirements.minimumAmount object
renewalInvoice.paymentMethods.bankgiro.requirements.minimumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.bankgiro.requirements.minimumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.bankgiro.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.bankgiro.requirements.maximumAmount object
renewalInvoice.paymentMethods.bankgiro.requirements.maximumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.bankgiro.requirements.maximumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.bankgiro.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.sepa object required
renewalInvoice.paymentMethods.sepa.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
renewalInvoice.paymentMethods.sepa.label string required · Example: Card
renewalInvoice.paymentMethods.sepa.available boolean required · Example: true
renewalInvoice.paymentMethods.sepa.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

renewalInvoice.paymentMethods.sepa.reason string · nullable required · Example: null

Human-readable blocker when available is false.

renewalInvoice.paymentMethods.sepa.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
renewalInvoice.paymentMethods.sepa.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

renewalInvoice.paymentMethods.sepa.requirements.invoiceCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.sepa.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
renewalInvoice.paymentMethods.sepa.requirements.accountCountryCode string · Example: SE
renewalInvoice.paymentMethods.sepa.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

renewalInvoice.paymentMethods.sepa.requirements.accountType string · enum · Example: private
private
organisation
renewalInvoice.paymentMethods.sepa.requirements.accountCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.sepa.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

renewalInvoice.paymentMethods.sepa.requirements.availableBalance object
renewalInvoice.paymentMethods.sepa.requirements.availableBalance.amount number required · Example: 100
renewalInvoice.paymentMethods.sepa.requirements.availableBalance.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.sepa.requirements.minimumAmount object
renewalInvoice.paymentMethods.sepa.requirements.minimumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.sepa.requirements.minimumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.sepa.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.sepa.requirements.maximumAmount object
renewalInvoice.paymentMethods.sepa.requirements.maximumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.sepa.requirements.maximumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.sepa.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.alipay object required
renewalInvoice.paymentMethods.alipay.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
renewalInvoice.paymentMethods.alipay.label string required · Example: Card
renewalInvoice.paymentMethods.alipay.available boolean required · Example: true
renewalInvoice.paymentMethods.alipay.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

renewalInvoice.paymentMethods.alipay.reason string · nullable required · Example: null

Human-readable blocker when available is false.

renewalInvoice.paymentMethods.alipay.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
renewalInvoice.paymentMethods.alipay.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

renewalInvoice.paymentMethods.alipay.requirements.invoiceCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.alipay.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
renewalInvoice.paymentMethods.alipay.requirements.accountCountryCode string · Example: SE
renewalInvoice.paymentMethods.alipay.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

renewalInvoice.paymentMethods.alipay.requirements.accountType string · enum · Example: private
private
organisation
renewalInvoice.paymentMethods.alipay.requirements.accountCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.alipay.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

renewalInvoice.paymentMethods.alipay.requirements.availableBalance object
renewalInvoice.paymentMethods.alipay.requirements.availableBalance.amount number required · Example: 100
renewalInvoice.paymentMethods.alipay.requirements.availableBalance.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.alipay.requirements.minimumAmount object
renewalInvoice.paymentMethods.alipay.requirements.minimumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.alipay.requirements.minimumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.alipay.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.alipay.requirements.maximumAmount object
renewalInvoice.paymentMethods.alipay.requirements.maximumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.alipay.requirements.maximumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.alipay.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.crypto object required
renewalInvoice.paymentMethods.crypto.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
renewalInvoice.paymentMethods.crypto.label string required · Example: Card
renewalInvoice.paymentMethods.crypto.available boolean required · Example: true
renewalInvoice.paymentMethods.crypto.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

renewalInvoice.paymentMethods.crypto.reason string · nullable required · Example: null

Human-readable blocker when available is false.

renewalInvoice.paymentMethods.crypto.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
renewalInvoice.paymentMethods.crypto.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

renewalInvoice.paymentMethods.crypto.requirements.invoiceCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.crypto.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
renewalInvoice.paymentMethods.crypto.requirements.accountCountryCode string · Example: SE
renewalInvoice.paymentMethods.crypto.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

renewalInvoice.paymentMethods.crypto.requirements.accountType string · enum · Example: private
private
organisation
renewalInvoice.paymentMethods.crypto.requirements.accountCurrencyCode string · Example: SEK
renewalInvoice.paymentMethods.crypto.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

renewalInvoice.paymentMethods.crypto.requirements.availableBalance object
renewalInvoice.paymentMethods.crypto.requirements.availableBalance.amount number required · Example: 100
renewalInvoice.paymentMethods.crypto.requirements.availableBalance.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.crypto.requirements.minimumAmount object
renewalInvoice.paymentMethods.crypto.requirements.minimumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.crypto.requirements.minimumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.crypto.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.paymentMethods.crypto.requirements.maximumAmount object
renewalInvoice.paymentMethods.crypto.requirements.maximumAmount.amount number required · Example: 3
renewalInvoice.paymentMethods.crypto.requirements.maximumAmount.currencyCode string required · Example: SEK
renewalInvoice.paymentMethods.crypto.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
renewalInvoice.availablePaymentMethods array<string>
renewalInvoice.actions object
renewalInvoice.actions.canPayWithAvailableMethod object required
renewalInvoice.actions.canPayWithAvailableMethod.allowed boolean required
renewalInvoice.actions.canPayWithAvailableMethod.reason string · nullable required

Nullable: may be null when not applicable.

actions object required
actions.canCommit object required
actions.canCommit.allowed boolean required
actions.canCommit.reason string · nullable required

Nullable: may be null when not applicable.

scheduled boolean

True for a downgrade preview that will take effect next period.

scheduledChange object
scheduledChange.status string · enum required
preview
scheduled
awaiting_payment
paid
applying
applied
needs_attention
cancelling
cancelled
scheduledChange.effectiveAt string · nullable required

Nullable: may be null when not applicable.

scheduledChange.invoiceIssueAt string · nullable required

Nullable: may be null when not applicable.

scheduledChange.target object required
scheduledChange.target.productSlug string
scheduledChange.target.resources object
scheduledChange.target.billing object required
scheduledChange.target.billing.amount number · nullable required

Nullable: may be null when not applicable.

scheduledChange.target.billing.currencyCode string required
scheduledChange.target.billing.billingCycle string · enum required
monthly
quarterly
semiannually
annually
biennially
triennially
free
scheduledChange.actions object required
scheduledChange.actions.canCancel object required
scheduledChange.actions.canCancel.allowed boolean required
scheduledChange.actions.canCancel.reason string · nullable required

Nullable: may be null when not applicable.

Variant 2
status string · enum required
scheduled
awaiting_payment
applied
changeKind string · enum required
upgrade
downgrade
currentProduct object · nullable required

newProduct object · nullable required

paymentInvoice object | null required
paymentInvoice.id string · nullable required · Example: inv_01hxa3b4c5d6e7f8g9h0j1k2m3

Nullable: may be null when not applicable.

paymentInvoice.number string · nullable required · Example: 202600001

Nullable: may be null when not applicable.

paymentInvoice.amount number · nullable required · Example: 99

Invoice amount in the currency given by currencyCode.

paymentInvoice.currencyCode string required · Example: SEK
paymentInvoice.dueAt string · nullable required · Example: 2026-05-27T00:00:00.000Z

Nullable: may be null when not applicable.

paymentInvoice.status string required · Example: unpaid
paymentInvoice.paymentUrl string · nullable required · Example: /billing?invoice=202600001

Nullable: may be null when not applicable.

renewalInvoice object | null required
renewalInvoice.id string · nullable required · Example: inv_01hxa3b4c5d6e7f8g9h0j1k2m3

Nullable: may be null when not applicable.

renewalInvoice.number string · nullable required · Example: 202600001

Nullable: may be null when not applicable.

renewalInvoice.amount number · nullable required · Example: 99

Invoice amount in the currency given by currencyCode.

renewalInvoice.currencyCode string required · Example: SEK
renewalInvoice.dueAt string · nullable required · Example: 2026-05-27T00:00:00.000Z

Nullable: may be null when not applicable.

renewalInvoice.status string required · Example: unpaid
renewalInvoice.paymentUrl string · nullable required · Example: /billing?invoice=202600001

Nullable: may be null when not applicable.

scheduled boolean

True when the downgrade was scheduled instead of applied immediately.

scheduledChange object
scheduledChange.status string · enum required
preview
scheduled
awaiting_payment
paid
applying
applied
needs_attention
cancelling
cancelled
scheduledChange.effectiveAt string · nullable required

Nullable: may be null when not applicable.

scheduledChange.invoiceIssueAt string · nullable required

Nullable: may be null when not applicable.

scheduledChange.target object required
scheduledChange.target.productSlug string
scheduledChange.target.resources object
scheduledChange.target.billing object required
scheduledChange.target.billing.amount number · nullable required

Nullable: may be null when not applicable.

scheduledChange.target.billing.currencyCode string required
scheduledChange.target.billing.billingCycle string · enum required
monthly
quarterly
semiannually
annually
biennially
triennially
free
scheduledChange.actions object required
scheduledChange.actions.canCancel object required
scheduledChange.actions.canCancel.allowed boolean required
scheduledChange.actions.canCancel.reason string · nullable required

Nullable: may be null when not applicable.

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
401 Unauthorized. Authentication is required.
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
403 Forbidden. The caller lacks a required scope or does not own the resource.
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
409 The plan change is blocked: an unpaid invoice already exists (existing_invoice_blocking), a scheduled change already exists (scheduled_change_in_progress), scheduled-change processing is temporarily unavailable (scheduled_change_processing_unavailable), the transition is not supported (unsupported_plan_transition), or current storage use exceeds the target plan (target_plan_capacity_exceeded).
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
502 The plan change committed, but the next renewal invoice could not be generated. Do not retry the request — the change is already committed; contact support so billing can be restored.
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
POST https://cloud.hostup.se/api/v2/shared-hosting/{accountId}/actions/upgrade
For AI assistants
View as Markdown
cURL
curl -X POST "https://cloud.hostup.se/api/v2/shared-hosting/acct_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/upgrade" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "productSlug": "webbhotell-business",
    "dryRun": true
  }'
Response
// Immediate hosting upgrade
{
  "status": "awaiting_payment",
  "changeKind": "upgrade",
  "currentProduct": {
    "slug": "webbhotell-start",
    "name": "Start"
  },
  "newProduct": {
    "slug": "webbhotell-business",
    "name": "Business"
  },
  "paymentInvoice": {
    "id": "inv_01hxa3b4c5d6e7f8g9h0j1k2m3",
    "number": "202600001",
    "amount": 100,
    "currencyCode": "SEK",
    "dueAt": "2026-05-27T00:00:00.000Z",
    "status": "unpaid",
    "paymentUrl": "/billing?invoice=202600001"
  },
  "renewalInvoice": null
}

// Hosting downgrade scheduled for the next paid period
{
  "status": "scheduled",
  "changeKind": "downgrade",
  "scheduled": true,
  "currentProduct": {
    "slug": "webbhotell-business",
    "name": "Business"
  },
  "newProduct": {
    "slug": "webbhotell-start",
    "name": "Start"
  },
  "scheduledChange": {
    "status": "awaiting_payment",
    "effectiveAt": "2026-08-11T00:00:00.000Z",
    "invoiceIssueAt": "2026-07-12T00:00:00.000Z",
    "target": {
      "productSlug": "webbhotell-start",
      "billing": {
        "amount": 39,
        "currencyCode": "SEK",
        "billingCycle": "annually"
      }
    },
    "actions": {
      "canCancel": {
        "allowed": true,
        "reason": null
      }
    }
  },
  "paymentInvoice": null,
  "renewalInvoice": null
}
Request Body Preview upgrade
{
  "productSlug": "webbhotell-business",
  "dryRun": true
}