NetBird Peers API

Interact with and view information about peers.

OpenAPI Specification

netbird-peers-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: NetBird REST Accounts Peers API
  description: API to manipulate groups, rules, policies and retrieve information about peers and users
  version: 0.0.1
servers:
- url: https://api.netbird.io
  description: Default server
security:
- BearerAuth: []
- TokenAuth: []
tags:
- name: Peers
  description: Interact with and view information about peers.
paths:
  /api/peers:
    get:
      summary: List all Peers
      description: Returns a list of all peers
      tags:
      - Peers
      parameters:
      - in: query
        name: name
        schema:
          type: string
        description: Filter peers by name
      - in: query
        name: ip
        schema:
          type: string
        description: Filter peers by IP address
      security:
      - BearerAuth: []
      - TokenAuth: []
      responses:
        '200':
          description: A JSON Array of Peers
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PeerBatch'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
  /api/peers/{peerId}:
    get:
      summary: Retrieve a Peer
      description: Get information about a peer
      tags:
      - Peers
      security:
      - BearerAuth: []
      - TokenAuth: []
      parameters:
      - in: path
        name: peerId
        required: true
        schema:
          type: string
        description: The unique identifier of a peer
      responses:
        '200':
          description: A Peer object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Peer'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
    put:
      summary: Update a Peer
      description: Update information about a peer
      tags:
      - Peers
      security:
      - BearerAuth: []
      - TokenAuth: []
      parameters:
      - in: path
        name: peerId
        required: true
        schema:
          type: string
        description: The unique identifier of a peer
      requestBody:
        description: update a peer
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PeerRequest'
      responses:
        '200':
          description: A Peer object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Peer'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
    delete:
      summary: Delete a Peer
      description: Delete a peer
      tags:
      - Peers
      security:
      - BearerAuth: []
      - TokenAuth: []
      parameters:
      - in: path
        name: peerId
        required: true
        schema:
          type: string
        description: The unique identifier of a peer
      responses:
        '200':
          description: Delete status code
          content: {}
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
  /api/peers/{peerId}/accessible-peers:
    get:
      summary: List accessible Peers
      description: Returns a list of peers that the specified peer can connect to within the network.
      tags:
      - Peers
      security:
      - BearerAuth: []
      - TokenAuth: []
      parameters:
      - in: path
        name: peerId
        required: true
        schema:
          type: string
        description: The unique identifier of a peer
      responses:
        '200':
          description: A JSON Array of Accessible Peers
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AccessiblePeer'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
  /api/peers/{peerId}/temporary-access:
    post:
      summary: Create a Temporary Access Peer
      description: Creates a temporary access peer that can be used to access this peer and this peer only. The temporary access peer and its access policies will be automatically deleted after it disconnects.
      tags:
      - Peers
      security:
      - BearerAuth: []
      - TokenAuth: []
      parameters:
      - in: path
        name: peerId
        required: true
        schema:
          type: string
        description: The unique identifier of a peer
      requestBody:
        description: Temporary Access Peer create request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PeerTemporaryAccessRequest'
      responses:
        '200':
          description: Temporary Access Peer response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PeerTemporaryAccessResponse'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
components:
  responses:
    bad_request:
      description: Bad Request
      content: {}
    internal_error:
      description: Internal Server Error
      content: {}
    requires_authentication:
      description: Requires authentication
      content: {}
    forbidden:
      description: Forbidden
      content: {}
  schemas:
    AccessiblePeer:
      allOf:
      - $ref: '#/components/schemas/PeerMinimum'
      - type: object
        properties:
          ip:
            description: Peer's IP address
            type: string
            example: 10.64.0.1
          dns_label:
            description: Peer's DNS label is the parsed peer name for domain resolution. It is used to form an FQDN by appending the account's domain to the peer label. e.g. peer-dns-label.netbird.cloud
            type: string
            example: stage-host-1.netbird.cloud
          user_id:
            description: User ID of the user that enrolled this peer
            type: string
            example: google-oauth2|277474792786460067937
          os:
            description: Peer's operating system and version
            type: string
            example: linux
          country_code:
            $ref: '#/components/schemas/CountryCode'
          city_name:
            $ref: '#/components/schemas/CityName'
          geoname_id:
            description: Unique identifier from the GeoNames database for a specific geographical location.
            type: integer
            example: 2643743
          connected:
            description: Peer to Management connection status
            type: boolean
            example: true
          last_seen:
            description: Last time peer connected to Netbird's management service
            type: string
            format: date-time
            example: '2023-05-05T10:05:26.420578Z'
        required:
        - ip
        - dns_label
        - user_id
        - os
        - country_code
        - city_name
        - geoname_id
        - connected
        - last_seen
    PeerRequest:
      type: object
      properties:
        name:
          type: string
          example: stage-host-1
        ssh_enabled:
          type: boolean
          example: true
        login_expiration_enabled:
          type: boolean
          example: false
        inactivity_expiration_enabled:
          type: boolean
          example: false
        approval_required:
          description: (Cloud only) Indicates whether peer needs approval
          type: boolean
          example: true
        ip:
          description: Peer's IP address
          type: string
          format: ipv4
          example: 100.64.0.15
      required:
      - name
      - ssh_enabled
      - login_expiration_enabled
      - inactivity_expiration_enabled
    PeerTemporaryAccessResponse:
      type: object
      properties:
        name:
          description: Peer's hostname
          type: string
          example: temp-host-1
        id:
          description: Peer ID
          type: string
          example: chacbco6lnnbn6cg5s90
        rules:
          description: List of temporary access rules
          type: array
          items:
            type: string
            example: tcp/80
      required:
      - name
      - id
      - rules
    GroupMinimum:
      type: object
      properties:
        id:
          description: Group ID
          type: string
          example: ch8i4ug6lnn4g9hqv7m0
        name:
          description: Group Name identifier
          type: string
          example: devs
        peers_count:
          description: Count of peers associated to the group
          type: integer
          example: 2
        resources_count:
          description: Count of resources associated to the group
          type: integer
          example: 5
        issued:
          description: How the group was issued (api, integration, jwt)
          type: string
          enum:
          - api
          - integration
          - jwt
          example: api
      required:
      - id
      - name
      - peers_count
      - resources_count
    PeerMinimum:
      type: object
      properties:
        id:
          description: Peer ID
          type: string
          example: chacbco6lnnbn6cg5s90
        name:
          description: Peer's hostname
          type: string
          example: stage-host-1
      required:
      - id
      - name
    PeerLocalFlags:
      type: object
      properties:
        rosenpass_enabled:
          description: Indicates whether Rosenpass is enabled on this peer
          type: boolean
          example: true
        rosenpass_permissive:
          description: Indicates whether Rosenpass is in permissive mode or not
          type: boolean
          example: false
        server_ssh_allowed:
          description: Indicates whether SSH access this peer is allowed or not
          type: boolean
          example: true
        disable_client_routes:
          description: Indicates whether client routes are disabled on this peer or not
          type: boolean
          example: false
        disable_server_routes:
          description: Indicates whether server routes are disabled on this peer or not
          type: boolean
          example: false
        disable_dns:
          description: Indicates whether DNS management is disabled on this peer or not
          type: boolean
          example: false
        disable_firewall:
          description: Indicates whether firewall management is disabled on this peer or not
          type: boolean
          example: false
        block_lan_access:
          description: Indicates whether LAN access is blocked on this peer when used as a routing peer
          type: boolean
          example: false
        block_inbound:
          description: Indicates whether inbound traffic is blocked on this peer
          type: boolean
          example: false
        lazy_connection_enabled:
          description: Indicates whether lazy connection is enabled on this peer
          type: boolean
          example: false
    CountryCode:
      description: 2-letter ISO 3166-1 alpha-2 code that represents the country
      type: string
      example: DE
    Peer:
      allOf:
      - $ref: '#/components/schemas/PeerMinimum'
      - type: object
        properties:
          created_at:
            description: Peer creation date (UTC)
            type: string
            format: date-time
            example: '2023-05-05T09:00:35.477782Z'
          ip:
            description: Peer's IP address
            type: string
            example: 10.64.0.1
          connection_ip:
            description: Peer's public connection IP address
            type: string
            example: 35.64.0.1
          connected:
            description: Peer to Management connection status
            type: boolean
            example: true
          last_seen:
            description: Last time peer connected to Netbird's management service
            type: string
            format: date-time
            example: '2023-05-05T10:05:26.420578Z'
          os:
            description: Peer's operating system and version
            type: string
            example: Darwin 13.2.1
          kernel_version:
            description: Peer's operating system kernel version
            type: string
            example: 23.2.0
          geoname_id:
            description: Unique identifier from the GeoNames database for a specific geographical location.
            type: integer
            example: 2643743
          version:
            description: Peer's daemon or cli version
            type: string
            example: 0.14.0
          groups:
            description: Groups that the peer belongs to
            type: array
            items:
              $ref: '#/components/schemas/GroupMinimum'
          ssh_enabled:
            description: Indicates whether SSH server is enabled on this peer
            type: boolean
            example: true
          user_id:
            description: User ID of the user that enrolled this peer
            type: string
            example: google-oauth2|277474792786460067937
          hostname:
            description: Hostname of the machine
            type: string
            example: stage-host-1
          ui_version:
            description: Peer's desktop UI version
            type: string
            example: 0.14.0
          dns_label:
            description: Peer's DNS label is the parsed peer name for domain resolution. It is used to form an FQDN by appending the account's domain to the peer label. e.g. peer-dns-label.netbird.cloud
            type: string
            example: stage-host-1.netbird.cloud
          login_expiration_enabled:
            description: Indicates whether peer login expiration has been enabled or not
            type: boolean
            example: false
          login_expired:
            description: Indicates whether peer's login expired or not
            type: boolean
            example: false
          last_login:
            description: Last time this peer performed log in (authentication). E.g., user authenticated.
            type: string
            format: date-time
            example: '2023-05-05T09:00:35.477782Z'
          inactivity_expiration_enabled:
            description: Indicates whether peer inactivity expiration has been enabled or not
            type: boolean
            example: false
          approval_required:
            description: (Cloud only) Indicates whether peer needs approval
            type: boolean
            example: true
          disapproval_reason:
            description: (Cloud only) Reason why the peer requires approval
            type: string
          country_code:
            $ref: '#/components/schemas/CountryCode'
          city_name:
            $ref: '#/components/schemas/CityName'
          serial_number:
            description: System serial number
            type: string
            example: C02XJ0J0JGH7
          extra_dns_labels:
            description: Extra DNS labels added to the peer
            type: array
            items:
              type: string
              example: stage-host-1
          ephemeral:
            description: Indicates whether the peer is ephemeral or not
            type: boolean
            example: false
          local_flags:
            $ref: '#/components/schemas/PeerLocalFlags'
        required:
        - city_name
        - connected
        - connection_ip
        - country_code
        - created_at
        - dns_label
        - geoname_id
        - groups
        - hostname
        - ip
        - kernel_version
        - last_login
        - last_seen
        - login_expiration_enabled
        - login_expired
        - inactivity_expiration_enabled
        - os
        - ssh_enabled
        - user_id
        - version
        - ui_version
        - approval_required
        - serial_number
        - extra_dns_labels
        - ephemeral
    PeerTemporaryAccessRequest:
      type: object
      properties:
        name:
          description: Peer's hostname
          type: string
          example: temp-host-1
        wg_pub_key:
          description: Peer's WireGuard public key
          type: string
          example: n0r3pL4c3h0ld3rK3y==
        rules:
          description: List of temporary access rules
          type: array
          items:
            type: string
            example: tcp/80
      required:
      - name
      - wg_pub_key
      - rules
    PeerBatch:
      allOf:
      - $ref: '#/components/schemas/Peer'
      - type: object
        properties:
          created_at:
            description: Peer creation date (UTC)
            type: string
            format: date-time
            example: '2023-05-05T09:00:35.477782Z'
          accessible_peers_count:
            description: Number of accessible peers
            type: integer
            example: 5
        required:
        - created_at
        - accessible_peers_count
    CityName:
      description: Commonly used English name of the city
      type: string
      example: Berlin
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    TokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: Enter the token with the `Token` prefix, e.g. "Token nbp_F3f0d.....".