openapi: 3.0.3
info:
  title: Waku V2 node REST API
  version: 1.0.0
  contact:
    name: VAC Team
    url: https://forum.vac.dev/

tags:
  - name: admin
    description: Admin REST API for WakuV2 node

paths:
  /admin/v1/peers:
    get:
      summary: Get connected peers info
      description: Retrieve information about connected peers.
      operationId: getPeerInfo
      tags:
        - admin
      responses:
        '200':
          description: Information about a Waku v2 node.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WakuPeer'
        '5XX':
          description: Unexpected error.
    post:
      summary: Adds new peer(s) to connect with
      description: Adds new peer(s) to connect with.
      operationId: postPeerInfo
      tags:
        - admin
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: Ok
        '400':
          description: Cannot connect to one or more peers.
        '5XX':
          description: Unexpected error.
  /admin/v1/filter/subscriptions:
    get:
      summary: Get filter protocol subscribers
      description: Retrieve information about the serving filter subscriptions
      operationId: getFilterInfo
      tags:
        - admin
      responses:
        '200':
          description: Information about subscribed filter peers and topics
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FilterSubscription'
        '400':
          description: Filter Protocol is not mounted to the node
        '5XX':
          description: Unexpected error.

components:
  schemas:
    WakuPeer:
      type: object
      required:
        - multiaddr
        - protocols
      properties:
        multiaddr:
          type: string
        protocols:
          type: array
          items:
            type: object
            required:
              - protocol
              - connected
            properties:
              protocol:
                type: string
              connected:
                type: boolean

    FilterSubscription:
      type: object
      required:
        - peerId
        - filterCriteria
      properties:
        peerId:
          type: string
        filterCriteria:
          type: array
          items:
            type: object
            required:
              - pubsubTopic
              - contentTopic
            properties:
              pubsubTopic:
                type: string
              contentTopic:
                type: string