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

# List hardware presets

> Returns a cursor-paginated list of the hardware configurations
instances can run on, with their hourly price.

A preset fixes the GPU model and count, CPU, memory and storage. The
same preset may be offered in several regions at different prices, so
filter by `region` when comparing.




## OpenAPI

````yaml /public-v1.yaml get /presets
openapi: 3.0.3
info:
  title: Hive Compute Public API
  description: |
    The Hive Compute public API lets you manage compute instances and SSH keys
    programmatically, and browse the hardware presets and regions available to
    you.

    **Base URL:** `https://api.hivenet.com/v1`

    ## Authentication

    Every endpoint requires an API key, sent as a Bearer token:

    ```
    Authorization: Bearer <your-api-key>
    ```

    API keys are issued manually at this release. Email
    [support@hivenet.com](mailto:support@hivenet.com) to request one. There is
    no self-service endpoint or console page for creating, listing or rotating
    keys yet; both will arrive in a later release.

    Treat the key as a password. It carries the full permissions of your
    account, does not expire on its own, and can only be replaced by contacting
    support.

    ## Scope

    Requests are scoped to the account the key belongs to. You can only see and
    act on your own instances and SSH keys. Regions and presets are the shared
    public catalogue and look the same to everyone.

    ## Errors

    Every error shares one envelope:

    ```json
    {
      "error": {
        "code": "NOT_FOUND",
        "message": "Instance 7f3c... not found",
        "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      }
    }
    ```

    Quote `request_id` when contacting support: it identifies the exact request
    in our logs.

    ## Rate limiting

    Requests are rate limited per key. Exceeding the limit returns `429` with a
    `Retry-After` header giving the number of seconds to wait. Treat the limit
    as subject to change and back off on `429` rather than pacing to a fixed
    number.

    ## Pagination

    List endpoints are cursor-paginated and return the same envelope:

    ```json
    {
      "data": [],
      "pagination": { "next": "opaque-cursor", "size": 50 }
    }
    ```

    Pass `pagination.next` back as the `cursor` query parameter to fetch the
    following page. When it is `null` you have reached the last page. Cursors
    are opaque; do not construct or parse them.
  version: 1.0.0
  contact:
    name: Hive Compute Support
    email: support@hivenet.com
    url: https://hivenet.com
servers:
  - url: https://api.hivenet.com/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Instances
    description: >
      Compute instances are the core resource of the platform. Each instance

      runs a GPU-backed workload on a hardware preset in a region, and moves

      through this lifecycle:


      `CREATED → DEPLOYED → STARTING → RUNNING → STOPPING → STOPPED →
      TERMINATING → TERMINATED`


      A stopped instance can be started again and keeps its storage. A

      terminated instance is gone permanently and cannot be recovered.
  - name: SSH keys
    description: |
      Public keys used to reach your instances over SSH. A key you register is
      owned by your account and is not visible to anyone else.
  - name: Catalogue
    description: |
      The regions and hardware presets available to launch instances on. This
      is shared public reference data, identical for every caller.
paths:
  /presets:
    get:
      tags:
        - Catalogue
      summary: List hardware presets
      description: |
        Returns a cursor-paginated list of the hardware configurations
        instances can run on, with their hourly price.

        A preset fixes the GPU model and count, CPU, memory and storage. The
        same preset may be offered in several regions at different prices, so
        filter by `region` when comparing.
      operationId: listPresets
      parameters:
        - $ref: '#/components/parameters/Cursor'
        - $ref: '#/components/parameters/Size'
        - name: region
          in: query
          description: Return only presets available in this region.
          schema:
            type: string
        - name: sku
          in: query
          description: Return only presets with this SKU name, e.g. `8x-RTX-4090`.
          schema:
            type: string
        - name: free_text_search
          in: query
          description: Match against SKU name, GPU model and region.
          schema:
            type: string
            maxLength: 255
        - name: sort_field
          in: query
          description: Field to order by.
          schema:
            type: string
            enum:
              - REGION
              - LOCATION
              - GPU
              - CPU
              - MEMORY
              - STORAGE
              - HOURLY_PRICE
        - name: sort_direction
          in: query
          description: Order direction. Defaults to `DESC`.
          schema:
            type: string
            enum:
              - ASC
              - DESC
      responses:
        '200':
          description: A page of presets.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Preset'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  parameters:
    Cursor:
      name: cursor
      in: query
      required: false
      description: |
        Opaque cursor from a previous response's `pagination.next`. Omit to
        start at the first page.
      schema:
        type: string
    Size:
      name: size
      in: query
      required: false
      description: Number of items per page.
      schema:
        type: integer
        minimum: 1
        maximum: 200
        default: 50
  schemas:
    Preset:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier, used when launching an instance.
        region:
          type: string
          description: Region this preset is offered in.
          example: eu-west
        location:
          type: string
          description: Datacentre within the region.
        gpu:
          type: string
          description: GPU model and count.
          example: 8x RTX 4090
        cpu:
          type: string
          description: Virtual CPUs.
          example: '32'
        memory:
          type: string
          description: Memory, in GB.
          example: '192'
        storage:
          type: string
          description: Storage, in GB.
          example: '500'
        hourly_price:
          type: string
          description: List price per hour, in credits.
          example: '3.2000'
        price_discounted:
          type: string
          description: |
            Price actually charged per hour when non-zero, in credits. `0`
            means no discount applies and `hourly_price` is charged.
          example: '2.8000'
    Pagination:
      type: object
      description: Cursor pagination metadata.
      properties:
        next:
          type: string
          nullable: true
          description: |
            Cursor for the following page, or `null` on the last page.
          example: eyJjcmVhdGVkX2F0IjoiMjAyNi0wNy0yOSJ9
        size:
          type: integer
          description: Page size used for this response.
          example: 50
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - UNAUTHORIZED
                - FORBIDDEN
                - NOT_FOUND
                - VALIDATION_ERROR
                - TOO_MANY_REQUESTS
                - INTERNAL_ERROR
              description: Stable, machine-readable error code.
            message:
              type: string
              description: Human-readable explanation. Do not match on this text.
            request_id:
              type: string
              description: Identifies this request in our logs. Quote it to support.
  responses:
    ValidationError:
      description: The request was malformed or a parameter was invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: VALIDATION_ERROR
              message: size must not be greater than 200
              request_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
    Unauthorized:
      description: The API key is missing, malformed or not valid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: UNAUTHORIZED
              message: Missing API token
              request_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
    RateLimited:
      description: |
        Too many requests. Wait the number of seconds given in `Retry-After`
        before retrying.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: TOO_MANY_REQUESTS
              message: Too Many Requests
              request_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
    InternalError:
      description: >-
        Something went wrong on our side. Retry, then contact support with the
        `request_id`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: INTERNAL_ERROR
              message: Internal server error
              request_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        An API key issued by Hive Compute support. See **Authentication**
        above for how to request one.

````