> ## 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.

# Buy an additional IP for this server

> Raises a transaction for one additional public IP on this server, billed as its own subscription for the chosen period and priced like a VPS (the same short-term fee for 7 and 14 days). Paid from `balance` it settles at once; any other method returns a `checkoutUrl` and the IP is assigned when the payment settles. Coupons apply.

The address is taken from the server's own node when the payment settles. It must then be configured inside the server's OS; `GET /vps/:id` lists it under `additionalIpDetails` with its netmask and gateway.

Refused with the same codes as `GET /vps/:id/additional-ips/quote` when it cannot be bought (`NOT_FOR_SALE`, `NO_FREE_IP`, `LIMIT_REACHED`, `PRIVATE_IP_SERVER`, `SERVER_NOT_ACTIVE`). If the last free IP is taken between checkout and payment, the order is kept and support is notified to assign one.

An unpaid IP stops working when its period ends and is released 48 hours later. Cancel with `POST /payments/subscriptions/:id/cancel`; move it with `POST /vps-additional-ips/:id/move`. Owner only.

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



## OpenAPI

````yaml /openapi.json post /vps/{id}/additional-ips/order
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 additional IPs
    description: >-
      Buy extra public IPs for a server, move them between servers, and renew
      them.
  - 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}/additional-ips/order:
    post:
      tags:
        - Server additional IPs
      summary: Buy an additional IP for this server
      description: >-
        Raises a transaction for one additional public IP on this server, billed
        as its own subscription for the chosen period and priced like a VPS (the
        same short-term fee for 7 and 14 days). Paid from `balance` it settles
        at once; any other method returns a `checkoutUrl` and the IP is assigned
        when the payment settles. Coupons apply.


        The address is taken from the server's own node when the payment
        settles. It must then be configured inside the server's OS; `GET
        /vps/:id` lists it under `additionalIpDetails` with its netmask and
        gateway.


        Refused with the same codes as `GET /vps/:id/additional-ips/quote` when
        it cannot be bought (`NOT_FOR_SALE`, `NO_FREE_IP`, `LIMIT_REACHED`,
        `PRIVATE_IP_SERVER`, `SERVER_NOT_ACTIVE`). If the last free IP is taken
        between checkout and payment, the order is kept and support is notified
        to assign one.


        An unpaid IP stops working when its period ends and is released 48 hours
        later. Cancel with `POST /payments/subscriptions/:id/cancel`; move it
        with `POST /vps-additional-ips/:id/move`. Owner only.


        **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:
                method:
                  type: string
                  minLength: 1
                  description: >-
                    Payment method slug, e.g. `balance`. See GET
                    /payments/methods
                duration:
                  type: integer
                  default: 30
                currency:
                  type: string
                  minLength: 3
                  maxLength: 3
                  default: USD
                couponCode:
                  type: string
                  minLength: 1
                  maxLength: 64
                stopAutoRenew:
                  type: boolean
                  description: >-
                    Never charge renewals automatically; see PATCH
                    /payments/subscriptions/:id/auto-renew.
              required:
                - method
      responses:
        '201':
          description: Additional IP order created
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - true
                  message:
                    type: string
                    enum:
                      - Additional IP order created
                  data:
                    allOf:
                      - $ref: '#/components/schemas/Transaction'
                      - properties: {}
                required:
                  - success
                  - message
                  - data
        '400':
          description: >-
            Additional IPs are not sold in this server's location. | No
            additional IP is free in this server's location right now. Contact
            support. | A server can have up to 5 additional IPs. Contact support
            for more. | Additional IPs are not available for this server. | The
            server must be running and paid for.
          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:
                notForSale:
                  summary: Additional IPs are not sold in this server's location.
                  value:
                    success: false
                    type: API
                    code: NOT_FOR_SALE
                    error: Additional IPs are not sold in this server's location.
                noFreeIp:
                  summary: >-
                    No additional IP is free in this server's location right
                    now. Contact support.
                  value:
                    success: false
                    type: API
                    code: NO_FREE_IP
                    error: >-
                      No additional IP is free in this server's location right
                      now. Contact support.
                limitReached:
                  summary: >-
                    A server can have up to 5 additional IPs. Contact support
                    for more.
                  value:
                    success: false
                    type: API
                    code: LIMIT_REACHED
                    error: >-
                      A server can have up to 5 additional IPs. Contact support
                      for more.
                privateIpServer:
                  summary: Additional IPs are not available for this server.
                  value:
                    success: false
                    type: API
                    code: PRIVATE_IP_SERVER
                    error: Additional IPs are not available for this server.
                serverNotActive:
                  summary: The server must be running and paid for.
                  value:
                    success: false
                    type: API
                    code: SERVER_NOT_ACTIVE
                    error: The server must be running and paid for.
        '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
          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
        '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-11-07T00:49:15.404Z'
        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-11-07T01:49:15.405Z'
    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-11-07T00:49:15.340Z'
        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.