XSKY pools API

PoolController Operations about Pools

Operations 14

GET /pools/ #
POST /pools/ #
GET /pools/{pool_id} #
DELETE /pools/{pool_id} #
PATCH /pools/{pool_id} #
PUT /pools/{pool_id}/osds #
DELETE /pools/{pool_id}/osds #
GET /pools/{pool_id}/predictions #
GET /pools/{pool_id}/samples #
GET /pools/{pool_id}/topology #
POST /pools/{pool_id}:disable-device-type-check #
POST /pools/{pool_id}:enable-device-type-check #
POST /pools/{pool_id}:reweight #
POST /pools/{pool_id}:switch-role #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/xsky-pools-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

xsky-pools-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: XMS is the controller of distributed storage system
  version: SDS_4.2.000.0.200302
  title: XMS access-paths Pools API
  contact: {}
  license:
    name: Commercial
servers:
- url: /v1
tags:
- name: pools
  description: 'PoolController Operations about Pools

    '
paths:
  /pools/:
    get:
      tags:
      - pools
      description: List pools
      operationId: ListPools
      parameters:
      - name: limit
        in: query
        description: paging param
        required: false
        x-exportParamName: Limit
        schema:
          type: integer
          format: int64
      - name: offset
        in: query
        description: paging param
        required: false
        x-exportParamName: Offset
        schema:
          type: integer
          format: int64
      - name: all
        in: query
        description: show all pools
        required: false
        x-exportParamName: All
        schema:
          type: boolean
      - name: protection_domain_id
        in: query
        description: protection domain id
        required: false
        x-exportParamName: ProtectionDomainId
        schema:
          type: integer
          format: int64
      - name: compound_osd_only
        in: query
        description: filter pool with only compound osds
        required: false
        x-exportParamName: CompoundOsdOnly
        schema:
          type: boolean
      - name: osd_group_id
        in: query
        description: osd group id
        required: false
        x-exportParamName: OsdGroupId
        schema:
          type: integer
          format: int64
      - name: pool_type
        in: query
        description: filter pool by type
        required: false
        x-exportParamName: PoolType
        schema:
          type: string
      - name: pool_role
        in: query
        description: filter pool by role
        required: false
        x-exportParamName: PoolRole
        schema:
          type: string
      - name: pool_mode
        in: query
        description: filter pool by pool_mode
        required: false
        x-exportParamName: PoolMode
        schema:
          type: string
      - name: stretched
        in: query
        description: filter stretched pool
        required: false
        x-exportParamName: Stretched
        schema:
          type: boolean
      - name: with_compound
        in: query
        description: with compound pool
        required: false
        x-exportParamName: WithCompound
        schema:
          type: boolean
      - name: os_policy_id
        in: query
        description: filter data pool by object storage policy id
        required: false
        x-exportParamName: OsPolicyId
        schema:
          type: integer
          format: int64
      - name: storage_class_id
        in: query
        description: filter data pool by os storage class id
        required: false
        x-exportParamName: StorageClassId
        schema:
          type: integer
          format: int64
      - name: storage_class_pool_type
        in: query
        description: storage class pool type(active inactive) to query
        required: false
        x-exportParamName: StorageClassPoolType
        schema:
          type: string
      - name: q
        in: query
        description: query param of search
        required: false
        x-exportParamName: Q
        schema:
          type: string
      - name: sort
        in: query
        description: sort param of search
        required: false
        x-exportParamName: Sort
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolsResp'
        400:
          description: BadRequest
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
    post:
      tags:
      - pools
      description: Create pool
      operationId: CreatePool
      responses:
        202:
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PoolCreateReq'
        description: the pool info
        required: true
  /pools/{pool_id}:
    get:
      tags:
      - pools
      description: get pool
      operationId: GetPool
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInHeader: []
      - tokenInQuery: []
    delete:
      tags:
      - pools
      description: Delete pool
      operationId: DeletePool
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      - name: force
        in: query
        description: force delete or not
        required: false
        x-exportParamName: Force
        schema:
          type: boolean
      responses:
        202:
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
    patch:
      tags:
      - pools
      description: update pool info
      operationId: UpdatePool
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PoolUpdateReq'
        description: pool info
        required: true
  /pools/{pool_id}/osds:
    put:
      tags:
      - pools
      description: Add osds to pool
      operationId: AddOsdsToPool
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        202:
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OsdsAddReq'
        description: osd infos
        required: true
    delete:
      tags:
      - pools
      description: Remove multiple osds from a pool
      operationId: RemoveOsdsFromPool
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        202:
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OsdsRemoveReq'
        description: osd infos
        required: true
  /pools/{pool_id}/predictions:
    get:
      tags:
      - pools
      description: get a pool's prediction
      operationId: GetPoolPredictions
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolPredictionsResp'
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}/samples:
    get:
      tags:
      - pools
      description: get pool's samples
      operationId: GetPoolSamples
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      - name: duration_begin
        in: query
        description: duration begin timestamp
        required: false
        x-exportParamName: DurationBegin
        schema:
          type: string
      - name: duration_end
        in: query
        description: duration end timestamp
        required: false
        x-exportParamName: DurationEnd
        schema:
          type: string
      - name: period
        in: query
        description: samples period
        required: false
        x-exportParamName: Period
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolSamplesResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}/topology:
    get:
      tags:
      - pools
      description: get pool topology
      operationId: GetPoolTopology
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolTopologyResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:disable-device-type-check:
    post:
      tags:
      - pools
      description: Disable device type check when add osd
      operationId: DisableDeviceTypeCheck
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:enable-device-type-check:
    post:
      tags:
      - pools
      description: Enable device type check when add osd
      operationId: EnableDeviceTypeCheck
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:reweight:
    post:
      tags:
      - pools
      description: Reweight a pool
      operationId: ReweightPool
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:switch-role:
    post:
      tags:
      - pools
      description: Switch pool role to compound
      operationId: SwitchPoolRole
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        x-exportParamName: PoolId
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        202:
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
components:
  schemas:
    PredictionPoint:
      type: object
      properties:
        create:
          type: string
          format: date-time
        used_kbyte:
          type: integer
          format: int64
      title: PredictionPoint
      description: PredictionPoint is a point in a prediction graph
      example:
        used_kbyte: 5
        create: '2000-01-23T04:56:07.000+00:00'
    PoolTopologyResp:
      type: object
      required:
      - pool_topology
      properties:
        pool_topology:
          description: pool topology
          $ref: '#/components/schemas/PoolPlacementNode'
      title: PoolTopologyResp
      example:
        pool_topology:
          children:
          - null
          - null
          create: '2000-01-23T04:56:07.000+00:00'
          replicate_num: 1
          update: '2000-01-23T04:56:07.000+00:00'
          id: 0
          placement_node:
            parent: null
            name: name
            create: '2000-01-23T04:56:07.000+00:00'
            update: '2000-01-23T04:56:07.000+00:00'
            id: 6
            type: type
            properties:
              is_witness: true
          status: status
    PlacementNode:
      type: object
      properties:
        create:
          type: string
          format: date-time
          description: time of creating placement node
        id:
          type: integer
          format: int64
          description: id of placement node
        name:
          type: string
          description: name of placement node
        parent:
          description: parent of placement node
          $ref: '#/components/schemas/PlacementNode'
        properties:
          description: properties for this placement node like is_witness
          $ref: '#/components/schemas/PlacementNodeProperties'
        type:
          type: string
          description: type of placement node
        update:
          type: string
          format: date-time
          description: time of updating placement node
      title: PlacementNode
      description: PlacementNode defines a placement node managing a range of hosts
      example:
        parent: null
        name: name
        create: '2000-01-23T04:56:07.000+00:00'
        update: '2000-01-23T04:56:07.000+00:00'
        id: 6
        type: type
        properties:
          is_witness: true
    PoolSamplesResp:
      type: object
      required:
      - pool_samples
      properties:
        pool_samples:
          type: array
          description: pool samples
          items:
            $ref: '#/components/schemas/PoolStat'
      title: PoolSamplesResp
      example:
        pool_samples:
        - healthy_percent: 9.301444243932576
          error_kbyte: 2
          recovery_percent: 1.1730742509559433
          total_bandwidth_kbyte: 4.965218492984954
          read_latency_us: 1.0246457001441578
          data_kbyte: 1
          read_bandwidth_kbyte: 7.386281948385884
          healthy_num: 7
          recovery_iops: 6.84685269835264
          omap_total_kbyte: 3.616076749251911
          degraded_num: 5
          create: '2000-01-23T04:56:07.000+00:00'
          recovery_bandwidth_kbyte: 1.4894159098541704
          write_iops: 3.5571952270680973
          total_kbyte: 9
          degraded_percent: 5.637376656633329
          unavailable_num: 9
          write_latency_us: 6.965117697638846
          total_iops: 5.025004791520295
          unavailable_percent: 6.683562403749608
          read_iops: 1.2315135367772556
          actual_kbyte: 0
          omap_used_kbyte: 2.027123023002322
          omap_used_percent: 4.145608029883936
          used_kbyte: 8
          write_bandwidth_kbyte: 6.438423552598547
          creating_num: 6
          used_percent: 9.018348186070783
          recovery_num: 7
        - healthy_percent: 9.301444243932576
          error_kbyte: 2
          recovery_percent: 1.1730742509559433
          total_bandwidth_kbyte: 4.965218492984954
          read_latency_us: 1.0246457001441578
          data_kbyte: 1
          read_bandwidth_kbyte: 7.386281948385884
          healthy_num: 7
          recovery_iops: 6.84685269835264
          omap_total_kbyte: 3.616076749251911
          degraded_num: 5
          create: '2000-01-23T04:56:07.000+00:00'
          recovery_bandwidth_kbyte: 1.4894159098541704
          write_iops: 3.5571952270680973
          total_kbyte: 9
          degraded_percent: 5.637376656633329
          unavailable_num: 9
          write_latency_us: 6.965117697638846
          total_iops: 5.025004791520295
          unavailable_percent: 6.683562403749608
          read_iops: 1.2315135367772556
          actual_kbyte: 0
          omap_used_kbyte: 2.027123023002322
          omap_used_percent: 4.145608029883936
          used_kbyte: 8
          write_bandwidth_kbyte: 6.438423552598547
          creating_num: 6
          used_percent: 9.018348186070783
          recovery_num: 7
    Pool:
      type: object
      properties:
        action_status:
          type: string
        block_volume_num:
          type: integer
          format: int64
        coding_chunk_num:
          type: integer
          format: int64
        create:
          type: string
          format: date-time
        data_chunk_num:
          type: integer
          format: int64
        default_managed_volume_format:
          type: integer
          format: int64
        device_type:
          type: string
        device_type_check_disabled:
          type: boolean
        failure_domain_type:
          type: string
        hidden:
          type: boolean
        id:
          type: integer
          format: int64
        io_bypass_enabled:
          type: boolean
        io_bypass_threshold:
          type: integer
          format: int64
        name:
          type: string
        osd_group:
          $ref: '#/components/schemas/OsdGroup_Nestview'
        osd_num:
          type: integer
          format: int64
        pool_id:
          type: integer
          format: int32
        pool_mode:
          type: string
        pool_name:
          type: string
        pool_role:
          type: string
        pool_type:
          type: string
        primary_placement_node:
          description: placement node with the primary replica
          $ref: '#/components/schemas/PlacementNode_Nestview'
        property:
          type: object
        protection_domain:
          $ref: '#/components/schemas/ProtectionDomain_Nestview'
        qos:
          $ref: '#/components/schemas/OsdQos'
        replicate_size:
          type: integer
          format: int64
        status:
          type: string
        stretched:
          type: boolean
        update:
          type: string
          format: date-time
      title: Pool
      description: 'A Pool is a set of temporary objects that may be individually saved and

        retrieved.


        Any item stored in the Pool may be removed automatically at any time without

        notification. If the Pool holds the only reference when this happens, the item

        might be deallocated.


        A Pool is safe for use by multiple goroutines simultaneously.


        Pool''s purpose is to cache allocated but unused items for later reuse, relieving

        pressure on the garbage collector. That is, it makes it easy to build efficient,

        thread-safe free lists. However, it is not suitable for all free lists.


        An appropriate use of a Pool is to manage a group of temporary items silently

        shared among and potentially reused by concurrent independent clients of a

        package. Pool provides a way to amortize allocation overhead across many

        clients.


        An example of good use of a Pool is in the fmt package, which maintains a

        dynamically-sized store of temporary output buffers. The store scales under load

        (when many goroutines are actively printing) and shrinks when quiescent.


        On the other hand, a free list maintained as part of a short-lived object is not

        a suitable use for a Pool, since the overhead does not amortize well in that

        scenario. It is more efficient to have such objects implement their own free

        list.


        A Pool must not be copied after first use.'
    PlacementNode_Nestview_parent:
      properties:
        create:
          type: string
          format: date-time
          description: time of creating placement node
        id:
          type: integer
          format: int64
          description: id of placement node
        name:
          type: string
          description: name of placement node
        parent:
          description: parent of placement node
          $ref: '#/components/schemas/PlacementNode'
        properties:
          description: properties for this placement node like is_witness
          $ref: '#/components/schemas/PlacementNodeProperties'
        type:
          type: string
          description: type of placement node
        update:
          type: string
          format: date-time
          description: time of updating placement node
      description: parent of placement node
    PoolRecord:
      title: PoolRecord
      allOf:
      - $ref: '#/components/schemas/Pool'
      - properties:
          samples:
            type: array
            items:
              $ref: '#/components/schemas/PoolStat'
      description: PoolRecord is used to combine Pool and PoolStat to let API comfortable
    PoolsResp:
      type: object
      required:
      - pools
      properties:
        pools:
          type: array
          description: pools
          items:
            $ref: '#/components/schemas/PoolRecord'
      title: PoolsResp
      example:
        pools:
        - ''
        - ''
    PoolUpdateReq_Pool:
      type: object
      properties:
        default_managed_volume_format:
          type: integer
          format: int64
          description: 'default managed volume format: 128 or 129'
        failure_domain_type:
          type: string
        io_bypass_enabled:
          type: boolean
        io_bypass_threshold:
          type: integer
          format: int64
        name:
          type: string
        primary_placement_node_id:
          type: integer
          format: int64
        property:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/RawMessage'
        qos:
          $ref: '#/components/schemas/OsdQos'
        ruleset:
          type: array
          items:
            $ref: '#/components/schemas/PoolRuleReq'
        size:
          type: integer
          format: int64
      title: PoolUpdateReq_Pool
      example:
        failure_domain_type: failure_domain_type
        io_bypass_enabled: true
        qos:
          mode: 5
          bandwidth: 0
          bandwidth_max: 6
          id: 5
          client_threshold: 1
          recovery_rate_type: recovery_rate_type
        size: 5
        name: name
        property:
          key: ''
        ruleset:
        - placement_node_id: 2
          replicate_num: 7
        - placement_node_id: 2
          replicate_num: 7
        primary_placement_node_id: 1
        default_managed_volume_format: 0
        io_bypass_threshold: 6
    PoolUpdateReq:
      type: object
      required:
      - pool
      properties:
        pool:
          $ref: '#/components/schemas/PoolUpdateReq_Pool'
      title: PoolUpdateReq
      example:
        pool:
          failure_domain_type: failure_domain_type
          io_bypass_enabled: true
          qos:
            mode: 5
            bandwidth: 0
            bandwidth_max: 6
            id: 5
            client_threshold: 1
            recovery_rate_type: recovery_rate_type
          size: 5
          name: name
          property:
            key: ''
          ruleset:
          - placement_node_id: 2
            replicate_num: 7
          - placement_node_id: 2
            replicate_num: 7
          primary_placement_node_id: 1
          default_managed_volume_format: 0
          io_bypass_threshold: 6
    PoolCreateReq:
      type: object
      properties:
        pool:
          $ref: '#/components/schemas/PoolCreateReq_Pool'
      title: PoolCreateReq
      example:
        pool:
          data_chunk_num: 6
          failure_domain_type: failure_domain_type
          osd_ids:
          - 1
          - 1
          ruleset:
          - placement_node_id: 2
            replicate_num: 7
          - placement_node_id: 2
            replicate_num: 7
          coding_chunk_num: 0
          primary_placement_node_id: 5
          protection_domain_id: 5
          stretched: true
          size: 3
          name: name
          pool_role: pool_role
          pool_type: pool_type
          shared_pool_id: 9
    OsdQos:
      type: object
      properties:
        bandwidth:
          type: integer
          format: int64
        bandwidth_max:
          type: integer
          format: int64
        client_threshold:
          type: integer
          format: int64
        id:
          type: integer
          format: int64
        mode:
          type: integer
          format: int64
        recovery_rate_type:
          type: string
      title: OsdQos
      description: OsdQos defines qos for osd
      example:
        mode: 5
        bandwidth: 0
        bandwidth_max: 6
        id: 5
        client_threshold: 1
        recovery_rate_type: recovery_rate_type
    OsdGroup_Nestview:
      type: object
      properties:
        id:
          type: integer
          format: int64
      title: OsdGroup_Nestview
    PoolPlacementNode:
      type: object
      properties:
        children:
          type: array
          items:
            $ref: '#/components/schemas/PoolPlacementNode'
        create:
          type: string
          format: date-time
        id:
          type: integer
          format: int64
        placement_node:
          $ref: '#/components/schemas/PlacementNode'
        replicate_num:
          type: integer
          format: int64
        status:
          type: string
        update:
          type: string
          format: date-time
      title: PoolPlacementNode
      description: PoolPlacementNode defines a shadow placement node in a pool
      example:
        children:
        - null
        - null
        create: '2000-01-23T04:56:07.000+00:00'
        replicate_num: 1
        update: '2000-01-23T04:56:07.000+00:00'
        id: 0
        placement_node:
          parent: null
          name: name
          create: '2000-01-23T04:56:07.000+00:00'
          update: '2000-01-23T04:56:07.000+00:00'
          id: 6
          type: type
          properties:
            is_witness: true
        status: status
    PlacementNode_Nestview:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: id of placement node
        parent:
          $ref: '#/components/schemas/PlacementNode_Nestview_parent'
      title: PlacementNode_Nestview
    PoolPrediction:
      type: object
      properties:
        create:
          type: string
          format: date-time
        data_kbyte_1day:
          type: integer
          format: int64
        data_kbyte_30days:
          type: integer
          format: int64
        data_kbyte_7days:
          type: integer
          format: int64
        data_kbyte_points:
          type: array
          items:
            $ref: '#/components/schemas/PredictionPoint'
        id:
          type: integer
          format: int64
        used_kbyte_1day:
          type: integer
          format: int64
        used_kbyte_30days:
          type: integer
          format: int64
        used_kbyte_7days:
          type: integer
          format: int64
        used_kbyte_points:
          type: array
          items:
            $ref: '#/components/schemas/PredictionPoint'
      title: PoolPrediction
      description: PoolPrediction contains pool prediction data
      example:
        used_kbyte_30days: 2
        data_kbyte_1day: 0
        used_kbyte_7days: 7
        used_kbyte_points:
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        data_kbyte_7days: 1
        used_kbyte_1day: 5
        create: '2000-01-23T04:56:07.000+00:00'
        data_kbyte_points:
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        id: 5
        data_kbyte_30days: 6
    ProtectionDomain_Nestview:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: id of protection domain
        name:
          type: string
          description: name of protection domain
      title: ProtectionDomain_Nestview
      example:
        name: name
        id: 5
    PlacementNodeProperties:
      type: object
      properties:
        is_witness:
          type: boolean
          description: whether this is a witness node
      title: PlacementNodeProperties
      description: PlacementNodeProperties contains properties for a placement node.
      example:
        is_witness: true
    PoolStat:
      type: object
      properties:
        actual_kbyte:
          type: integer
          format: int64
        create:
          type: string
          format: date-time
        creating_num:
          type: integer
          format: int

# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/xsky/refs/heads/main/openapi/xsky-pools-api-openapi.yml