openapi: 3.0.3 info: title: Prelude Lookup Watch API description: 'Prelude is a phone and email verification, transactional messaging, phone number intelligence (lookup), and anti-fraud API - "the trust layer between your signups and your business." This document models Prelude''s public REST API v2 (base https://api.prelude.dev/v2) across four products: Verify (create / check one-time passcodes over SMS, WhatsApp, RCS, Viber, and voice), Notify (transactional messaging), Lookup / Intel (phone number intelligence - line type, carrier, ported / temporary flags, CNAM), and Watch (anti-fraud risk prediction and feedback). All requests authenticate with a Bearer API key (Authorization: Bearer YOUR_API_KEY) obtained from the Prelude dashboard under All Services > Configure > Keys. Endpoint paths and request / response schemas are grounded in the live Prelude documentation at docs.prelude.so as of 2026-07-11; the Watch events (dispatch-events) endpoint is modeled from documentation references and marked accordingly.' version: '2.0' contact: name: Prelude url: https://prelude.so servers: - url: https://api.prelude.dev/v2 description: Prelude API v2 security: - bearerAuth: [] tags: - name: Watch description: Anti-fraud risk prediction and outcome feedback. paths: /watch/predict: post: operationId: predictWatch tags: - Watch summary: Predict signup risk description: Scores a signup identifier (phone number or email address) as `legitimate` or `suspicious`, optionally using anti-fraud signals such as IP, device id, and device platform, plus a frontend SDK dispatch id. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PredictWatchRequest' responses: '200': description: The risk prediction. content: application/json: schema: $ref: '#/components/schemas/PredictWatchResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /watch/feedback: post: operationId: sendWatchFeedback tags: - Watch summary: Send feedbacks about verifications description: Reports what actually happened in your verification flow (for example a verification started or completed) so Watch can update its counters and improve future predictions. Accepts up to 100 feedback items per request. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FeedbackWatchRequest' responses: '200': description: Feedback acknowledgement. content: application/json: schema: $ref: '#/components/schemas/FeedbackWatchResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /watch/dispatch-events: post: operationId: dispatchWatchEvents tags: - Watch summary: Dispatch events description: Sends frontend interaction events (associated with a dispatch id from the Prelude frontend SDK) to Watch to enrich risk scoring. NOTE - this endpoint is referenced in the Prelude documentation but its full request / response schema was not published at review time; the request shape below is modeled and unconfirmed. x-modeled: true requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DispatchEventsRequest' responses: '200': description: Events acknowledgement. content: application/json: schema: $ref: '#/components/schemas/FeedbackWatchResponse' '401': $ref: '#/components/responses/Unauthorized' components: schemas: Signals: type: object description: Anti-fraud signals gathered from the end user's device / session. properties: ip: type: string device_id: type: string device_platform: type: string enum: - android - ios - web device_model: type: string os_version: type: string app_version: type: string user_agent: type: string ja4_fingerprint: type: string is_trusted_user: type: boolean additionalProperties: true DispatchEventsRequest: type: object description: Modeled request shape; the published documentation references this endpoint but did not include its full schema at review time. properties: dispatch_id: type: string events: type: array items: type: object additionalProperties: true FeedbackWatchResponse: type: object properties: status: type: string example: success request_id: type: string PredictWatchResponse: type: object properties: id: type: string description: The prediction identifier. prediction: type: string enum: - legitimate - suspicious risk_factors: type: array description: Present when prediction is suspicious. items: type: string enum: - behavioral_pattern - device_attribute - fraud_database - location_discrepancy - network_fingerprint - poor_conversion_history - prefix_concentration - suspected_request_tampering - suspicious_ip_address - temporary_phone_number request_id: type: string PredictWatchRequest: type: object required: - target properties: target: $ref: '#/components/schemas/Target' signals: $ref: '#/components/schemas/Signals' dispatch_id: type: string description: Identifier of a dispatch created by the Prelude frontend SDK. metadata: $ref: '#/components/schemas/Metadata' Target: type: object required: - type - value properties: type: type: string description: The kind of target identifier. enum: - phone_number - email_address value: type: string description: An E.164 formatted phone number or an email address. example: '+30123456789' Metadata: type: object properties: correlation_id: type: string maxLength: 80 description: A user-defined identifier to correlate this call with others. FeedbackWatchRequest: type: object required: - feedbacks properties: feedbacks: type: array maxItems: 100 items: type: object required: - target - type properties: target: $ref: '#/components/schemas/Target' type: type: string enum: - verification.started - verification.completed metadata: $ref: '#/components/schemas/Metadata' Error: type: object properties: code: type: string message: type: string type: type: string request_id: type: string responses: Unauthorized: description: Missing or invalid API key. content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: The request was invalid. content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: bearerAuth: type: http scheme: bearer description: 'Bearer API key passed as `Authorization: Bearer YOUR_API_KEY`. Obtain keys from the Prelude dashboard under All Services > Configure > Keys.'