NetBird Events API

View information about the account and network events.

OpenAPI Specification

netbird-events-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: NetBird REST Accounts Events 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: Events
  description: View information about the account and network events.
paths:
  /api/events/audit:
    get:
      summary: List all Audit Events
      description: Returns a list of all audit events
      tags:
      - Events
      security:
      - BearerAuth: []
      - TokenAuth: []
      responses:
        '200':
          description: A JSON Array of Events
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Event'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
  /api/events/network-traffic:
    get:
      summary: List all Traffic Events
      description: Returns a list of all network traffic events
      tags:
      - Events
      x-cloud-only: true
      x-experimental: true
      parameters:
      - name: page
        in: query
        description: Page number
        required: false
        schema:
          type: integer
          minimum: 1
          default: 1
      - name: page_size
        in: query
        description: Number of items per page
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 50000
          default: 1000
      - name: user_id
        in: query
        description: Filter by user ID
        required: false
        schema:
          type: string
      - name: reporter_id
        in: query
        description: Filter by reporter ID
        required: false
        schema:
          type: string
      - name: protocol
        in: query
        description: Filter by protocol
        required: false
        schema:
          type: integer
      - name: type
        in: query
        description: Filter by event type
        required: false
        schema:
          type: string
          enum:
          - TYPE_UNKNOWN
          - TYPE_START
          - TYPE_END
          - TYPE_DROP
      - name: connection_type
        in: query
        description: Filter by connection type
        required: false
        schema:
          type: string
          enum:
          - P2P
          - ROUTED
      - name: direction
        in: query
        description: Filter by direction
        required: false
        schema:
          type: string
          enum:
          - INGRESS
          - EGRESS
          - DIRECTION_UNKNOWN
      - name: search
        in: query
        description: Case-insensitive partial match on user email, source/destination names, and source/destination addresses
        required: false
        schema:
          type: string
      - name: start_date
        in: query
        description: Start date for filtering events (ISO 8601 format, e.g., 2024-01-01T00:00:00Z).
        required: false
        schema:
          type: string
          format: date-time
      - name: end_date
        in: query
        description: End date for filtering events (ISO 8601 format, e.g., 2024-01-31T23:59:59Z).
        required: false
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: List of network traffic events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkTrafficEventsResponse'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
  /api/events/proxy:
    get:
      summary: List all Reverse Proxy Access Logs
      description: Returns a paginated list of all reverse proxy access log entries
      tags:
      - Events
      parameters:
      - in: query
        name: page
        schema:
          type: integer
          default: 1
          minimum: 1
        description: Page number for pagination (1-indexed)
      - in: query
        name: page_size
        schema:
          type: integer
          default: 50
          minimum: 1
          maximum: 100
        description: Number of items per page (max 100)
      - in: query
        name: sort_by
        schema:
          type: string
          enum:
          - timestamp
          - url
          - host
          - path
          - method
          - status_code
          - duration
          - source_ip
          - user_id
          - auth_method
          - reason
          default: timestamp
        description: Field to sort by (url sorts by host then path)
      - in: query
        name: sort_order
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
        description: Sort order (ascending or descending)
      - in: query
        name: search
        schema:
          type: string
        description: General search across request ID, host, path, source IP, user email, and user name
      - in: query
        name: source_ip
        schema:
          type: string
        description: Filter by source IP address
      - in: query
        name: host
        schema:
          type: string
        description: Filter by host header
      - in: query
        name: path
        schema:
          type: string
        description: Filter by request path (supports partial matching)
      - in: query
        name: user_id
        schema:
          type: string
        description: Filter by authenticated user ID
      - in: query
        name: user_email
        schema:
          type: string
        description: Filter by user email (partial matching)
      - in: query
        name: user_name
        schema:
          type: string
        description: Filter by user name (partial matching)
      - in: query
        name: method
        schema:
          type: string
          enum:
          - GET
          - POST
          - PUT
          - PATCH
          - DELETE
          - HEAD
          - OPTIONS
        description: Filter by HTTP method
      - in: query
        name: status
        schema:
          type: string
          enum:
          - success
          - failed
        description: Filter by status (success = 2xx/3xx, failed = 1xx/4xx/5xx)
      - in: query
        name: status_code
        schema:
          type: integer
          minimum: 100
          maximum: 599
        description: Filter by HTTP status code
      - in: query
        name: start_date
        schema:
          type: string
          format: date-time
        description: Filter by timestamp >= start_date (RFC3339 format)
      - in: query
        name: end_date
        schema:
          type: string
          format: date-time
        description: Filter by timestamp <= end_date (RFC3339 format)
      responses:
        '200':
          description: Paginated list of reverse proxy access logs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProxyAccessLogsResponse'
        '401':
          $ref: '#/components/responses/requires_authentication'
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal_error'
components:
  schemas:
    NetworkTrafficEndpoint:
      type: object
      properties:
        id:
          type: string
          description: ID of this endpoint (e.g., peer ID or resource ID).
          example: ch8i4ug6lnn4g9hqv7m0
        type:
          type: string
          description: Type of the endpoint object (e.g., UNKNOWN, PEER, HOST_RESOURCE).
          example: PEER
        name:
          type: string
          description: Name is the name of the endpoint object (e.g., a peer name).
          example: My Peer
        geo_location:
          $ref: '#/components/schemas/NetworkTrafficLocation'
        os:
          type: string
          nullable: true
          description: Operating system of the peer, if applicable.
          example: Linux
        address:
          type: string
          description: IP address (and possibly port) in string form.
          example: 100.64.0.10:51820
        dns_label:
          type: string
          nullable: true
          description: DNS label/name if available.
          example: '*.mydomain.com'
      required:
      - id
      - type
      - name
      - geo_location
      - os
      - address
      - dns_label
    NetworkTrafficEvent:
      type: object
      properties:
        flow_id:
          type: string
          description: FlowID is the ID of the connection flow. Not unique because it can be the same for multiple events (e.g., start and end of the connection).
          example: 61092452-b17c-4b14-b7cf-a2158c549826
        reporter_id:
          type: string
          description: ID of the reporter of the event (e.g., the peer that reported the event).
          example: ch8i4ug6lnn4g9hqv7m0
        source:
          $ref: '#/components/schemas/NetworkTrafficEndpoint'
        destination:
          $ref: '#/components/schemas/NetworkTrafficEndpoint'
        user:
          $ref: '#/components/schemas/NetworkTrafficUser'
        policy:
          $ref: '#/components/schemas/NetworkTrafficPolicy'
        icmp:
          $ref: '#/components/schemas/NetworkTrafficICMP'
        protocol:
          type: integer
          description: Protocol is the protocol of the traffic (e.g. 1 = ICMP, 6 = TCP, 17 = UDP, etc.).
          example: 6
        direction:
          type: string
          description: Direction of the traffic (e.g. DIRECTION_UNKNOWN, INGRESS, EGRESS).
          example: INGRESS
        rx_bytes:
          type: integer
          description: Number of bytes received.
          example: 1234
        rx_packets:
          type: integer
          description: Number of packets received.
          example: 5
        tx_bytes:
          type: integer
          description: Number of bytes transmitted.
          example: 1234
        tx_packets:
          type: integer
          description: Number of packets transmitted.
          example: 5
        events:
          type: array
          description: List of events that are correlated to this flow (e.g., start, end).
          items:
            $ref: '#/components/schemas/NetworkTrafficSubEvent'
      required:
      - id
      - flow_id
      - reporter_id
      - receive_timestamp
      - source
      - destination
      - user
      - policy
      - icmp
      - protocol
      - direction
      - rx_bytes
      - rx_packets
      - tx_bytes
      - tx_packets
      - events
    NetworkTrafficSubEvent:
      type: object
      properties:
        type:
          type: string
          description: Type of the event (e.g., TYPE_UNKNOWN, TYPE_START, TYPE_END, TYPE_DROP).
          example: TYPE_START
        timestamp:
          type: string
          format: date-time
          description: Timestamp of the event as sent by the peer.
          example: 2025-03-20 16:23:58.125397+00:00
      required:
      - type
      - timestamp
    NetworkTrafficUser:
      type: object
      properties:
        id:
          type: string
          description: UserID is the ID of the user that initiated the event (can be empty as not every event is user-initiated).
          example: google-oauth2|123456789012345678901
        email:
          type: string
          description: Email of the user who initiated the event (if any).
          example: alice@netbird.io
        name:
          type: string
          description: Name of the user who initiated the event (if any).
          example: Alice Smith
      required:
      - id
      - email
      - name
    NetworkTrafficPolicy:
      type: object
      properties:
        id:
          type: string
          description: ID of the policy that allowed this event.
          example: ch8i4ug6lnn4g9hqv7m0
        name:
          type: string
          description: Name of the policy that allowed this event.
          example: All to All
      required:
      - id
      - name
    NetworkTrafficEventsResponse:
      type: object
      properties:
        data:
          type: array
          description: List of network traffic events
          items:
            $ref: '#/components/schemas/NetworkTrafficEvent'
        page:
          type: integer
          description: Current page number
        page_size:
          type: integer
          description: Number of items per page
        total_records:
          type: integer
          description: Total number of event records available
        total_pages:
          type: integer
          description: Total number of pages available
      required:
      - data
      - page
      - page_size
      - total_records
      - total_pages
    ProxyAccessLog:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the access log entry
          example: ch8i4ug6lnn4g9hqv7m0
        service_id:
          type: string
          description: ID of the service that handled the request
          example: ch8i4ug6lnn4g9hqv7m0
        timestamp:
          type: string
          format: date-time
          description: Timestamp when the request was made
          example: '2024-01-31T15:30:00Z'
        method:
          type: string
          description: HTTP method of the request
          example: GET
        host:
          type: string
          description: Host header of the request
          example: example.com
        path:
          type: string
          description: Path of the request
          example: /api/users
        duration_ms:
          type: integer
          description: Duration of the request in milliseconds
          example: 150
        status_code:
          type: integer
          description: HTTP status code returned
          example: 200
        source_ip:
          type: string
          description: Source IP address of the request
          example: 192.168.1.100
        reason:
          type: string
          description: Reason for the request result (e.g., authentication failure)
          example: Authentication failed
        user_id:
          type: string
          description: ID of the authenticated user, if applicable
          example: user-123
        auth_method_used:
          type: string
          description: Authentication method used (e.g., password, pin, oidc)
          example: oidc
        country_code:
          type: string
          description: Country code from geolocation
          example: US
        city_name:
          type: string
          description: City name from geolocation
          example: San Francisco
        subdivision_code:
          type: string
          description: First-level administrative subdivision ISO code (e.g. state/province)
          example: CA
        bytes_upload:
          type: integer
          format: int64
          description: Bytes uploaded (request body size)
          example: 1024
        bytes_download:
          type: integer
          format: int64
          description: Bytes downloaded (response body size)
          example: 8192
        protocol:
          type: string
          description: 'Protocol type: http, tcp, or udp'
          example: http
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Extra context about the request (e.g. crowdsec_verdict)
      required:
      - id
      - service_id
      - timestamp
      - method
      - host
      - path
      - duration_ms
      - status_code
      - bytes_upload
      - bytes_download
    NetworkTrafficLocation:
      type: object
      properties:
        city_name:
          type: string
          description: Name of the city (if known).
          example: Berlin
        country_code:
          type: string
          description: ISO country code (if known).
          example: DE
      required:
      - city_name
      - country_code
    ProxyAccessLogsResponse:
      type: object
      properties:
        data:
          type: array
          description: List of proxy access log entries
          items:
            $ref: '#/components/schemas/ProxyAccessLog'
        page:
          type: integer
          description: Current page number
          example: 1
        page_size:
          type: integer
          description: Number of items per page
          example: 50
        total_records:
          type: integer
          description: Total number of log records available
          example: 523
        total_pages:
          type: integer
          description: Total number of pages available
          example: 11
      required:
      - data
      - page
      - page_size
      - total_records
      - total_pages
    NetworkTrafficICMP:
      type: object
      properties:
        type:
          type: integer
          description: ICMP type (if applicable).
          example: 8
        code:
          type: integer
          description: ICMP code (if applicable).
          example: 0
      required:
      - type
      - code
    Event:
      type: object
      properties:
        id:
          description: Event unique identifier
          type: string
          example: 10
        timestamp:
          description: The date and time when the event occurred
          type: string
          format: date-time
          example: '2023-05-05T10:04:37.473542Z'
        activity:
          description: The activity that occurred during the event
          type: string
          example: Route created
        activity_code:
          description: The string code of the activity that occurred during the event
          type: string
          enum:
          - peer.user.add
          - peer.setupkey.add
          - user.join
          - user.invite
          - account.create
          - account.delete
          - user.peer.delete
          - rule.add
          - rule.update
          - rule.delete
          - policy.add
          - policy.update
          - policy.delete
          - setupkey.add
          - setupkey.update
          - setupkey.revoke
          - setupkey.overuse
          - setupkey.delete
          - group.add
          - group.update
          - group.delete
          - peer.group.add
          - peer.group.delete
          - user.group.add
          - user.group.delete
          - user.role.update
          - setupkey.group.add
          - setupkey.group.delete
          - dns.setting.disabled.management.group.add
          - dns.setting.disabled.management.group.delete
          - route.add
          - route.delete
          - route.update
          - peer.ssh.enable
          - peer.ssh.disable
          - peer.rename
          - peer.login.expiration.enable
          - peer.login.expiration.disable
          - nameserver.group.add
          - nameserver.group.delete
          - nameserver.group.update
          - account.setting.peer.login.expiration.update
          - account.setting.peer.login.expiration.enable
          - account.setting.peer.login.expiration.disable
          - personal.access.token.create
          - personal.access.token.delete
          - service.user.create
          - service.user.delete
          - user.block
          - user.unblock
          - user.delete
          - user.peer.login
          - peer.login.expire
          - dashboard.login
          - integration.create
          - integration.update
          - integration.delete
          - account.setting.peer.approval.enable
          - account.setting.peer.approval.disable
          - peer.approve
          - peer.approval.revoke
          - transferred.owner.role
          - posture.check.create
          - posture.check.update
          - posture.check.delete
          - peer.inactivity.expiration.enable
          - peer.inactivity.expiration.disable
          - account.peer.inactivity.expiration.enable
          - account.peer.inactivity.expiration.disable
          - account.peer.inactivity.expiration.update
          - account.setting.group.propagation.enable
          - account.setting.group.propagation.disable
          - account.setting.routing.peer.dns.resolution.enable
          - account.setting.routing.peer.dns.resolution.disable
          - network.create
          - network.update
          - network.delete
          - network.resource.create
          - network.resource.update
          - network.resource.delete
          - network.router.create
          - network.router.update
          - network.router.delete
          - resource.group.add
          - resource.group.delete
          - account.dns.domain.update
          - account.setting.lazy.connection.enable
          - account.setting.lazy.connection.disable
          - account.network.range.update
          - peer.ip.update
          - user.approve
          - user.reject
          - user.create
          - account.settings.auto.version.update
          - identityprovider.create
          - identityprovider.update
          - identityprovider.delete
          - dns.zone.create
          - dns.zone.update
          - dns.zone.delete
          - dns.zone.record.create
          - dns.zone.record.update
          - dns.zone.record.delete
          - peer.job.create
          - user.password.change
          - user.invite.link.create
          - user.invite.link.accept
          - user.invite.link.regenerate
          - user.invite.link.delete
          - service.create
          - service.update
          - service.delete
          example: route.add
        initiator_id:
          description: The ID of the initiator of the event. E.g., an ID of a user that triggered the event.
          type: string
          example: google-oauth2|123456789012345678901
        initiator_name:
          description: The name of the initiator of the event.
          type: string
          example: John Doe
        initiator_email:
          description: The e-mail address of the initiator of the event. E.g., an e-mail of a user that triggered the event.
          type: string
          example: demo@netbird.io
        target_id:
          description: The ID of the target of the event. E.g., an ID of the peer that a user removed.
          type: string
          example: chad9d86lnnc59g18ou0
        meta:
          description: The metadata of the event
          type: object
          additionalProperties:
            type: string
          example:
            name: my route
            network_range: 10.64.0.0/24
            peer_id: chacbco6lnnbn6cg5s91
      required:
      - id
      - timestamp
      - activity
      - activity_code
      - initiator_id
      - initiator_name
      - initiator_email
      - target_id
      - meta
  responses:
    bad_request:
      description: Bad Request
      content: {}
    internal_error:
      description: Internal Server Error
      content: {}
    requires_authentication:
      description: Requires authentication
      content: {}
    forbidden:
      description: Forbidden
      content: {}
  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.....".