> ## 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 cloud server

> Places a real order: a PENDING service and an unpaid invoice at this account's reseller rate. The VM is cloned once the
invoice settles. Same code path as the panel. 428 when the account's billing details are incomplete; 403 for a
restricted billing country.



## OpenAPI

````yaml /api-reference/openapi.yaml post /v1/reseller/orders/cloud
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/reseller/orders/cloud:
    post:
      tags:
        - Reseller
      summary: Order a cloud server
      description: >-
        Places a real order: a PENDING service and an unpaid invoice at this
        account's reseller rate. The VM is cloned once the

        invoice settles. Same code path as the panel. 428 when the account's
        billing details are incomplete; 403 for a

        restricted billing country.
      operationId: publicDedicatedResellerOrderCloud
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - planId
                - hostname
              properties:
                planId:
                  type: string
                  description: Cloud plan slug from the catalogue.
                hostname:
                  type: string
                location:
                  type: string
                  description: Location slug. Defaults to an available location.
                os:
                  type: string
                  description: OS template slug.
                app:
                  type: string
                  description: >-
                    One-click app slug. Overrides `os` with the app's own base
                    template.
                appInputs:
                  type: object
                  additionalProperties: true
                  description: Values for the app's declared inputs.
      responses:
        '201':
          description: Order placed.
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    const: true
                  data:
                    $ref: '#/components/schemas/PublicDedicatedOrderResult'
        '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'
        '428':
          description: Billing details are missing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicDedicatedBillingDetailsRequired'
        '500':
          $ref: '#/components/responses/ServerError'
      security:
        - bearerAuth: []
        - apiToken: []
components:
  schemas:
    PublicDedicatedOrderResult:
      type: object
      required:
        - serviceId
        - invoice
        - price
        - fulfilment
      properties:
        serviceId:
          type: string
          format: uuid
        invoice:
          type: object
          required:
            - id
            - number
            - subtotal
            - total
            - currency
          properties:
            id:
              type: string
              format: uuid
            number:
              type: string
            subtotal:
              type: integer
              description: Minor units, before tax.
            total:
              type: integer
              description: Minor units, after tax.
            currency:
              type: string
        price:
          type: object
          required:
            - list
            - net
            - discountBps
          properties:
            list:
              type: integer
              description: Storefront price, minor units.
            net:
              type: integer
              description: What this account is charged before tax, minor units.
            discountBps:
              type: integer
        fulfilment:
          type: object
          required:
            - instant
            - provisional
            - leadTime
          properties:
            instant:
              type: boolean
              description: >-
                Provisions itself the moment the invoice is paid. Always true
                for cloud and hosting.
            provisional:
              type: boolean
              description: Dedicated only — nothing racked yet, a human builds it.
            leadTime:
              type:
                - string
                - 'null'
    PublicDedicatedBillingDetailsRequired:
      allOf:
        - $ref: '#/components/schemas/ErrorResponse'
        - type: object
          required:
            - data
          properties:
            data:
              type: object
              required:
                - billingDetailsRequired
                - missing
              properties:
                billingDetailsRequired:
                  type: boolean
                  const: true
                missing:
                  type: array
                  items:
                    type: string
                  description: Names of the missing billing profile fields.
    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.