> ## Documentation Index
> Fetch the complete documentation index at: https://docs.storiza.store/llms.txt
> Use this file to discover all available pages before exploring further.

# Move a VPS to a larger plan, charging the prorated difference

> Charges the difference between the current plan and the new one for the days remaining in the current period, then resizes the machine and re-prices future renewals.

The renewal date is never moved — an upgrade buys capacity, not time. For $7/30d → $9/30d with 6 days left the charge is `(9 − 7) ÷ 30 × 6 = $0.40`, because those 6 days are already paid for at the old rate.

Send `dryRun: true` to price an upgrade without charging anything; the response carries the same figures the real call would use.

Downgrades are refused (`NOT_AN_UPGRADE`) — a plan must be at least as large in CPU, threads, RAM and storage, and larger in one of them. The server is stopped, resized and started again, so expect a short interruption.

**Required API key permission:** `vps:write`



## OpenAPI

````yaml /openapi.json post /vps/{id}/upgrade
openapi: 3.0.0
info:
  title: Storiza API
  version: '1.0'
  description: Manage Storiza servers, apps and subscriptions programmatically.
servers:
  - url: https://api.storiza.store
security:
  - bearerAuth: []
tags:
  - name: Servers
    description: Create, order, renew and upgrade VPS servers, and read their details.
  - name: Server power & commands
    description: >-
      Start, stop, reboot and force-stop a server, check its status and run
      commands on it.
  - name: Server settings
    description: >-
      Rename a server, reinstall its operating system and follow its
      installation.
  - name: Server firewall
    description: Turn a server's firewall on or off and manage its rules.
  - name: Server metrics
    description: CPU, memory, disk and network usage, now and over time.
  - name: Server backups
    description: Order the backup add-on, and take, list and delete backups.
  - name: Server snapshots
    description: Take, list and delete snapshots of a server.
  - name: Server sharing
    description: A share link that lets someone else open the server.
  - name: Server catalog
    description: >-
      Plans, operating systems, categories, datacenters and backup plans. Public
      — no key needed.
  - name: Apps
    description: >-
      Deploy, order, renew and configure apps — game servers, databases and
      bots.
  - name: App lifecycle & console
    description: >-
      Start, stop, restart and kill an app, read its output and metrics, and
      send it commands.
  - name: App files
    description: >-
      Read, write, move and delete the files in an app's volume, and its SFTP
      access.
  - name: App backups
    description: Back up an app, download a backup, and restore from one.
  - name: App domains
    description: Your own domains for an app, and their DNS verification.
  - name: App groups
    description: Private networks that let your apps reach each other by hostname.
  - name: App catalog
    description: Templates, plans and locations for apps.
  - name: Subscriptions
    description: What you pay for, how often it renews, and stopping or resuming it.
  - name: Payments
    description: >-
      Follow a payment after an order, and the methods and currencies you can
      pay with.
  - name: Account
    description: Your profile, and a summary of everything you own.
  - name: SSH keys
    description: Public keys you can install on new Linux servers.
paths:
  /vps/{id}/upgrade:
    post:
      tags:
        - Servers
      summary: Move a VPS to a larger plan, charging the prorated difference
      description: >-
        Charges the difference between the current plan and the new one for the
        days remaining in the current period, then resizes the machine and
        re-prices future renewals.


        The renewal date is never moved — an upgrade buys capacity, not time.
        For $7/30d → $9/30d with 6 days left the charge is `(9 − 7) ÷ 30 × 6 =
        $0.40`, because those 6 days are already paid for at the old rate.


        Send `dryRun: true` to price an upgrade without charging anything; the
        response carries the same figures the real call would use.


        Downgrades are refused (`NOT_AN_UPGRADE`) — a plan must be at least as
        large in CPU, threads, RAM and storage, and larger in one of them. The
        server is stopped, resized and started again, so expect a short
        interruption.


        **Required API key permission:** `vps:write`
      parameters:
        - schema:
            type: string
            minLength: 1
          required: true
          name: id
          in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                planId:
                  type: string
                  minLength: 1
                  description: The plan to move to.
                method:
                  type: string
                  minLength: 1
                  description: >-
                    Payment method slug. Defaults to the one the subscription is
                    billed with.
                currency:
                  type: string
                  minLength: 3
                  maxLength: 3
                dryRun:
                  type: boolean
                  default: false
                  description: Price the upgrade and charge nothing.
              required:
                - planId
      responses:
        '200':
          description: Upgrade started successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - true
                  message:
                    type: string
                    enum:
                      - Upgrade started successfully
                  data:
                    type: object
                    properties:
                      amount:
                        type: number
                      renewalAmount:
                        type: number
                      daysRemaining:
                        type: number
                      currentPlan:
                        type: string
                      newPlan:
                        type: string
                      dryRun:
                        type: boolean
                      transaction:
                        allOf:
                          - $ref: '#/components/schemas/Transaction'
                          - nullable: true
                            properties: {}
                    required:
                      - amount
                      - renewalAmount
                      - daysRemaining
                      - currentPlan
                      - newPlan
                      - dryRun
                      - transaction
                required:
                  - success
                  - message
                  - data
        '400':
          description: >-
            This plan is no longer available for new orders. Existing servers on
            it can still be renewed. | This plan is out of stock. Existing
            servers on it can still be renewed. | This plan is not available in
            the selected datacenter. | That plan is not larger than the current
            one. Downgrades are not supported — a disk cannot be shrunk once it
            has grown. | This VPS is already on that plan. | This subscription
            is not active. Renew it before upgrading — an upgrade buys capacity,
            not time.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                  type:
                    type: string
                  code:
                    type: string
                  error:
                    type: string
                  details:
                    nullable: true
                required:
                  - success
                  - type
                  - code
                  - error
              examples:
                planNotOrderable:
                  summary: >-
                    This plan is no longer available for new orders. Existing
                    servers on it can still be renewed.
                  value:
                    success: false
                    type: API
                    code: PLAN_NOT_ORDERABLE
                    error: >-
                      This plan is no longer available for new orders. Existing
                      servers on it can still be renewed.
                planOutOfStock:
                  summary: >-
                    This plan is out of stock. Existing servers on it can still
                    be renewed.
                  value:
                    success: false
                    type: API
                    code: PLAN_OUT_OF_STOCK
                    error: >-
                      This plan is out of stock. Existing servers on it can
                      still be renewed.
                datacenterNotSupported:
                  summary: This plan is not available in the selected datacenter.
                  value:
                    success: false
                    type: API
                    code: DATACENTER_NOT_SUPPORTED
                    error: This plan is not available in the selected datacenter.
                notAnUpgrade:
                  summary: >-
                    That plan is not larger than the current one. Downgrades are
                    not supported — a disk cannot be shrunk once it has grown.
                  value:
                    success: false
                    type: API
                    code: NOT_AN_UPGRADE
                    error: >-
                      That plan is not larger than the current one. Downgrades
                      are not supported — a disk cannot be shrunk once it has
                      grown.
                samePlan:
                  summary: This VPS is already on that plan.
                  value:
                    success: false
                    type: API
                    code: ALREADY_ON_PLAN
                    error: This VPS is already on that plan.
                notUpgradable:
                  summary: >-
                    This subscription is not active. Renew it before upgrading —
                    an upgrade buys capacity, not time.
                  value:
                    success: false
                    type: API
                    code: SUBSCRIPTION_NOT_ACTIVE
                    error: >-
                      This subscription is not active. Renew it before upgrading
                      — an upgrade buys capacity, not time.
        '401':
          description: Authentication required | Invalid API key | API key has expired
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                  type:
                    type: string
                  code:
                    type: string
                  error:
                    type: string
                  details:
                    nullable: true
                required:
                  - success
                  - type
                  - code
                  - error
              examples:
                authenticationRequired:
                  summary: Authentication required
                  value:
                    success: false
                    type: API
                    code: AUTHENTICATION_ERROR
                    error: Authentication required
                invalidApiKey:
                  summary: Invalid API key
                  value:
                    success: false
                    type: API
                    code: INVALID_API_KEY
                    error: Invalid API key
                expiredApiKey:
                  summary: API key has expired
                  value:
                    success: false
                    type: API
                    code: EXPIRED_API_KEY
                    error: API key has expired
        '403':
          description: >-
            Account is banned | Account is suspended | Insufficient permissions
            | This endpoint cannot be accessed with this authentication method |
            API key lacks the permission required for this endpoint | This API
            key is not permitted from your IP address
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                  type:
                    type: string
                  code:
                    type: string
                  error:
                    type: string
                  details:
                    nullable: true
                required:
                  - success
                  - type
                  - code
                  - error
              examples:
                accountBanned:
                  summary: Account is banned
                  value:
                    success: false
                    type: API
                    code: ACCOUNT_BANNED
                    error: Account is banned
                accountSuspended:
                  summary: Account is suspended
                  value:
                    success: false
                    type: API
                    code: ACCOUNT_SUSPENDED
                    error: Account is suspended
                insufficientPermissions:
                  summary: Insufficient permissions
                  value:
                    success: false
                    type: API
                    code: AUTHORIZATION_ERROR
                    error: Insufficient permissions
                transportNotAllowed:
                  summary: >-
                    This endpoint cannot be accessed with this authentication
                    method
                  value:
                    success: false
                    type: API
                    code: TRANSPORT_NOT_ALLOWED
                    error: >-
                      This endpoint cannot be accessed with this authentication
                      method
                missingPermission:
                  summary: API key lacks the permission required for this endpoint
                  value:
                    success: false
                    type: API
                    code: MISSING_PERMISSION
                    error: API key lacks the permission required for this endpoint
                ipNotAllowed:
                  summary: This API key is not permitted from your IP address
                  value:
                    success: false
                    type: API
                    code: IP_NOT_ALLOWED
                    error: This API key is not permitted from your IP address
        '404':
          description: VPS not found | Plan not found | Subscription not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                  type:
                    type: string
                  code:
                    type: string
                  error:
                    type: string
                  details:
                    nullable: true
                required:
                  - success
                  - type
                  - code
                  - error
              examples:
                vpsNotFound:
                  summary: VPS not found
                  value:
                    success: false
                    type: API
                    code: NOT_FOUND
                    error: VPS not found
                planNotFound:
                  summary: Plan not found
                  value:
                    success: false
                    type: API
                    code: NOT_FOUND
                    error: Plan not found
                subscriptionNotFound:
                  summary: Subscription not found
                  value:
                    success: false
                    type: API
                    code: NOT_FOUND
                    error: Subscription not found
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                  type:
                    type: string
                    enum:
                      - API
                  code:
                    type: string
                    enum:
                      - VALIDATION_ERROR
                  error:
                    type: string
                    enum:
                      - Validation error
                  details:
                    type: object
                    additionalProperties:
                      type: object
                      properties:
                        _errors:
                          type: array
                          items:
                            type: string
                required:
                  - success
                  - type
                  - code
                  - error
                  - details
              example:
                success: false
                type: API
                code: VALIDATION_ERROR
                error: Validation error
                details:
                  _errors:
                    - The whole schema has some validation problems
                  some_field:
                    _errors:
                      - This field has some validation problem
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                  type:
                    type: string
                    enum:
                      - API
                  code:
                    type: string
                    enum:
                      - INTERNAL_ERROR
                  error:
                    type: string
                    enum:
                      - Internal server error
                  details:
                    nullable: true
                required:
                  - success
                  - type
                  - code
                  - error
              example:
                success: false
                type: API
                code: INTERNAL_ERROR
                error: Internal server error
      security:
        - bearerAuth: []
components:
  schemas:
    Transaction:
      type: object
      properties:
        id:
          type: number
        description:
          type: string
        type:
          type: string
          enum:
            - topup
            - purchase
            - subscription_renewal
            - refund
        status:
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
            - cancelled
            - refunded
          default: pending
        direction:
          type: string
          enum:
            - deposit
            - withdrawal
          default: deposit
        method:
          type: string
          maxLength: 64
        provider:
          type: string
          maxLength: 64
        currency:
          description: >-
            The related currency. Sent **in full** when this endpoint includes
            it, otherwise **only its `id`** — fetch it separately if you need
            the rest. `null` when there is none.
          nullable: true
          anyOf:
            - $ref: '#/components/schemas/Currency'
            - title: Currency (id only)
              type: object
              properties:
                id:
                  type: string
                  description: The currency's id.
              required:
                - id
        conversionRate:
          type: number
          default: 1
        subtotalAmount:
          type: number
        discountAmount:
          type: number
          default: 0
        netAmount:
          type: number
        taxAmount:
          type: number
          default: 0
        totalAmount:
          type: number
        user:
          description: >-
            The related user. Sent **in full** when this endpoint includes it,
            otherwise **only its `id`** — fetch it separately if you need the
            rest. `null` when there is none.
          nullable: true
          anyOf:
            - $ref: '#/components/schemas/User'
            - title: User (id only)
              type: object
              properties:
                id:
                  type: string
                  description: The user's id.
              required:
                - id
        coupon:
          description: >-
            The related coupon. Sent **in full** when this endpoint includes it,
            otherwise **only its `id`** — fetch it separately if you need the
            rest. `null` when there is none.
          nullable: true
          anyOf:
            - $ref: '#/components/schemas/Coupon'
            - title: Coupon (id only)
              type: object
              properties:
                id:
                  type: string
                  description: The coupon's id.
              required:
                - id
        subscriptionId:
          type: string
          nullable: true
        checkoutUrl:
          type: string
        iframeUrl:
          type: string
        invoiceUrl:
          type: string
        supportsIframes:
          type: boolean
        applePaySession:
          type: object
          additionalProperties:
            nullable: true
        lastSyncedAt:
          type: string
          nullable: true
          format: date-time
        brand:
          type: string
          nullable: true
          maxLength: 32
        label:
          type: string
          nullable: true
          maxLength: 64
        billingName:
          type: string
          nullable: true
          maxLength: 255
        billingAddress:
          type: object
          nullable: true
          additionalProperties:
            nullable: true
        expiresAt:
          type: string
          format: date-time
          default: '2026-10-09T14:57:33.914Z'
        completedAt:
          type: string
          format: date-time
        provisionId:
          type: string
          nullable: true
        provisionData:
          type: object
          additionalProperties:
            nullable: true
        provisionedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - type
        - method
        - provider
        - subtotalAmount
        - netAmount
        - totalAmount
        - createdAt
        - updatedAt
      title: Transaction
      description: Schema for Transaction model
      example:
        id: 1042
        type: topup
        status: pending
        direction: deposit
        method: credit-cards
        provider: polar
        currency: null
        conversionRate: '1'
        subtotalAmount: '100'
        discountAmount: '10'
        netAmount: '90'
        taxAmount: '0'
        totalAmount: '90'
        user:
          id: 00000000-0000-4000-8000-000000000000
        coupon: null
        supportsIframes: false
        applePaySession: null
        expiresAt: '2026-10-09T15:57:33.916Z'
    Currency:
      type: object
      properties:
        id:
          type: string
          maxLength: 10
        symbol:
          type: string
          maxLength: 10
        shortName:
          type: string
          maxLength: 255
        fullName:
          type: string
          maxLength: 255
        nativeName:
          type: string
          maxLength: 255
        flagURL:
          type: string
          default: ''
        conversionRate:
          type: number
          default: 1
        symbolAfter:
          type: boolean
          default: false
        decimalSeparator:
          type: string
          maxLength: 5
          default: .
        thousandsSeparator:
          type: string
          maxLength: 5
          default: ','
        decimals:
          type: number
          default: 2
      required:
        - id
        - symbol
        - shortName
        - fullName
        - nativeName
      title: Currency
      description: Schema for Currency model
      example:
        id: USD
        symbol: $
        shortName: US Dollar
        fullName: United States Dollar
        nativeName: United States Dollar
        flagURL: https://flagcdn.com/w80/us.png
        conversionRate: '1'
        symbolAfter: false
        decimalSeparator: .
        thousandsSeparator: ','
        decimals: 2
    User:
      type: object
      properties:
        id:
          type: string
        username:
          type: string
          maxLength: 32
        email:
          type: string
        avatarURL:
          type: string
          nullable: true
        firstname:
          type: string
          nullable: true
          maxLength: 64
        lastname:
          type: string
          nullable: true
          maxLength: 64
        fullname:
          type: string
        flags:
          type: number
          default: 48
        theme:
          type: string
          enum:
            - light
            - dark
            - system
          default: system
        language:
          type: string
          enum:
            - en
            - ar
          default: en
        currency:
          type: string
          maxLength: 10
          default: USD
        timezone:
          type: string
          enum:
            - Africa/Abidjan
            - Africa/Accra
            - Africa/Addis_Ababa
            - Africa/Algiers
            - Africa/Asmera
            - Africa/Bamako
            - Africa/Bangui
            - Africa/Banjul
            - Africa/Bissau
            - Africa/Blantyre
            - Africa/Brazzaville
            - Africa/Bujumbura
            - Africa/Cairo
            - Africa/Casablanca
            - Africa/Ceuta
            - Africa/Conakry
            - Africa/Dakar
            - Africa/Dar_es_Salaam
            - Africa/Djibouti
            - Africa/Douala
            - Africa/El_Aaiun
            - Africa/Freetown
            - Africa/Gaborone
            - Africa/Harare
            - Africa/Johannesburg
            - Africa/Juba
            - Africa/Kampala
            - Africa/Khartoum
            - Africa/Kigali
            - Africa/Kinshasa
            - Africa/Lagos
            - Africa/Libreville
            - Africa/Lome
            - Africa/Luanda
            - Africa/Lubumbashi
            - Africa/Lusaka
            - Africa/Malabo
            - Africa/Maputo
            - Africa/Maseru
            - Africa/Mbabane
            - Africa/Mogadishu
            - Africa/Monrovia
            - Africa/Nairobi
            - Africa/Ndjamena
            - Africa/Niamey
            - Africa/Nouakchott
            - Africa/Ouagadougou
            - Africa/Porto-Novo
            - Africa/Sao_Tome
            - Africa/Tripoli
            - Africa/Tunis
            - Africa/Windhoek
            - America/Adak
            - America/Anchorage
            - America/Anguilla
            - America/Antigua
            - America/Araguaina
            - America/Argentina/La_Rioja
            - America/Argentina/Rio_Gallegos
            - America/Argentina/Salta
            - America/Argentina/San_Juan
            - America/Argentina/San_Luis
            - America/Argentina/Tucuman
            - America/Argentina/Ushuaia
            - America/Aruba
            - America/Asuncion
            - America/Bahia
            - America/Bahia_Banderas
            - America/Barbados
            - America/Belem
            - America/Belize
            - America/Blanc-Sablon
            - America/Boa_Vista
            - America/Bogota
            - America/Boise
            - America/Buenos_Aires
            - America/Cambridge_Bay
            - America/Campo_Grande
            - America/Cancun
            - America/Caracas
            - America/Catamarca
            - America/Cayenne
            - America/Cayman
            - America/Chicago
            - America/Chihuahua
            - America/Ciudad_Juarez
            - America/Coral_Harbour
            - America/Cordoba
            - America/Costa_Rica
            - America/Coyhaique
            - America/Creston
            - America/Cuiaba
            - America/Curacao
            - America/Danmarkshavn
            - America/Dawson
            - America/Dawson_Creek
            - America/Denver
            - America/Detroit
            - America/Dominica
            - America/Edmonton
            - America/Eirunepe
            - America/El_Salvador
            - America/Fort_Nelson
            - America/Fortaleza
            - America/Glace_Bay
            - America/Godthab
            - America/Goose_Bay
            - America/Grand_Turk
            - America/Grenada
            - America/Guadeloupe
            - America/Guatemala
            - America/Guayaquil
            - America/Guyana
            - America/Halifax
            - America/Havana
            - America/Hermosillo
            - America/Indiana/Knox
            - America/Indiana/Marengo
            - America/Indiana/Petersburg
            - America/Indiana/Tell_City
            - America/Indiana/Vevay
            - America/Indiana/Vincennes
            - America/Indiana/Winamac
            - America/Indianapolis
            - America/Inuvik
            - America/Iqaluit
            - America/Jamaica
            - America/Jujuy
            - America/Juneau
            - America/Kentucky/Monticello
            - America/Kralendijk
            - America/La_Paz
            - America/Lima
            - America/Los_Angeles
            - America/Louisville
            - America/Lower_Princes
            - America/Maceio
            - America/Managua
            - America/Manaus
            - America/Marigot
            - America/Martinique
            - America/Matamoros
            - America/Mazatlan
            - America/Mendoza
            - America/Menominee
            - America/Merida
            - America/Metlakatla
            - America/Mexico_City
            - America/Miquelon
            - America/Moncton
            - America/Monterrey
            - America/Montevideo
            - America/Montserrat
            - America/Nassau
            - America/New_York
            - America/Nome
            - America/Noronha
            - America/North_Dakota/Beulah
            - America/North_Dakota/Center
            - America/North_Dakota/New_Salem
            - America/Ojinaga
            - America/Panama
            - America/Paramaribo
            - America/Phoenix
            - America/Port-au-Prince
            - America/Port_of_Spain
            - America/Porto_Velho
            - America/Puerto_Rico
            - America/Punta_Arenas
            - America/Rankin_Inlet
            - America/Recife
            - America/Regina
            - America/Resolute
            - America/Rio_Branco
            - America/Santarem
            - America/Santiago
            - America/Santo_Domingo
            - America/Sao_Paulo
            - America/Scoresbysund
            - America/Sitka
            - America/St_Barthelemy
            - America/St_Johns
            - America/St_Kitts
            - America/St_Lucia
            - America/St_Thomas
            - America/St_Vincent
            - America/Swift_Current
            - America/Tegucigalpa
            - America/Thule
            - America/Tijuana
            - America/Toronto
            - America/Tortola
            - America/Vancouver
            - America/Whitehorse
            - America/Winnipeg
            - America/Yakutat
            - Antarctica/Casey
            - Antarctica/Davis
            - Antarctica/DumontDUrville
            - Antarctica/Macquarie
            - Antarctica/Mawson
            - Antarctica/McMurdo
            - Antarctica/Palmer
            - Antarctica/Rothera
            - Antarctica/Syowa
            - Antarctica/Troll
            - Antarctica/Vostok
            - Arctic/Longyearbyen
            - Asia/Aden
            - Asia/Almaty
            - Asia/Amman
            - Asia/Anadyr
            - Asia/Aqtau
            - Asia/Aqtobe
            - Asia/Ashgabat
            - Asia/Atyrau
            - Asia/Baghdad
            - Asia/Bahrain
            - Asia/Baku
            - Asia/Bangkok
            - Asia/Barnaul
            - Asia/Beirut
            - Asia/Bishkek
            - Asia/Brunei
            - Asia/Calcutta
            - Asia/Chita
            - Asia/Colombo
            - Asia/Damascus
            - Asia/Dhaka
            - Asia/Dili
            - Asia/Dubai
            - Asia/Dushanbe
            - Asia/Famagusta
            - Asia/Gaza
            - Asia/Hebron
            - Asia/Hong_Kong
            - Asia/Hovd
            - Asia/Irkutsk
            - Asia/Jakarta
            - Asia/Jayapura
            - Asia/Jerusalem
            - Asia/Kabul
            - Asia/Kamchatka
            - Asia/Karachi
            - Asia/Katmandu
            - Asia/Khandyga
            - Asia/Krasnoyarsk
            - Asia/Kuala_Lumpur
            - Asia/Kuching
            - Asia/Kuwait
            - Asia/Macau
            - Asia/Magadan
            - Asia/Makassar
            - Asia/Manila
            - Asia/Muscat
            - Asia/Nicosia
            - Asia/Novokuznetsk
            - Asia/Novosibirsk
            - Asia/Omsk
            - Asia/Oral
            - Asia/Phnom_Penh
            - Asia/Pontianak
            - Asia/Pyongyang
            - Asia/Qatar
            - Asia/Qostanay
            - Asia/Qyzylorda
            - Asia/Rangoon
            - Asia/Riyadh
            - Asia/Saigon
            - Asia/Sakhalin
            - Asia/Samarkand
            - Asia/Seoul
            - Asia/Shanghai
            - Asia/Singapore
            - Asia/Srednekolymsk
            - Asia/Taipei
            - Asia/Tashkent
            - Asia/Tbilisi
            - Asia/Tehran
            - Asia/Thimphu
            - Asia/Tokyo
            - Asia/Tomsk
            - Asia/Ulaanbaatar
            - Asia/Urumqi
            - Asia/Ust-Nera
            - Asia/Vientiane
            - Asia/Vladivostok
            - Asia/Yakutsk
            - Asia/Yekaterinburg
            - Asia/Yerevan
            - Atlantic/Azores
            - Atlantic/Bermuda
            - Atlantic/Canary
            - Atlantic/Cape_Verde
            - Atlantic/Faeroe
            - Atlantic/Madeira
            - Atlantic/Reykjavik
            - Atlantic/South_Georgia
            - Atlantic/St_Helena
            - Atlantic/Stanley
            - Australia/Adelaide
            - Australia/Brisbane
            - Australia/Broken_Hill
            - Australia/Darwin
            - Australia/Eucla
            - Australia/Hobart
            - Australia/Lindeman
            - Australia/Lord_Howe
            - Australia/Melbourne
            - Australia/Perth
            - Australia/Sydney
            - Europe/Amsterdam
            - Europe/Andorra
            - Europe/Astrakhan
            - Europe/Athens
            - Europe/Belgrade
            - Europe/Berlin
            - Europe/Bratislava
            - Europe/Brussels
            - Europe/Bucharest
            - Europe/Budapest
            - Europe/Busingen
            - Europe/Chisinau
            - Europe/Copenhagen
            - Europe/Dublin
            - Europe/Gibraltar
            - Europe/Guernsey
            - Europe/Helsinki
            - Europe/Isle_of_Man
            - Europe/Istanbul
            - Europe/Jersey
            - Europe/Kaliningrad
            - Europe/Kiev
            - Europe/Kirov
            - Europe/Lisbon
            - Europe/Ljubljana
            - Europe/London
            - Europe/Luxembourg
            - Europe/Madrid
            - Europe/Malta
            - Europe/Mariehamn
            - Europe/Minsk
            - Europe/Monaco
            - Europe/Moscow
            - Europe/Oslo
            - Europe/Paris
            - Europe/Podgorica
            - Europe/Prague
            - Europe/Riga
            - Europe/Rome
            - Europe/Samara
            - Europe/San_Marino
            - Europe/Sarajevo
            - Europe/Saratov
            - Europe/Simferopol
            - Europe/Skopje
            - Europe/Sofia
            - Europe/Stockholm
            - Europe/Tallinn
            - Europe/Tirane
            - Europe/Ulyanovsk
            - Europe/Vaduz
            - Europe/Vatican
            - Europe/Vienna
            - Europe/Vilnius
            - Europe/Volgograd
            - Europe/Warsaw
            - Europe/Zagreb
            - Europe/Zurich
            - Indian/Antananarivo
            - Indian/Chagos
            - Indian/Christmas
            - Indian/Cocos
            - Indian/Comoro
            - Indian/Kerguelen
            - Indian/Mahe
            - Indian/Maldives
            - Indian/Mauritius
            - Indian/Mayotte
            - Indian/Reunion
            - Pacific/Apia
            - Pacific/Auckland
            - Pacific/Bougainville
            - Pacific/Chatham
            - Pacific/Easter
            - Pacific/Efate
            - Pacific/Enderbury
            - Pacific/Fakaofo
            - Pacific/Fiji
            - Pacific/Funafuti
            - Pacific/Galapagos
            - Pacific/Gambier
            - Pacific/Guadalcanal
            - Pacific/Guam
            - Pacific/Honolulu
            - Pacific/Kiritimati
            - Pacific/Kosrae
            - Pacific/Kwajalein
            - Pacific/Majuro
            - Pacific/Marquesas
            - Pacific/Midway
            - Pacific/Nauru
            - Pacific/Niue
            - Pacific/Norfolk
            - Pacific/Noumea
            - Pacific/Pago_Pago
            - Pacific/Palau
            - Pacific/Pitcairn
            - Pacific/Ponape
            - Pacific/Port_Moresby
            - Pacific/Rarotonga
            - Pacific/Saipan
            - Pacific/Tahiti
            - Pacific/Tarawa
            - Pacific/Tongatapu
            - Pacific/Truk
            - Pacific/Wake
            - Pacific/Wallis
          default: Europe/London
        notificationPreferences:
          type: object
          properties:
            securityAlerts:
              type: boolean
            billingNotifications:
              type: boolean
            serverStatus:
              type: boolean
            productUpdates:
              type: boolean
            newsletter:
              type: boolean
            marketingEmails:
              type: boolean
          default:
            securityAlerts: true
            billingNotifications: true
            serverStatus: true
            productUpdates: true
            newsletter: false
            marketingEmails: false
          required:
            - securityAlerts
            - billingNotifications
            - serverStatus
            - productUpdates
            - newsletter
            - marketingEmails
        loginMethods:
          type: string
          enum:
            - google
            - discord
            - password
        twoFactorEnabled:
          type: boolean
        balance:
          type: number
          default: 0
        addressLine1:
          type: string
          nullable: true
          maxLength: 255
        addressLine2:
          type: string
          nullable: true
          maxLength: 255
        city:
          type: string
          nullable: true
          maxLength: 100
        state:
          type: string
          nullable: true
          maxLength: 100
        postalCode:
          type: string
          nullable: true
          maxLength: 20
        country:
          type: string
          nullable: true
          maxLength: 2
        phoneNumber:
          type: string
          nullable: true
          maxLength: 20
        accountLimits:
          type: object
          properties:
            apps:
              type: number
            vps:
              type: number
            priceByApp:
              type: number
            priceByVPS:
              type: number
            timeByApp:
              type: number
            timeByVPS:
              type: number
            mode:
              type: string
          default:
            apps: -1
            vps: -1
            priceByApp: -1
            priceByVPS: -1
            timeByApp: -1
            timeByVPS: -1
            mode: unlimited
          required:
            - apps
            - vps
            - priceByApp
            - priceByVPS
            - timeByApp
            - timeByVPS
            - mode
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        isVerified:
          type: boolean
        isSuspended:
          type: boolean
        isBanned:
          type: boolean
        isAdmin:
          type: boolean
        isSupport:
          type: boolean
        isBetaTester:
          type: boolean
      required:
        - username
        - email
        - updatedAt
      title: User
      description: Schema for User model
      example:
        id: 00000000-0000-4000-8000-000000000000
        username: example
        email: user@example.com
        firstname: First
        lastname: Last
        fullname: First Last
        flags: '48'
        theme: system
        language: en
        currency: USD
        timezone: Europe/London
        notificationPreferences:
          securityAlerts: true
          billingNotifications: true
          serverStatus: true
          productUpdates: true
          newsletter: false
          marketingEmails: false
        loginMethods: []
        twoFactorEnabled: false
        balance: '0'
        accountLimits:
          apps: -1
          vps: -1
          priceByApp: -1
          priceByVPS: -1
          timeByApp: -1
          timeByVPS: -1
          mode: unlimited
        createdAt: '2026-10-09T14:57:33.835Z'
        isVerified: false
        isSuspended: false
        isBanned: false
        isAdmin: false
        isSupport: false
        isBetaTester: false
    Coupon:
      type: object
      properties:
        id:
          type: string
        code:
          type: string
          maxLength: 64
        name:
          type: string
          maxLength: 255
        description:
          type: string
          nullable: true
        status:
          type: string
          enum:
            - active
            - inactive
          default: active
        type:
          type: string
          enum:
            - percentage
            - fixed
        value:
          type: number
        minDiscountAmount:
          type: number
          nullable: true
        maxDiscountAmount:
          type: number
          nullable: true
        minOrderAmount:
          type: number
          nullable: true
        maxUses:
          type: number
          nullable: true
        maxUsesPerAccount:
          type: number
          nullable: true
        maxUsesPerIP:
          type: number
          nullable: true
        maxUsesPerFingerprint:
          type: number
          nullable: true
        usedCount:
          type: number
          default: 0
        validFrom:
          type: string
          nullable: true
          format: date-time
        validUntil:
          type: string
          nullable: true
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - code
        - name
        - type
        - value
        - createdAt
        - updatedAt
      title: Coupon
      description: Schema for Coupon model
      example:
        id: 00000000-0000-4000-8000-000000000000
        code: SAVE14
        name: 14% off
        status: active
        type: percentage
        value: '14'
        usedCount: 0
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        An API key from the Storiza dashboard (API & Integrations), sent as
        `Authorization: Bearer stz_…`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.