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

# Renew a VPS for another period now

> Pays for the next period of this server's subscription — or its backup add-on, with `target: "backup"` — without waiting for the automatic renewal.

The period and the price come from the subscription, so this buys exactly one more of what the server is already on. The only choice is how to pay for it.

Leave `method` out and it comes from the wallet, as the automatic renewal does, and nothing about the subscription changes. Name a provider's own rail instead — `whop_cards` — and the subscription **moves to that provider**: it is sold there as a recurring plan, that provider re-charges the saved card on its own schedule from then on, and our balance worker stops billing the row. Nobody is billed twice, because only one of them ever bills it.

Because the provider's schedule starts the day it is paid, moving is only allowed once the current period has run out — otherwise the days already paid for would be lost. Renewing early is a wallet-only operation and anything else returns `RENEWAL_WOULD_LOSE_TIME`.

Only subscriptions Storiza bills itself can be renewed here. One billed by an external provider renews on that provider's own schedule — charging it again from our side would take payment twice for the same days — so it returns `SUBSCRIPTION_EXTERNALLY_BILLED` and is managed with `POST /payments/subscriptions/:id/manage`.

Paid from the balance, settlement is immediate: the returned transaction is already `completed` and the period has moved. Paid any other way it comes back `pending` with a `checkoutUrl`, and the period moves when that payment settles — so treat the response as a transaction to follow, not as a renewal that happened.

Time is added, never reset — renewing early extends from the end of the period already paid for. Renewing after a lapse starts the new period at payment and brings a server that was powered off for non-payment back up.

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



## OpenAPI

````yaml /openapi.json post /vps/{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 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}/renew:
    post:
      tags:
        - Servers
      summary: Renew a VPS for another period now
      description: >-
        Pays for the next period of this server's subscription — or its backup
        add-on, with `target: "backup"` — without waiting for the automatic
        renewal.


        The period and the price come from the subscription, so this buys
        exactly one more of what the server is already on. The only choice is
        how to pay for it.


        Leave `method` out and it comes from the wallet, as the automatic
        renewal does, and nothing about the subscription changes. Name a
        provider's own rail instead — `whop_cards` — and the subscription
        **moves to that provider**: it is sold there as a recurring plan, that
        provider re-charges the saved card on its own schedule from then on, and
        our balance worker stops billing the row. Nobody is billed twice,
        because only one of them ever bills it.


        Because the provider's schedule starts the day it is paid, moving is
        only allowed once the current period has run out — otherwise the days
        already paid for would be lost. Renewing early is a wallet-only
        operation and anything else returns `RENEWAL_WOULD_LOSE_TIME`.


        Only subscriptions Storiza bills itself can be renewed here. One billed
        by an external provider renews on that provider's own schedule —
        charging it again from our side would take payment twice for the same
        days — so it returns `SUBSCRIPTION_EXTERNALLY_BILLED` and is managed
        with `POST /payments/subscriptions/:id/manage`.


        Paid from the balance, settlement is immediate: the returned transaction
        is already `completed` and the period has moved. Paid any other way it
        comes back `pending` with a `checkoutUrl`, and the period moves when
        that payment settles — so treat the response as a transaction to follow,
        not as a renewal that happened.


        Time is added, never reset — renewing early extends from the end of the
        period already paid for. Renewing after a lapse starts the new period at
        payment and brings a server that was powered off for non-payment back
        up.


        **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:
                target:
                  type: string
                  enum:
                    - server
                    - backup
                  default: server
                  description: Renew the server itself, or its backup add-on
                method:
                  type: string
                  minLength: 1
                  description: >-
                    Pay this one renewal with a different method — a card,
                    crypto. Defaults to the subscription's own. See GET
                    /payments/methods
                currency:
                  type: string
                  minLength: 3
                  maxLength: 3
                  description: >-
                    Only meaningful alongside `method`. Defaults to the
                    subscription's.
                couponCode:
                  type: string
                  minLength: 1
                  maxLength: 64
      responses:
        '201':
          description: Renewal created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - true
                  message:
                    type: string
                    enum:
                      - Renewal created successfully
                  data:
                    allOf:
                      - $ref: '#/components/schemas/Transaction'
                      - properties: {}
                required:
                  - success
                  - message
                  - data
        '400':
          description: >-
            This VPS has no backup subscription to renew. Order one with POST
            /vps/:id/backups/order. | This subscription is billed by an external
            provider and renews on their schedule. Manage it there instead. |
            This subscription has expired and can no longer be renewed. Order a
            new one. | The payment method this subscription is billed with is
            currently unavailable. | This subscription still has time left on
            it, so it cannot be moved onto a card yet. Renew from your balance,
            or with a card once the period runs out. | Renewing another user's
            server has to come from your balance: paying on a provider's rail
            would move their subscription onto your card.
          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:
                noBackupSubscription:
                  summary: >-
                    This VPS has no backup subscription to renew. Order one with
                    POST /vps/:id/backups/order.
                  value:
                    success: false
                    type: API
                    code: BACKUP_NOT_SUBSCRIBED
                    error: >-
                      This VPS has no backup subscription to renew. Order one
                      with POST /vps/:id/backups/order.
                externallyBilled:
                  summary: >-
                    This subscription is billed by an external provider and
                    renews on their schedule. Manage it there instead.
                  value:
                    success: false
                    type: API
                    code: SUBSCRIPTION_EXTERNALLY_BILLED
                    error: >-
                      This subscription is billed by an external provider and
                      renews on their schedule. Manage it there instead.
                subscriptionExpired:
                  summary: >-
                    This subscription has expired and can no longer be renewed.
                    Order a new one.
                  value:
                    success: false
                    type: API
                    code: SUBSCRIPTION_EXPIRED
                    error: >-
                      This subscription has expired and can no longer be
                      renewed. Order a new one.
                methodUnavailable:
                  summary: >-
                    The payment method this subscription is billed with is
                    currently unavailable.
                  value:
                    success: false
                    type: API
                    code: METHOD_UNAVAILABLE
                    error: >-
                      The payment method this subscription is billed with is
                      currently unavailable.
                wouldLoseTime:
                  summary: >-
                    This subscription still has time left on it, so it cannot be
                    moved onto a card yet. Renew from your balance, or with a
                    card once the period runs out.
                  value:
                    success: false
                    type: API
                    code: RENEWAL_WOULD_LOSE_TIME
                    error: >-
                      This subscription still has time left on it, so it cannot
                      be moved onto a card yet. Renew from your balance, or with
                      a card once the period runs out.
                onBehalfRequiresBalance:
                  summary: >-
                    Renewing another user's server has to come from your
                    balance: paying on a provider's rail would move their
                    subscription onto your card.
                  value:
                    success: false
                    type: API
                    code: RENEWAL_ON_BEHALF_REQUIRES_BALANCE
                    error: >-
                      Renewing another user's server has to come from your
                      balance: paying on a provider's rail would move their
                      subscription onto your card.
        '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 | Subscription not found | Plan for this subscription
            no longer exists
          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
                subscriptionNotFound:
                  summary: Subscription not found
                  value:
                    success: false
                    type: API
                    code: NOT_FOUND
                    error: Subscription not found
                planNotFound:
                  summary: Plan for this subscription no longer exists
                  value:
                    success: false
                    type: API
                    code: NOT_FOUND
                    error: Plan for this subscription no longer exists
        '409':
          description: >-
            This subscription was just renewed, or a renewal is still running.
            Check the new expiry date before trying again.
          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 subscription was just renewed, or a renewal is still
                    running. Check the new expiry date before trying again.
                  value:
                    success: false
                    type: API
                    code: RENEWAL_IN_PROGRESS
                    error: >-
                      This subscription was just renewed, or a renewal is still
                      running. Check the new expiry date before trying again.
        '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.