openapi: 3.1.0
info:
  title: Netify Integration API
  description: |
    The Netify integration APIs provide programmatic access to the data used by the Netify Agent: applications,
    protocols, intelligence, signatures, and licensing objects. These endpoints supply catalogs, category mappings,
    changelogs, and brand assets that are commonly used by UIs and orchestration systems.
  version: 2.0.0
servers:
  - url: https://hub.netify.ai/api/v2/integrator
    description: Integration API server
tags:
  - name: Applications
    description: Application catalog, categories, and changelogs.
  - name: Protocols
    description: Protocol catalog, categories, and release logs.
  - name: Intelligence
    description: Intelligence drivers, categories, and release logs.
  - name: Licenses
    description: License lifecycle management and provisioning.
  - name: Signatures
    description: Direct access to signature and category data files.

components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

  schemas:
    StatusResponse:
      type: object
      required:
        - status_code
        - status_message
      properties:
        status_code:
          oneOf:
            - type: integer
            - type: string
          description: A numeric status code (0 for success) or a padded string for extended error codes.
        status_message:
          type: string
          description: A human-readable status message.
      example:
        status_code: 0
        status_message: Success.

    ErrorResponse:
      type: object
      required:
        - status_code
        - status_message
      properties:
        status_code:
          oneOf:
            - type: integer
            - type: string
          description: A numeric error code or a padded string for extended error codes.
        status_message:
          type: string
          description: A human-readable error message.
      example:
        status_code: "403.000"
        status_message: Forbidden.

    ApplicationChangelogEntry:
      type: object
      required:
        - application
        - type
        - signature_updated
        - date
      properties:
        application:
          $ref: '#/components/schemas/Application'
        type:
          type: string
          description: The type of change.
          enum:
            - added
            - updated
            - deleted
        signature_updated:
          type: boolean
          description: Indicates if the application signatures were updated.
        date:
          type: string
          description: The change release date.
          format: date

    HomePage:
      type: object
      required:
        - url
        - text
      properties:
        url:
          type: string
          description: URL for the home page.
        text:
          type: string
          description: Anchor text for the home page.

    Application:
      type: object
      required:
        - id
        - tag
        - label
        - description
        - home_page
        - category
        - active
        - favicon
        - icon
        - logo
        - favicon_source
        - icon_source
        - logo_source
      properties:
        id:
          type: integer
          description: The ID number associated with the application.
        tag:
          type: string
          description: The tag associated with the application (for example, netify.whatsapp).
        label:
          type: string
          description: The name an end user would typically use to identify the application.
        full_label:
          type: string
          description: A more formal full name of the application, if available.
        description:
          type: string
          description: A brief summary of the application.
        home_page:
          $ref: '#/components/schemas/HomePage'
          description: A small object that defines both the url and associated text for the application home page.
        category:
          $ref: '#/components/schemas/Category'
          description: A small object that defines the id, tag and label for the application category.
        active:
          type: boolean
          description: Indicates whether the application is currently supported.
        favicon:
          type: string
          description: The URL for the favicon.
        icon:
          type: string
          description: The URL for the icon.
        logo:
          type: string
          description: The URL for the logo.
        favicon_source:
          type: string
          description: The data source used for the favicon.
        icon_source:
          type: string
          description: The data source used for the icon.
        logo_source:
          type: string
          description: The data source used for the logo.
      example:
        id: 156
        tag: netify.spotify
        label: Spotify
        description: Spotify is a popular music streaming service available on mobile, tablets, game consoles and more. The company has a large reach with over 100 million users and more than 20 million songs.
        home_page:
          url: https://www.spotify.com
          text: Spotify
        category:
          id: 29
          tag: streaming-media
          label: Streaming Media
        active: true
        favicon: https://static.netify.ai/logos/s/p/o/fcbgvsl/favicon.png?v=4
        icon: https://static.netify.ai/logos/s/p/o/fcbgvsl/icon.png?v=4
        logo: https://static.netify.ai/logos/s/p/o/fcbgvsl/logo.png?v=4
        favicon_source: app
        icon_source: app
        logo_source: app

    Category:
      type: object
      required:
        - id
        - tag
        - label
      properties:
        id:
          type: integer
          description: The category ID.
        tag:
          type: string
          description: The category tag.
        label:
          type: string
          description: The category label.

    ProtocolReleaseLogEntry:
      type: object
      required:
        - protocol
        - type
        - version
      properties:
        protocol:
          $ref: '#/components/schemas/Protocol'
        type:
          type: string
          description: The type of change.
          enum:
            - added
            - updated
            - deleted
        version:
          type: string
          description: The Netify Agent release version.

    Protocol:
      type: object
      required:
        - id
        - tag
        - label
        - description
        - home_page
        - category
        - introduced
        - deprecated
      properties:
        id:
          type: integer
          description: The ID number associated with the protocol.
        tag:
          type: string
          description: The tag associated with the protocol. The tag is only intended for user interfaces (UIs) and internal use -- it is not used in the Netify Agent.
        label:
          type: string
          description: The name an end user would typically use to identify the protocol.
        full_label:
          type: string
          description: A more formal full name of the protocol. This field is only included if a formal name exists.
        abbreviation:
          type: string
          description: The protocol abbreviation. This field is only included if an abbreviation is in wide use.
        description:
          type: string
          description: A one or two-sentence description of the protocol.
        home_page:
          $ref: '#/components/schemas/HomePage'
          description: A small object that defines both the url and associated text for the protocol home page.
        category:
          $ref: '#/components/schemas/Category'
          description: A small object that defines the id, tag and label for the protocol category.
        introduced:
          type: string
          description: The Netify Agent version where the protocol was introduced.
        deprecated:
          type: string
          description: The Netify Agent version where the protocol was deprecated.
      example:
        id: 206
        tag: wireguard
        label: WireGuard
        full_label: WireGuard
        description: WireGuard is a simple, fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec and OpenVPN.
        home_page:
          url: https://www.wireguard.com/
          text: WireGuard
        category:
          id: 21
          tag: vpn
          label: VPN
        introduced: "3.00"
        deprecated: ""

    IntelligenceReleaseLogEntry:
      type: object
      required:
        - intelligence
        - type
        - version
      properties:
        intelligence:
          $ref: '#/components/schemas/Intelligence'
        type:
          type: string
          description: The type of change.
          enum:
            - added
            - updated
            - deleted
        version:
          type: string
          description: The Netify Intelligence plugin release version.

    Intelligence:
      type: object
      required:
        - id
        - tag
        - label
        - description
        - category
        - supported
        - deprecated
      properties:
        id:
          type: integer
          description: The ID number associated with the intelligence driver.
        tag:
          type: string
          description: The tag associated with the intelligence driver.
        label:
          type: string
          description: The name an end user would typically use to identify the intelligence driver.
        description:
          type: string
          description: A one or two-sentence description of the intelligence driver.
        category:
          $ref: '#/components/schemas/Category'
          description: A small object that defines the id, tag and label for the intelligence category.
        score:
          type: integer
          description: The score associated with the intelligence driver.
        supported:
          type: string
          description: The Netify plugin version where the intelligence driver was introduced.
        deprecated:
          type: string
          description: The Netify plugin version where the intelligence driver was deprecated.
      example:
        id: 21
        tag: doh_scanner
        label: DoH Scanner
        description: Connection with detected DoH server.
        score: 30
        category:
          id: 4
          tag: encrypted_dns_detection
          label: Encrypted DNS Detection
        supported: 1.2.1
        deprecated: ""

    LicenseCreateRequest:
      type: object
      required:
        - issued_to
        - entitlements
      properties:
        issued_to:
          type: string
          description: The name of the individual or organization the license is being issued to.
        entitlements:
          type: array
          description: The list of active entitlements.
          items:
            type: string
        expire_at:
          type: string
          format: date
          description: Requested expiry date formatted as YYYY-MM-DD.
        duration_days:
          type: integer
          description: Alternative to expire_at; requests an expiry date duration_days from the current date.
        duid:
          type: string
          description: Unique device identifier used to restrict the license to a specific hardware endpoint.
        description:
          type: string
          description: Optional description to add to the generated license.
        notes:
          type: string
          description: Optional note to add to the generated license.
        renewable:
          type: boolean
          description: Allows or denies future renewal. Requires API key entitlement. Default is entitlement-dependent.
        transferable:
          type: boolean
          description: Requests omission of the standard non-transferable legal clause. Requires API key entitlement.

    LicenseObject:
      type: object
      description: The license object representation used in lifecycle management operations.
      required:
        - version
        - serial
        - issued_to
        - renewable
        - transferable
        - signature
        - entitlements
        - expire_at
        - created_at
      properties:
        version:
          type: string
          description: The license version format.
        serial:
          type: string
          description: The serial number of the license.
        issued_to:
          type: string
          description: The name of the individual or organization the license is being issued to.
        renewable:
          type: boolean
          description: License renewable flag.
        transferable:
          type: boolean
          description: License transferable flag.
        signature:
          type: string
          description: The cryptographic signature of the license.
        entitlements:
          type: array
          description: The list of active entitlements.
          items:
            type: string
        expire_at:
          type: object
          required:
            - unix_time
            - date
          properties:
            unix_time:
              type: integer
              description: The time the license expires in Unix time.
            date:
              type: string
              description: "The expiration date and time in YYYY-MM-DD HH:MM:SS format"
              pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$'
        created_at:
          type: object
          required:
            - unix_time
            - date
          properties:
            unix_time:
              type: integer
              description: The time the license was created in Unix time.
            date:
              type: string
              description: "The creation date and time in YYYY-MM-DD HH:MM:SS format"
              pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$'
      example:
        version: "1.0"
        serial: "2026-3638-61333041"
        issued_to: "Toronto Office"
        renewable: true
        transferable: false
        signature: "LHhbWkp+32qvi4E6bTx..."
        entitlements:
          - "application-signatures"
          - "netify-proc-aggregator"
          - "netify-proc-dev-discovery"
          - "netify-proc-flow-actions"
          - "netify-sink-mqtt"
          - "netify-proc-intel"
        expire_at:
          unix_time: 1780012800
          date: "2026-05-29 00:00:00"
        created_at:
          unix_time: 1774830914
          date: "2026-03-30 00:35:14"

    LicenseNetifyd:
      type: object
      description: The license object representation used for Netify Agent deployments.
      required:
        - created_at
        - expire_at
        - issued_to
        - issuer
        - serial
        - signature
        - terms_of_service
        - transfer_notice
        - version
      properties:
        created_at:
          type: object
          required:
            - date
            - unix
          properties:
            date:
              type: string
              description: "The creation date and time in YYYY-MM-DD HH:MM:SS format"
              pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$'
            unix:
              type: integer
              description: The time the license was created in Unix time.
        expire_at:
          type: object
          required:
            - date
            - unix
          properties:
            date:
              type: string
              description: "The expiration date and time in YYYY-MM-DD HH:MM:SS format"
              pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$'
            unix:
              type: integer
              description: The time the license expires in Unix time.
        issued_to:
          type: string
          description: The name of the individual or organization the license is being issued to.
        issuer:
          type: object
          description: Information about the issuer.
          required:
            - email
            - name
          properties:
            email:
              type: string
              description: Email of the issuer.
            name:
              type: string
              description: Name of the issuer.
        serial:
          type: string
          description: The serial number of the license.
        signature:
          type: string
          description: The cryptographic signature of the license.
        terms_of_service:
          type: string
          description: Terms of service clause with link.
        transfer_notice:
          type: string
          description: The transferability clause.
        version:
          type: string
          description: The license version format.
      additionalProperties:
        type: string
        description: Entitlements granted by the license.
      example:
        version: "1.0"
        serial: "2026-3638-61333041"
        issued_to: "Toronto Office"
        issuer:
          email: "licensing@example.com"
          name: "Example Co"
        signature: "LHhbWkp+32qvi4E6bTx..."
        terms_of_service: "By using this software, you agree to the Terms of Service - https://www.netify.ai/terms-of-service"
        transfer_notice: "This license is granted solely to the original licensee and is non-transferable."
        created_at:
          unix: 1774830914
          date: "2026-03-30 00:35:14"
        expire_at:
          unix: 1780012800
          date: "2026-05-29 00:00:00"
        application-signatures: "true"

security:
  - ApiKeyAuth: []

paths:
  /applications/catalog:
    get:
      tags:
        - Applications
      summary: Application Catalog
      operationId: getApplicationCatalog
      description: Returns the list of all applications supported by the Netify Agent.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Application'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - id: 156
                    tag: netify.spotify
                    label: Spotify
                    description: Spotify is a popular music streaming service available on mobile, tablets, game consoles and more.
                    home_page:
                      url: https://www.spotify.com
                      text: Spotify
                    category:
                      id: 29
                      tag: streaming-media
                      label: Streaming Media
                    active: true
                    favicon: https://static.netify.ai/logos/s/p/o/fcbgvsl/favicon.png?v=4
                    icon: https://static.netify.ai/logos/s/p/o/fcbgvsl/icon.png?v=4
                    logo: https://static.netify.ai/logos/s/p/o/fcbgvsl/logo.png?v=4
                    favicon_source: app
                    icon_source: app
                    logo_source: app
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /applications/categories:
    get:
      tags:
        - Applications
      summary: Application Categories
      operationId: getApplicationCategories
      description: Returns the list of application categories supported by the Netify Agent.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Category'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - id: 9
                    tag: financial
                    label: Financial
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /applications/changelog:
    get:
      tags:
        - Applications
      summary: Application Changelog
      operationId: getApplicationChangelog
      description: Returns the log of application additions, deletions, and signature changes.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/ApplicationChangelogEntry'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - application:
                      id: 140
                      tag: netify.apple
                      label: Apple
                      description: Apple designs, manufactures and markets a range of consumer electronics, computer software, and online services. Products include the iPhone, iPad, Mac computers, and Apple Watch.
                      home_page:
                        url: https://www.apple.com
                        text: Apple
                      category:
                        id: 5
                        tag: business
                        label: Business
                      active: true
                      favicon: https://static.netify.ai/logos/a/p/p/nccyr/favicon.png?v=6
                      icon: https://static.netify.ai/logos/a/p/p/nccyr/icon.ico?v=6
                      logo: https://static.netify.ai/logos/a/p/p/nccyr/logo.png?v=6
                      favicon_source: app
                      icon_source: app
                      logo_source: app
                    type: updated
                    signature_updated: true
                    date: "2026-05-06"
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /intelligence/catalog:
    get:
      tags:
        - Intelligence
      summary: Intelligence Catalog
      operationId: getIntelligenceCatalog
      description: Returns the list of all intelligence drivers supported by the Netify Intelligence engine.
      parameters:
        - name: version
          in: query
          schema:
            type: string
            pattern: '^\d+(\.\d+){1,2}$'
          description: Filter results by Netify Intelligence plugin version.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Intelligence'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - id: 21
                    tag: doh_scanner
                    label: DoH Scanner
                    description: Connection with detected DoH server.
                    score: 30
                    category:
                      id: 4
                      tag: encrypted_dns_detection
                      label: Encrypted DNS Detection
                    supported: "1.2.1"
                    deprecated: ""
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /intelligence/categories:
    get:
      tags:
        - Intelligence
      summary: Intelligence Categories
      operationId: getIntelligenceCategories
      description: Returns the list of categories supported by the Netify Intelligence engine.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Category'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - id: 4
                    tag: encrypted_dns_detection
                    label: Encrypted DNS Detection
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /intelligence/releaselog:
    get:
      tags:
        - Intelligence
      summary: Intelligence Release Log
      operationId: getIntelligenceReleaseLog
      description: Returns the intelligence release log with additions and deletions in release order.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/IntelligenceReleaseLogEntry'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - intelligence:
                      id: 21
                      tag: doh_scanner
                      label: DoH Scanner
                      description: Connection with detected DoH server.
                      category:
                        id: 4
                        tag: encrypted_dns_detection
                        label: Encrypted DNS Detection
                    type: added
                    version: "1.2.1"
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /licenses:
    get:
      tags:
        - Licenses
      summary: License List
      operationId: licenseList
      description: Returns a list of all licenses created with the API key.
      parameters:
        - name: format
          in: query
          schema:
            type: string
            enum: [netifyd, object]
          description: Response format.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        oneOf:
                          - type: array
                            items:
                              $ref: '#/components/schemas/LicenseObject'
                          - type: array
                            items:
                              $ref: '#/components/schemas/LicenseNetifyd'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.
    post:
      tags:
        - Licenses
      summary: License Create
      operationId: licenseCreate
      description: Creates a new license.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LicenseCreateRequest'
      responses:
        '200':
          description: License created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/LicenseNetifyd'
              example:
                status_code: 0
                status_message: Success.
                data:
                  version: "1.0"
                  issued_to: "Toronto Office"
                  created_at:
                    date: "2026-05-07 14:35:09"
                    unix: 1778164509
                  expire_at:
                    date: "2026-06-04 00:00:00"
                    unix: 1780531200
                  serial: "2026-6027-30832256"
                  issuer:
                    name: "Example Co."
                    email: "licensing@example.com"
                  terms_of_service: "By using this software, you agree to the Terms of Service - https://www.netify.ai/terms-of-service"
                  description: "Flow Actions Policy Control"
                  netify-proc-flow-actions:
                    not_valid_after: "2026-06-04"
                  signature: "MKDm6+emMFj3wK..."
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /licenses/{serial}:
    get:
      tags:
        - Licenses
      summary: License View
      description: Returns the license for given serial number.
      operationId: licenseView
      parameters:
        - name: serial
          in: path
          required: true
          schema:
            type: string
        - name: format
          in: query
          schema:
            type: string
            enum: [netifyd, object]
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        oneOf:
                          - $ref: '#/components/schemas/LicenseObject'
                          - $ref: '#/components/schemas/LicenseNetifyd'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: License not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.
    delete:
      tags:
        - Licenses
      summary: License Delete
      operationId: licenseDelete
      parameters:
        - name: serial
          in: path
          required: true
          schema:
            type: string
          example: "2025-7546-23742565"
      responses:
        '200':
          description: License delete action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
              example:
                status_code: 0
                status_message: Success.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: License not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /licenses/{serial}/renew:
    post:
      tags:
        - Licenses
      summary: License Renew
      operationId: licenseRenew
      parameters:
        - name: serial
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                expire_at:
                  type: string
                  format: date
                duration_days:
                  type: integer
      responses:
        '200':
          description: License renewed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: License not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /protocols/catalog:
    get:
      tags:
        - Protocols
      summary: Protocol Catalog
      operationId: getProtocolCatalog
      description: Returns the list of all protocols - past and present - supported by the Netify Agent.
      parameters:
        - name: version
          in: query
          schema:
            type: string
            pattern: '^\d+(\.\d+){1,2}$'
          description: If the Netify agent version is passed as a parameter to the endpoint, the catalog results will only include the protocols supported in the specified version.  You can specify the full version (e.g. 5.2.1), or a major version number (e.g. 5.2).
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Protocol'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - id: 206
                    tag: wireguard
                    label: WireGuard
                    full_label: WireGuard
                    description: WireGuard is a simple, fast and modern VPN that utilizes state-of-the-art cryptography.
                    home_page:
                      url: https://www.wireguard.com/
                      text: WireGuard
                    category:
                      id: 21
                      tag: vpn
                      label: VPN
                    introduced: "3.00"
                    deprecated: ""
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /protocols/categories:
    get:
      tags:
        - Protocols
      summary: Protocol Categories
      operationId: getProtocolCategories
      description: Returns the list of protocol categories supported by the Netify Agent.
      parameters:
        - name: version
          in: query
          schema:
            type: string
            pattern: '^\d+(\.\d+){1,2}$'
          description: If the Netify agent version is passed as a parameter to the endpoint, the results will only include the categories supported in the specified version. You can specify the full version (e.g. 5.2.1), or a major version number (e.g. 5.2). Currently, all versions share the same categories, but this may not be true in future releases.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Category'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - id: 21
                    tag: vpn
                    label: VPN
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /protocols/release-log:
    get:
      tags:
        - Protocols
      summary: Protocol Release Log
      operationId: getProtocolReleaseLog
      description: Returns the protocol release log with detailed version information.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/StatusResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/ProtocolReleaseLogEntry'
              example:
                status_code: 0
                status_message: Success.
                data:
                  - protocol:
                      id: 338
                      tag: ceph
                      label: Ceph
                      full_label: Ceph
                      description: The Ceph protocol is a distributed storage system protocol used by the Ceph storage platform to enable scalable, fault-tolerant object, block, and file storage.
                      home_page:
                        url: https://docs.ceph.com/en/reef/dev/network-protocol/
                        text: Ceph
                      category:
                        id: 4
                        tag: file-server
                        label: File Server
                      introduced: "5.1.7"
                      deprecated: ""
                    type: added
                    version: "5.1.7"
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /signatures/categories:
    get:
      tags:
        - Signatures
      summary: Signatures Categories
      operationId: getSignaturesCategories
      description: Returns application category signatures for the Netify Agent.
      parameters:
        - name: version
          in: query
          required: true
          schema:
            type: string
            pattern: '^\d+(\.\d+){1,2}$'
      responses:
        '200':
          description: Successful response returning the category data file.
          headers:
            x-sha1-hash:
              description: SHA1 hash of the file (legacy).
              schema:
                type: string
            x-sha256-hash:
              description: SHA256 hash of the file.
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                description: Category definitions formatted for the Netify Agent.
                additionalProperties: true
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /signatures/applications:
    get:
      tags:
        - Signatures
      summary: Signatures Applications
      operationId: getSignaturesApplications
      description: Returns application signatures for the Netify Agent.
      parameters:
        - name: version
          in: query
          required: true
          schema:
            type: string
            pattern: '^\d+(\.\d+){1,2}$'
          description: The Netify Agent version used to determine the correct file format and signature patterns.  You can specify the full version (e.g. 5.2.1), or a major version number (e.g. 5.2).
        - name: ip_version
          in: query
          schema:
            type: integer
            enum: [4, 6]
          description: Optional. By default, signatures include both IPv4 and IPv6. Set ip_version to return only IPv4 or IPv6 data.
      responses:
        '200':
          description: Successful response returning the binary signature data file.
          headers:
            x-sha1-hash:
              description: SHA1 hash of the file (legacy).
              schema:
                type: string
            x-sha256-hash:
              description: SHA256 hash of the file.
              schema:
                type: string
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
                description: Application signatures formatted for the Netify Agent.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.

  /signatures/intelligence:
    get:
      tags:
        - Signatures
      summary: Signatures Intelligence
      operationId: getSignaturesIntelligence
      description: Returns intelligence signatures for the Netify Intelligence engine.
      parameters:
        - name: version
          in: query
          required: true
          schema:
            type: string
            pattern: '^\d+(\.\d+){1,2}$'
          description: The Netify Intelligence plugin version used to determine the correct file format and signature patterns.
      responses:
        '200':
          description: Successful response returning the binary signature data file.
          headers:
            x-sha1-hash:
              description: SHA1 hash of the file (legacy).
              schema:
                type: string
            x-sha256-hash:
              description: SHA256 hash of the file.
              schema:
                type: string
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
                description: Intelligence signatures formatted for the Netify Agent.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests.
        '500':
          description: Internal server error.
