CybelAngel Alerts API

"Alerts in Feed" — real-time machine-readable access to the alerts CybelAngel's collection and ML pipeline generates across ADM, Board, Cloud Drive, DNS, Database, Docshare, Codeshare, Fileserver, Leak, Paste and RSS categories. Search by keyword, IP, hostname and detection date; fetch a single alert; fetch leaked credentials and codeshare findings attached to an alert; fetch a DNS screenshot; PATCH a customer assessment status; and retrieve the same alerts as OASIS STIX bundles.

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/cybelangel-alerts-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 email required.

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

OpenAPI Specification

cybelangel-alerts-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 1.0.0
  title: References
  description: |-
    API for CybelAngel's Alerts.
    Authentication uses standard [OAuth2 Bearer Tokens](https://tools.ietf.org/html/rfc6750).

    Here is a simple example of how to fetch such a token with curl:

    ```shell
    curl -X POST https://auth.cybelangel.com/oauth/token -H 'content-type: application/json -d '{"client_id": "client_id", "client_secret": "client_secret", "audience": "https://platform.cybelangel.com/", "grant_type": "client_credentials"}
    ```

    The received access token can then be used as a Bearer token to request our API.
  contact:
    email: support@cybelangel.com
  license:
    url: 'https://cybelangel.com/'
    name: Proprietary
servers:
  - url: 'https://api.cybelangel.com'
paths:
  /v1/alerts:
    get:
      tags:
        - alerts
      summary: Search alerts
      description: 'Search alerts according to user filters.<br/><br/>Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.<br/>Requests for data outside of this range will not return any results.'
      operationId: alerts_search_alerts_alerts_get
      parameters:
        - name: cursor
          in: query
          description: |-
            Set it to the the 'cursor' value received from previous search request to iterate on the following alerts, beyond the limit set per request.
            Searching from a cursor does not impact the total number of results.
            Behavior is undefined if the filters and sort are changed between successive requests.

            Note: with big datasets, iterating on cursor can be much slower than iterating on 'start_date' filter.
          required: false
          schema:
            title: Cursor
            description: |-
              Set it to the the 'cursor' value received from previous search request to iterate on the following alerts, beyond the limit set per request.
              Searching from a cursor does not impact the total number of results.
              Behavior is undefined if the filters and sort are changed between successive requests.

              Note: with big datasets, iterating on cursor can be much slower than iterating on 'start_date' filter.
            anyOf:
              - type: string
        - name: order_by
          in: query
          description: |-
            Can be multiple fields with +/- for ascending/descending sort.
            Fields can be ingestion_date, detection_date, ml_score.
          required: false
          schema:
            type: array
            title: Order By
            description: |-
              Can be multiple fields with +/- for ascending/descending sort.
              Fields can be ingestion_date, detection_date, ml_score.
            default:
              - +ingestion_date
              - +detection_date
            items:
              type: string
              pattern: '[+-]?(ingestion_date|detection_date|ml_score)'
              minLength: 1
        - name: stream_id
          in: query
          description: |-
            Stream id used to filter alerts belonging to some organization.
            A client can only query alerts for its allowed streams.
          required: true
          schema:
            type: string
            title: Stream Id
            description: |-
              Stream id used to filter alerts belonging to some organization.
              A client can only query alerts for its allowed streams.
            minLength: 1
            examples:
              - 90b18fad-b9ca-41db-bae1-b4964c1a4e84
          examples:
            default:
              value: 90b18fad-b9ca-41db-bae1-b4964c1a4e84
        - name: start_date
          in: query
          description: |-
            Minimal ingestion date. Expects a date with timezone information.

            Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
            Requests for data outside of this range will not return any results.
          required: true
          schema:
            type: string
            title: Start Date
            description: |-
              Minimal ingestion date. Expects a date with timezone information.

              Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
              Requests for data outside of this range will not return any results.
            format: date-time
            examples:
              - '2024-09-01T10:00:00.000Z'
          examples:
            default:
              value: '2024-09-01T10:00:00.000Z'
        - name: end_date
          in: query
          description: |-
            Maximal ingestion date. Expects a date with timezone information.

            Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
            Requests for data outside of this range will not return any results.
          required: false
          schema:
            title: End Date
            description: |-
              Maximal ingestion date. Expects a date with timezone information.

              Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
              Requests for data outside of this range will not return any results.
            anyOf:
              - type: string
                format: date-time
        - name: status
          in: query
          description: |-
            Select only alerts having one of the requested statuses.
            By default selects only 'new' alerts to exclude alerts automatically discarded by our ML tools or already processed by analysts.
          required: false
          schema:
            type: array
            title: Status
            description: |-
              Select only alerts having one of the requested statuses.
              By default selects only 'new' alerts to exclude alerts automatically discarded by our ML tools or already processed by analysts.
            default:
              - new
            items:
              $ref: '#/components/schemas/AlertStatus'
        - name: category
          in: query
          description: 'If set, select alerts with specified categories.'
          required: false
          schema:
            type: array
            title: Category
            description: 'If set, select alerts with specified categories.'
            default: []
            items:
              $ref: '#/components/schemas/AlertCategory'
        - name: customer_assessment
          in: query
          description: |-
            If set, select only alerts having one of the requested customer assessments.
            This is the **customer.assessment** field that may be set by clients using the API.
          required: false
          schema:
            type: array
            title: Customer Assessment
            description: |-
              If set, select only alerts having one of the requested customer assessments.
              This is the **customer.assessment** field that may be set by clients using the API.
            default: []
            items:
              $ref: '#/components/schemas/CustomerAssessment'
        - name: keyword
          in: query
          description: 'If set, select alerts matching specified keywords aliases.'
          required: false
          schema:
            type: array
            title: Keyword
            description: 'If set, select alerts matching specified keywords aliases.'
            default: []
            items:
              type: string
              minLength: 1
        - name: keyword_id
          in: query
          description: 'If set, select alerts matching specified keyword identifiers.'
          required: false
          schema:
            type: array
            title: Keyword Id
            description: 'If set, select alerts matching specified keyword identifiers.'
            default: []
            items:
              type: string
              minLength: 1
        - name: min_ml_score
          in: query
          description: 'If set, select alerts with equal or higher ''ml.score''.'
          required: false
          schema:
            type: integer
            title: Min Ml Score
            description: 'If set, select alerts with equal or higher ''ml.score''.'
            minimum: 0
            maximum: 100
            default: 0
        - name: hostname
          in: query
          description: 'If set, select alerts with any specified hostname value.'
          required: false
          schema:
            type: array
            title: Hostname
            description: 'If set, select alerts with any specified hostname value.'
            default: []
            items:
              type: string
              minLength: 1
        - name: ip
          in: query
          description: 'If set, select alerts with specified IP address among ''ip'', ''server_ip'' or ''victim_ip'' fields.'
          required: false
          schema:
            type: array
            title: Ip
            description: 'If set, select alerts with specified IP address among ''ip'', ''server_ip'' or ''victim_ip'' fields.'
            default: []
            items:
              type: string
              minLength: 1
        - name: search_query
          in: query
          description: Words to search in alerts text fields.
          required: false
          schema:
            title: Search Query
            description: Words to search in alerts text fields.
            anyOf:
              - type: string
                minLength: 1
        - name: limit
          in: query
          description: Max number of returned alerts. Increasing it will also increase the payload.
          required: false
          schema:
            type: integer
            title: Limit
            description: Max number of returned alerts. Increasing it will also increase the payload.
            minimum: 0
            maximum: 1000
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlertList'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ValidationError_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_NotFoundError_'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_UnknownError_'
      security:
        - jwt: []
      servers:
        - url: 'https://api.cybelangel.com'
  '/v1/alerts/{alert_id}':
    get:
      tags:
        - alerts
      summary: Get an alert
      description: 'Get an alert by its unique id.<br/><br/>Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.<br/>Requests for data outside of this range will not return any results.'
      operationId: alerts_search_an_alert_alerts__alert_id__get
      parameters:
        - name: alert_id
          in: path
          description: ID of an alert.
          required: true
          schema:
            type: string
            title: Alert Id
            description: ID of an alert.
            minLength: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicAlert'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ValidationError_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_NotFoundError_'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_UnknownError_'
      security:
        - jwt: []
      servers:
        - url: 'https://api.cybelangel.com'
  '/v1/alerts/{alert_id}/customer':
    patch:
      tags:
        - alerts
      summary: Set customer fields
      description: Allow to edit customer-maintained fields in an alert published by the API.<br/><br/>The only use now is to assess the alerts.<br/>These assessments may then be used by CybelAngel to improve the alerts automated filtering.
      operationId: alerts_patch_an_alert_alerts__alert_id__customer_patch
      parameters:
        - name: alert_id
          in: path
          description: ID of an alert.
          required: true
          schema:
            type: string
            title: Alert Id
            description: ID of an alert.
            minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlertRequestCustomerFieldsPatch'
      responses:
        '204':
          description: No Content
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ValidationError_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_NotFoundError_'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_UnknownError_'
      security:
        - jwt: []
      servers:
        - url: 'https://api.cybelangel.com'
  '/v1/alerts/{alert_id}/credentials':
    get:
      tags:
        - alerts
      summary: Get leak alert credentials (deprecated)
      description: This endpoint is deprecated and will be removed in a future release.<br/>Use /v1/alerts/<alert_id>/leak-credentials instead.
      operationId: alerts_get_alert_credentials_deprecated_alerts__alert_id__credentials_get
      parameters:
        - name: alert_id
          in: path
          description: ID of an alert.
          required: true
          schema:
            type: string
            title: Alert Id
            description: ID of an alert.
            minLength: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CredentialsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ValidationError_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_NotFoundError_'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_GoneError_'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_UnknownError_'
      deprecated: true
      security:
        - jwt: []
      servers:
        - url: 'https://api.cybelangel.com'
  '/v1/alerts/{alert_id}/leak-credentials':
    get:
      tags:
        - alerts
      summary: Get leak alert credentials
      description: Get credentials associated with an alert.
      operationId: alerts_get_alert_credentials_alerts__alert_id__leak_credentials_get
      parameters:
        - name: alert_id
          in: path
          description: ID of an alert.
          required: true
          schema:
            type: string
            title: Alert Id
            description: ID of an alert.
            minLength: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CredentialsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ValidationError_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_NotFoundError_'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_UnknownError_'
      security:
        - jwt: []
      servers:
        - url: 'https://api.cybelangel.com'
  '/v1/alerts/{alert_id}/codeshare-findings':
    get:
      tags:
        - alerts
      summary: Get codeshare alert findings
      description: 'Get sensitive code snippets for a codeshare alert.<br/><br/>Note: downloading hundreds of thousands of findings may take a few dozen seconds.'
      operationId: alerts_get_codeshare_findings_alerts__alert_id__codeshare_findings_get
      parameters:
        - name: alert_id
          in: path
          description: ID of an alert.
          required: true
          schema:
            type: string
            title: Alert Id
            description: ID of an alert.
            minLength: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FindingsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ValidationError_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_NotFoundError_'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_UnknownError_'
      security:
        - jwt: []
      servers:
        - url: 'https://api.cybelangel.com'
  '/v1/alerts/{alert_id}/dns-screenshot':
    get:
      tags:
        - alerts
      summary: Get DNS alert screenshot.
      description: 'Get the website screenshot associated with a DNS alert.<br/><br/>If a screenshot is present, it is returned as a PNG file.<br/>If no screenshot was taken for the alert, a 204 NO_CONTENT is returned.<br/>If the alert is older than 180 days a GONE response is returned.'
      operationId: alerts_get_alert_dns_screenshot_alerts__alert_id__dns_screenshot_get
      parameters:
        - name: alert_id
          in: path
          description: ID of an alert.
          required: true
          schema:
            type: string
            title: Alert Id
            description: ID of an alert.
            minLength: 1
      responses:
        '200':
          description: OK
          content:
            image/png:
              schema:
                type: string
                contentMediaType: application/octet-stream
        '204':
          description: No Content
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ValidationError_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_NotFoundError_'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_GoneError_'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_UnknownError_'
      security:
        - jwt: []
      servers:
        - url: 'https://api.cybelangel.com'
  /v1/leak-credentials:
    get:
      tags:
        - alerts
      summary: Get leak credentials
      description: Get leak credentials we collected.
      operationId: alerts_get_leak_credentials_leak_credentials_get
      parameters:
        - name: stream_id
          in: query
          description: |-
            Stream id used to filter alerts belonging to some organization.
            A client can only query alerts for its allowed streams.
          required: true
          schema:
            type: string
            title: Stream Id
            description: |-
              Stream id used to filter alerts belonging to some organization.
              A client can only query alerts for its allowed streams.
            minLength: 1
            examples:
              - 90b18fad-b9ca-41db-bae1-b4964c1a4e84
          examples:
            default:
              value: 90b18fad-b9ca-41db-bae1-b4964c1a4e84
        - name: start_date
          in: query
          description: Minimal ingestion date. Expects a date with timezone information.
          required: true
          schema:
            type: string
            title: Start Date
            description: Minimal ingestion date. Expects a date with timezone information.
            format: date-time
            examples:
              - '2024-09-01T10:00:00.000Z'
          examples:
            default:
              value: '2024-09-01T10:00:00.000Z'
        - name: end_date
          in: query
          description: Maximal ingestion date. Expects a date with timezone information.
          required: false
          schema:
            title: End Date
            description: Maximal ingestion date. Expects a date with timezone information.
            anyOf:
              - type: string
                format: date-time
        - name: match
          in: query
          description: Words to search in credentials logins and targets.
          required: false
          schema:
            title: Match
            description: Words to search in credentials logins and targets.
            anyOf:
              - type: string
                minLength: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CredentialsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ValidationError_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_NotFoundError_'
        '410':
          description: Gone
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_GoneError_'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIErrorResponse_UnknownError_'
      security:
        - jwt: []
      servers:
        - url: 'https://api.cybelangel.com'
  /v1/stix/alerts:
    get:
      tags:
        - stix
      summary: Search alerts in STIX 2.1 format
      description: 'Search alerts according to user filters and return them as a Bundle in STIX 2.1 format.<br/>See https://oasis-open.github.io/cti-documentation/stix/intro for more information on this format.<br/><br/>Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.<br/>Requests for data outside of this range will not return any results.'
      operationId: stix_search_stix_alerts_stix_alerts_get
      parameters:
        - name: cursor
          in: query
          description: |-
            Set it to the the 'cursor' value received from previous search request to iterate on the following alerts, beyond the limit set per request.
            Searching from a cursor does not impact the total number of results.
            Behavior is undefined if the filters and sort are changed between successive requests.

            Note: with big datasets, iterating on cursor can be much slower than iterating on 'start_date' filter.
          required: false
          schema:
            title: Cursor
            description: |-
              Set it to the the 'cursor' value received from previous search request to iterate on the following alerts, beyond the limit set per request.
              Searching from a cursor does not impact the total number of results.
              Behavior is undefined if the filters and sort are changed between successive requests.

              Note: with big datasets, iterating on cursor can be much slower than iterating on 'start_date' filter.
            anyOf: []
        - name: order_by
          in: query
          description: |-
            Can be multiple fields with +/- for ascending/descending sort.
            Fields can be ingestion_date, detection_date, ml_score.
          required: false
          schema:
            type: array
            title: Order By
            description: |-
              Can be multiple fields with +/- for ascending/descending sort.
              Fields can be ingestion_date, detection_date, ml_score.
            default:
              - +ingestion_date
              - +detection_date
            items:
              type: string
              pattern: '[+-]?(ingestion_date|detection_date|ml_score)'
              minLength: 1
        - name: stream_id
          in: query
          description: |-
            Stream id used to filter alerts belonging to some organization.
            A client can only query alerts for its allowed streams.
          required: true
          schema:
            type: string
            title: Stream Id
            description: |-
              Stream id used to filter alerts belonging to some organization.
              A client can only query alerts for its allowed streams.
            minLength: 1
            examples:
              - 90b18fad-b9ca-41db-bae1-b4964c1a4e84
          examples:
            default:
              value: 90b18fad-b9ca-41db-bae1-b4964c1a4e84
        - name: start_date
          in: query
          description: |-
            Minimal ingestion date. Expects a date with timezone information.

            Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
            Requests for data outside of this range will not return any results.
          required: true
          schema:
            type: string
            title: Start Date
            description: |-
              Minimal ingestion date. Expects a date with timezone information.

              Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
              Requests for data outside of this range will not return any results.
            format: date-time
            examples:
              - '2024-09-01T10:00:00.000Z'
          examples:
            default:
              value: '2024-09-01T10:00:00.000Z'
        - name: end_date
          in: query
          description: |-
            Maximal ingestion date. Expects a date with timezone information.

            Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
            Requests for data outside of this range will not return any results.
          required: false
          schema:
            title: End Date
            description: |-
              Maximal ingestion date. Expects a date with timezone information.

              Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
              Requests for data outside of this range will not return any results.
            anyOf: []
        - name: status
          in: query
          description: |-
            Select only alerts having one of the requested statuses.
            By default selects only 'new' alerts to exclude alerts automatically discarded by our ML tools or already processed by analysts.
          required: false
          schema:
            type: array
            title: Status
            description: |-
              Select only alerts having one of the requested statuses.
              By default selects only 'new' alerts to exclude alerts automatically discarded by our ML tools or already processed by analysts.
            default:
              - new
            items:
              $ref: '#/components/schemas/AlertStatus'
        - name: category
          in: query
          description: 'If set, select alerts with specified categories.'
          required: false
          schema:
            type: array
            title: Category
            description: 'If set, select alerts with specified categories.'
            default: []
            items:
              $ref: '#/components/schemas/AlertCategory'
        - name: customer_assessment
          in: query
          description: |-
            If set, select only alerts having one of the requested customer assessments.
            This is the **customer.assessment** field that may be set by clients using the API.
          required: false
          schema:
            type: array
            title: Customer Assessment
            description: |-
              If set, select only alerts having one of the requested customer assessments.
              This is the **customer.assessment** field that may be set by clients using the API.
            default: []
            items:
              $ref: '#/components/schemas/CustomerAssessment'
        - name: keyword
          in: query
          description: 'If set, select alerts matching specified keywords aliases.'
          required: false
          schema:
            type: array
            title: Keyword
            description: 'If set, select alerts matching specified keywords aliases.'
            default: []
            items:
              type: string
              minLength: 1
        - name: keyword_id
          in: quer

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