> ## 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.

# Send feedbacks about verifications

> Optional. Report verification-funnel steps (verification.started, verification.completed) when you run phone verification outside Prelude Verify. Feeds Watch abuse-rate counters for your own flow. Call Predict on the same target before verification.started and reuse metadata.correlation_id so auth-start counters receive predict signals; without a linked predict, only attempt-rate counters update on started. Not required if you only use Events and/or Predict, or if Verify already handles verification for that traffic.

**Optional.** Use this endpoint only when you run phone verification **on your own stack** (not [Prelude Verify](/verify/v2/documentation/introduction)) and want Prelude to track attempt and success rates for abuse detection.

Each feedback mirrors a step in that funnel:

* **`verification.started`** — verification began (challenge issued or started). Maps to an “attempt” in the anti-fraud counter model, and—when linked to an earlier predict—to **auth-start** counters (IP, prefix, JA4, carrier, and related signals).
* **`verification.completed`** — verification succeeded. Maps to a successful “check” for conversion-style rules.

You do **not** need Feedback if:

* You only use [Events](/watch/v2/api-reference/dispatch-events) and/or [Predict](/watch/v2/api-reference/predict-outcome), or
* Verification already goes through Prelude Verify (Verify feeds those counters for that traffic).

A Predict call does **not** replace Feedback — Predict scores once; Feedback records what actually happened in your verification flow.

## Recommended flow for counter updates

To warm the Watch antispam pool when verification starts, use **Predict before Feedback** on the same target:

1. **[Predict](/watch/v2/api-reference/predict-outcome)** at signup (same `target` as the later feedback).
2. **`verification.started`** feedback when the user begins verification, with the same `metadata.correlation_id` you sent on predict (if you use correlation IDs).
3. **`verification.completed`** when verification succeeds (same target and `correlation_id` when applicable).

```text theme={null}
POST /v2/watch/predict     →  stores prediction + signals (scoring only)
POST /v2/watch/feedback    →  verification.started  →  attempt + auth counters (when predict linked)
POST /v2/watch/feedback    →  verification.completed →  check-success counters
```

If no matching prediction is found, `verification.started` still updates the **attempt-rate** counter from the phone number and country, but **auth-level** counters (IP concentration, JA4, device, carrier, and similar) are not updated. Always call Predict first when you rely on those signals.


## OpenAPI

````yaml post /v2/watch/feedback
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/feedback:
    post:
      tags:
        - Watch
      summary: Send feedbacks
      description: >-
        Optional. Report verification-funnel steps (verification.started,
        verification.completed) when you run phone verification outside Prelude
        Verify. Feeds Watch abuse-rate counters for your own flow. Call Predict
        on the same target before verification.started and reuse
        metadata.correlation_id so auth-start counters receive predict signals;
        without a linked predict, only attempt-rate counters update on started.
        Not required if you only use Events and/or Predict, or if Verify already
        handles verification for that traffic.
      operationId: sendFeedbacks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeedbackWatchRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeedbackWatchResponse'
        '400':
          description: KO
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                example:
                  code: invalid_events
                  message: >-
                    The provided feedbacks are invalid. See `details` field for
                    more information.
                  type: bad_request
                  param: events
                  details:
                    - path: feedbacks.0.target.value
                      message: >-
                        Target value must be a valid email address or E.164
                        formatted phone number.
                    - path: feedbacks.0.type
                      message: >-
                        The feedback type must be one of 'verification.started',
                        or 'verification.completed'.
                  request_id: 3d19215e-2991-4a05-a41a-527314e6ff6a
components:
  schemas:
    FeedbackWatchRequest:
      type: object
      properties:
        feedbacks:
          type: array
          description: >-
            A list of feedbacks to send. A maximum of 100 feedbacks can be sent
            in a single request.
          maxItems: 100
          items:
            $ref: '#/components/schemas/WatchFeedback'
      required:
        - feedbacks
    FeedbackWatchResponse:
      type: object
      properties:
        status:
          type: string
          examples:
            - success
          enum:
            - success
          description: The status of the feedbacks sending.
        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.
      required:
        - status
        - request_id
    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.
      required:
        - code
        - message
        - type
    WatchFeedback:
      type: object
      properties:
        target:
          $ref: '#/components/schemas/Target'
          description: The feedback target. Only supports phone numbers for now.
        type:
          type: string
          enum:
            - verification.started
            - verification.completed
          description: The type of feedback.
        metadata:
          type: object
          description: The metadata for this feedback.
          properties:
            correlation_id:
              type: string
              description: >-
                A user-defined identifier to correlate this feedback with. It is
                returned in the response and any webhook events that refer to
                this feedback.
              maxLength: 80
      required:
        - target
        - type
    Target:
      type: object
      description: The operation target. Either a phone number or an email address.
      properties:
        type:
          type: string
          enum:
            - phone_number
            - email_address
          description: The type of the target. Either "phone_number" or "email_address".
        value:
          type: string
          examples:
            - '+30123456789'
            - mail@example.com
          description: An E.164 formatted phone number or an email address.
      required:
        - type
        - value
  securitySchemes:
    apiToken:
      type: http
      scheme: bearer

````