> ## Documentation Index
> Fetch the complete documentation index at: https://docs.prelude.so/llms.txt
> Use this file to discover all available pages before exploring further.

# List the signals a rule can read

> **Beta.** The request and response shapes may still change.

List the Prelude signals a rule expression may reference. A signal is a name Prelude resolves for the evaluation being scored, and it means the same thing for every customer. Write it in an expression and compare it like any other value of its type.

Prelude provides these names. The rest of a rule's vocabulary is yours - the `attr.` names a recipe declares and the `param.` names it is configured with - and those do not appear here.

A signal may be absent from an evaluation, whatever its type. A rule that reads a signal that did not arrive reports `NOT_EVALUATED` rather than treating the missing value as a zero.

Prelude publishes the catalog progressively, so this listing grows over time. Write rules against what it returns: a signal it does not list is one Prelude has not committed to, and it can change or be removed without notice.

A signal is a name Prelude resolves for the evaluation being scored: a fact about the request, the device, or the number that Prelude determines for you. Every customer gets the same signals, and each one means the same thing for all of them.

## Your own values are separate

A rule can also read the `attr.` names a recipe declares and the `param.` names it is configured with. Those belong to you, they exist only in the recipe that declares them, and they are not listed here.

## An absent signal is not a zero

Any signal can be missing from a given evaluation. A rule that reads a signal that did not arrive reports `NOT_EVALUATED` instead of scoring. It does not read the absence as `false`, as `0`, or as an empty string. Write the condition you mean, and let the engine report the absence.

## The listing grows

Prelude publishes the catalog progressively, so this listing grows over time. Treat it as the supported vocabulary: a signal it does not list is one Prelude has not committed to, so read it rather than keeping a copy.


## OpenAPI

````yaml get /v2/watch/management/rules/catalog
openapi: 3.1.0
info:
  title: Prelude API
  version: 2.0.0
  description: The Prelude API allows you to send messages to your users.
  contact:
    email: support@prelude.so
servers:
  - url: https://api.prelude.dev
    description: Production server
security:
  - apiToken: []
tags:
  - name: Notify
    description: Send transactional and marketing messages with compliance enforcement.
  - name: Transactional
    description: Send transactional messages (deprecated - use Notify API instead).
  - name: Verify
    description: Verify phone numbers.
  - name: Watch
    description: Evaluate email addresses and phone numbers for trustworthiness.
  - name: Lookup
    description: >-
      Retrieve detailed information about a phone number including carrier data,
      line type, and portability status.
paths:
  /v2/watch/management/rules/catalog:
    get:
      tags:
        - Watch
      summary: List signals
      description: >-
        **Beta.** The request and response shapes may still change.


        List the Prelude signals a rule expression may reference. A signal is a
        name Prelude resolves for the evaluation being scored, and it means the
        same thing for every customer. Write it in an expression and compare it
        like any other value of its type.


        Prelude provides these names. The rest of a rule's vocabulary is yours -
        the `attr.` names a recipe declares and the `param.` names it is
        configured with - and those do not appear here.


        A signal may be absent from an evaluation, whatever its type. A rule
        that reads a signal that did not arrive reports `NOT_EVALUATED` rather
        than treating the missing value as a zero.


        Prelude publishes the catalog progressively, so this listing grows over
        time. Write rules against what it returns: a signal it does not list is
        one Prelude has not committed to, and it can change or be removed
        without notice.
      operationId: listWatchSignals
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 200
            default: 50
          description: >-
            Maximum number of signals to return per page. A larger value is
            clamped to 200 rather than refused.
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: Pagination cursor from the previous response.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WatchSignalListResponse'
        '400':
          description: KO
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    WatchSignalListResponse:
      type: object
      properties:
        signals:
          type: array
          items:
            $ref: '#/components/schemas/WatchSignal'
        next_cursor:
          type: string
          description: >-
            Pass this back as `cursor` for the next page. Absent on the last
            page.
          examples:
            - hardware_manufacturer
      required:
        - signals
    Error:
      type: object
      properties:
        code:
          type: string
          description: The error code.
          examples:
            - invalid_phone_number
        message:
          type: string
          examples:
            - >-
              The provided phone number is invalid. Provide a valid E.164 phone
              number.
          description: A human-readable message describing the error.
        type:
          type: string
          examples:
            - bad_request
          description: The error type.
        request_id:
          type: string
          examples:
            - 3d19215e-2991-4a05-a41a-527314e6ff6a
          description: >-
            A string that identifies this specific request. Report it back to us
            to help us diagnose your issues.
        param:
          type: string
          examples:
            - phone_number
          description: The parameter the error refers to, when it applies to a single one.
      required:
        - code
        - message
        - type
    WatchSignal:
      type: object
      properties:
        name:
          type: string
          description: The identifier to write in a rule expression.
          examples:
            - ip
        type:
          type: string
          enum:
            - bool
            - int
            - double
            - string
          description: The CEL type the signal compares as.
          examples:
            - bool
        description:
          type: string
          description: What the signal means.
          examples:
            - >-
              The end user's IP address: the one sent with the evaluation
              request, or the one the Prelude SDK collected.
      required:
        - name
        - type
        - description
  securitySchemes:
    apiToken:
      type: http
      scheme: bearer

````