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

# Reinstall the operating system

> Wipes the box and installs the chosen profile. Answers 202 with a task id; the install itself takes around twenty
minutes. Every check (profile fits this box, disk layout offered, SSH keys yours or the owner's, profile accepts keys)
runs before TenantOS is asked, so a bad request is a 400, never a wiped disk. If the profile sets a root password and
you didn't pick one, we generate one you can later read from /credentials. Needs operate access and a manageable
billing status. 409 while another job is running; 422 when there's no TenantOS id.



## OpenAPI

````yaml /api-reference/openapi.yaml post /v1/dedicated/{id}/reinstall
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/dedicated/{id}/reinstall:
    parameters:
      - name: id
        in: path
        required: true
        description: The dedicated server's service id.
        schema:
          type: string
          format: uuid
    post:
      tags:
        - Dedicated
      summary: Reinstall the operating system
      description: >-
        Wipes the box and installs the chosen profile. Answers 202 with a task
        id; the install itself takes around twenty

        minutes. Every check (profile fits this box, disk layout offered, SSH
        keys yours or the owner's, profile accepts keys)

        runs before TenantOS is asked, so a bad request is a 400, never a wiped
        disk. If the profile sets a root password and

        you didn't pick one, we generate one you can later read from
        /credentials. Needs operate access and a manageable

        billing status. 409 while another job is running; 422 when there's no
        TenantOS id.
      operationId: publicDedicatedReinstall
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicDedicatedReinstallRequest'
      responses:
        '202':
          description: Reinstall task started.
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    const: true
                  data:
                    type: object
                    required:
                      - taskId
                      - profileId
                      - osName
                    properties:
                      taskId:
                        type: string
                      profileId:
                        type: integer
                      osName:
                        type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Another job is running on this server.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicDedicatedBusyError'
        '422':
          description: The service has no TenantOS id.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          $ref: '#/components/responses/ServerError'
      security:
        - bearerAuth: []
        - apiToken: []
components:
  schemas:
    PublicDedicatedReinstallRequest:
      type: object
      required:
        - hostname
      description: Send `profileId` (or the legacy `osId`). One of them is required.
      properties:
        profileId:
          oneOf:
            - type: integer
              minimum: 1
            - type: string
          description: An install profile id from GET /profiles.
        osId:
          type: string
          description: Legacy alias for profileId.
        hostname:
          type: string
          description: Letters, digits, hyphens and dots. Trimmed and lowercased.
          example: web-01.example.com
        sshKeyIds:
          type: array
          items:
            type: string
          description: Saved SSH key ids — yours or the server owner's.
        sshKeys:
          type: array
          items:
            type: string
          description: OpenSSH public keys pasted directly.
        rootPassword:
          type:
            - string
            - 'null'
          minLength: 8
          maxLength: 72
          description: Generated for you when omitted and the profile sets one.
        diskLayoutId:
          type:
            - integer
            - string
            - 'null'
          description: >-
            One of the profile's disk layouts. Defaults to the profile's default
            layout.
    PublicDedicatedBusyError:
      description: Refused because a job is already running on the server.
      allOf:
        - $ref: '#/components/schemas/ErrorResponse'
        - type: object
          required:
            - data
          properties:
            data:
              type: object
              required:
                - taskId
              properties:
                taskId:
                  type:
                    - string
                    - 'null'
                  description: >-
                    Our task id for the running job, or null when it's a
                    TenantOS-side job.
    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'
    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.