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

# Order a resource upgrade

> Orders extra cores, RAM, disk or IPv4s. Send the absolute target extras (not a delta), so a retried request lands on the
same size. Raises an UNPAID invoice (due in 7 days) for the monthly difference prorated over the days left in the
period; the resources land when it's paid. Values are floored to whole non-negative numbers. Session auth only; owner
or team ADMIN. 400 when a value exceeds the hardware's ceiling or nothing is asked for. 409 when the server isn't built,
the hardware sells no upgrades, the target equals what's held, it would reduce anything (that needs a ticket), or
another change is unpaid. 503 when there's no FX rate. Writes an `ORDER_CLOUD_UPGRADE` audit entry.



## OpenAPI

````yaml /api-reference/openapi.yaml post /v1/cloud/{id}/upgrade
openapi: 3.1.0
info:
  title: Server.Express API
  version: 1.0.0
  description: >-
    The customer-facing Server.Express API: auth, billing, tickets, cloud and
    dedicated servers, hosting, reselling and account management. Every response
    uses the `{ success, data | error }` envelope.
  contact:
    name: Server.Express
    url: https://server.express
servers:
  - url: https://my.server.express/api
    description: Production
security:
  - bearerAuth: []
  - apiToken: []
tags:
  - name: API Tokens
  - name: Account
  - name: Auth
  - name: Cloud
  - name: Coupons
  - name: Credits
  - name: Dashboard
  - name: Dedicated
  - name: Health
  - name: Hosting
  - name: Integrations
  - name: Invoices
  - name: Livechat
  - name: Notifications
  - name: Passkeys
  - name: Payments
  - name: Products
  - name: Public
  - name: Public Invoices
  - name: Public Tools
  - name: Reseller
  - name: SSH Keys
  - name: Services
  - name: Tasks
  - name: Teams
  - name: Tickets
  - name: Web Hosting
  - name: Webhooks
paths:
  /v1/cloud/{id}/upgrade:
    post:
      tags:
        - Cloud
      summary: Order a resource upgrade
      description: >-
        Orders extra cores, RAM, disk or IPv4s. Send the absolute target extras
        (not a delta), so a retried request lands on the

        same size. Raises an UNPAID invoice (due in 7 days) for the monthly
        difference prorated over the days left in the

        period; the resources land when it's paid. Values are floored to whole
        non-negative numbers. Session auth only; owner

        or team ADMIN. 400 when a value exceeds the hardware's ceiling or
        nothing is asked for. 409 when the server isn't built,

        the hardware sells no upgrades, the target equals what's held, it would
        reduce anything (that needs a ticket), or

        another change is unpaid. 503 when there's no FX rate. Writes an
        `ORDER_CLOUD_UPGRADE` audit entry.
      operationId: publicCloudOrderUpgrade
      parameters:
        - name: id
          in: path
          required: true
          description: Service id of the cloud server.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicCloudExtras'
      responses:
        '200':
          description: Invoice raised.
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    const: true
                  data:
                    type: object
                    required:
                      - upgradeId
                      - invoiceId
                      - invoiceNumber
                      - total
                      - currency
                      - monthlyFrom
                    properties:
                      upgradeId:
                        type: string
                      invoiceId:
                        type: string
                      invoiceNumber:
                        type: string
                      total:
                        type: integer
                        description: Invoice total including tax, minor units.
                      currency:
                        type: string
                      monthlyFrom:
                        type: integer
                        description: >-
                          Monthly cost of the full set of extras once paid,
                          minor units.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          description: >-
            No exchange rate to price the upgrade in the service currency right
            now.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    PublicCloudExtras:
      type: object
      description: >-
        Extra resources on top of the plan. Missing, negative or non-numeric
        values count as 0.
      properties:
        cores:
          type: integer
          minimum: 0
          default: 0
        ramGb:
          type: integer
          minimum: 0
          default: 0
        diskGb:
          type: integer
          minimum: 0
          default: 0
        ipv4:
          type: integer
          minimum: 0
          default: 0
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          type: string
          description: Human-readable error message.
      additionalProperties: true
  responses:
    BadRequest:
      description: Validation failed or the request is malformed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Missing, invalid or expired credentials.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: >-
        Authenticated but not allowed (missing scope, not an admin, or not your
        resource).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: The resource doesn't exist or isn't visible to you.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Conflict:
      description: The request conflicts with the resource's current state.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    ServerError:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Session access token (JWT) from POST /v1/auth/login or /v1/auth/refresh.
        A session satisfies every API scope.
    apiToken:
      type: http
      scheme: bearer
      bearerFormat: se_live_<prefix>_<secret>
      description: >-
        Personal API token created under Settings → API tokens. Only routes
        guarded by verifyApiAuth accept it, and the token must carry the scope
        named in the operation's x-required-scope.

````

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