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

# Pay for another period of an additional IP

> Buys another period for this IP, priced from its datacenter like an order (same short-term fee). `duration` defaults to the subscription's own period. Time is added from the end of the paid period, or from now if it has already ended, and an IP that was cut off for not being paid starts working again when the payment settles. Works until the IP is released, 48 hours after its period ended.

Payment rules are the same as `POST /vps/:id/renew`: leave `method` out to pay from the balance; a provider's own rail moves the subscription onto that provider, and is refused with `RENEWAL_WOULD_LOSE_TIME` while paid days remain that it cannot carry over. A subscription a provider bills on its own schedule returns `SUBSCRIPTION_EXTERNALLY_BILLED`.

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



## OpenAPI

````yaml /openapi.json post /vps-additional-ips/{id}/renew
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-additional-ips/{id}/renew:
    post:
      tags:
        - Server additional IPs
      summary: Pay for another period of an additional IP
      description: >-
        Buys another period for this IP, priced from its datacenter like an
        order (same short-term fee). `duration` defaults to the subscription's
        own period. Time is added from the end of the paid period, or from now
        if it has already ended, and an IP that was cut off for not being paid
        starts working again when the payment settles. Works until the IP is
        released, 48 hours after its period ended.


        Payment rules are the same as `POST /vps/:id/renew`: leave `method` out
        to pay from the balance; a provider's own rail moves the subscription
        onto that provider, and is refused with `RENEWAL_WOULD_LOSE_TIME` while
        paid days remain that it cannot carry over. A subscription a provider
        bills on its own schedule returns `SUBSCRIPTION_EXTERNALLY_BILLED`.


        **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:
                duration:
                  type: integer
                method:
                  type: string
                  minLength: 1
                  description: Defaults to the subscription's own method.
                currency:
                  type: string
                  minLength: 3
                  maxLength: 3
                couponCode:
                  type: string
                  minLength: 1
                  maxLength: 64
      responses:
        '201':
          description: Renewal created
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - true
                  message:
                    type: string
                    enum:
                      - Renewal created
                  data:
                    allOf:
                      - $ref: '#/components/schemas/Transaction'
                      - properties: {}
                required:
                  - success
                  - message
                  - data
        '400':
          description: >-
            This IP was assigned by our team and is not billed. | Additional IPs
            are no longer sold in this location. Contact support. | This
            subscription is billed by an external provider and renews on their
            schedule. | That payment method is currently unavailable. | This IP
            still has paid time that this payment method cannot carry over.
            Renew from your balance, or with this method once the period runs
            out.
          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:
                grant:
                  summary: This IP was assigned by our team and is not billed.
                  value:
                    success: false
                    type: API
                    code: GRANTED_IP
                    error: This IP was assigned by our team and is not billed.
                notForSale:
                  summary: >-
                    Additional IPs are no longer sold in this location. Contact
                    support.
                  value:
                    success: false
                    type: API
                    code: NOT_FOR_SALE
                    error: >-
                      Additional IPs are no longer sold in this location.
                      Contact support.
                externallyBilled:
                  summary: >-
                    This subscription is billed by an external provider and
                    renews on their schedule.
                  value:
                    success: false
                    type: API
                    code: SUBSCRIPTION_EXTERNALLY_BILLED
                    error: >-
                      This subscription is billed by an external provider and
                      renews on their schedule.
                methodUnavailable:
                  summary: That payment method is currently unavailable.
                  value:
                    success: false
                    type: API
                    code: METHOD_UNAVAILABLE
                    error: That payment method is currently unavailable.
                wouldLoseTime:
                  summary: >-
                    This IP still has paid time that this payment method cannot
                    carry over. Renew from your balance, or with this method
                    once the period runs out.
                  value:
                    success: false
                    type: API
                    code: RENEWAL_WOULD_LOSE_TIME
                    error: >-
                      This IP still has paid time that this payment method
                      cannot carry over. Renew from your balance, or with this
                      method once the period runs out.
        '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: Additional IP 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:
                notFound:
                  summary: Additional IP not found
                  value:
                    success: false
                    type: API
                    code: NOT_FOUND
                    error: Additional IP not found
        '409':
          description: This IP was just renewed, or a renewal is still running.
          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:
                renewalInProgress:
                  summary: This IP was just renewed, or a renewal is still running.
                  value:
                    success: false
                    type: API
                    code: RENEWAL_IN_PROGRESS
                    error: This IP was just renewed, or a renewal is still running.
        '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.