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

# Send a test event or redeliver a failed attempt

> Send a test event or redeliver a failed attempt.

## Actions

* Send `{ "action": "test" }` to record and deliver a synthetic `webhook.test` event.
* Send `{ "action": "redeliver", "delivery_record_id": "..." }` to retry a failed or non-2xx delivery attempt.

Use the attempt record's `id` as `delivery_record_id`, not the stable logical `delivery_id`. Redelivery creates a new attempt and keeps the logical delivery identifier in the `X-Lasso-Delivery-Id` header.


## OpenAPI

````yaml openapi.yaml POST /catalog/webhooks/{id}
openapi: 3.1.0
info:
  title: Lasso API
  description: AI-powered product data extraction and enhancement API
  version: 1.0.0
  contact:
    name: Lasso Support
    url: https://lasso.ai
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://app.productlasso.com/api/v1
    description: Production
security:
  - BearerAuth: []
paths:
  /catalog/webhooks/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
    post:
      tags:
        - Catalog Webhooks
      summary: Send a test event or redeliver a failed attempt
      operationId: actOnCatalogWebhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - type: object
                  required:
                    - action
                  properties:
                    action:
                      type: string
                      const: test
                - type: object
                  required:
                    - action
                    - delivery_record_id
                  properties:
                    action:
                      type: string
                      const: redeliver
                    delivery_record_id:
                      type: string
                      format: uuid
                      description: >-
                        Failed/non-2xx delivery-attempt `id`, not the stable
                        logical `delivery_id`.
      responses:
        '200':
          description: Recorded test or redelivery attempt
          content:
            application/json:
              schema:
                type: object
                required:
                  - delivery
                properties:
                  delivery:
                    $ref: '#/components/schemas/CatalogWebhookDelivery'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  schemas:
    CatalogWebhookDelivery:
      type: object
      required:
        - id
        - endpoint_id
        - delivery_id
        - attempt_number
        - event
        - delivered_at
        - is_test
      properties:
        id:
          type: string
          format: uuid
          description: Delivery-attempt record identifier used by the redeliver action.
        endpoint_id:
          type: string
          format: uuid
        delivery_id:
          type: string
          format: uuid
          description: >-
            Stable logical delivery identifier reused in X-Lasso-Delivery-Id
            across redelivery attempts.
        attempt_number:
          type: integer
          minimum: 1
        event:
          oneOf:
            - $ref: '#/components/schemas/CatalogWebhookEvent'
            - type: string
              const: webhook.test
        status_code:
          type:
            - integer
            - 'null'
        error:
          type:
            - string
            - 'null'
          maxLength: 500
        duration_ms:
          type:
            - integer
            - 'null'
          minimum: 0
        delivered_at:
          type: string
          format: date-time
        is_test:
          type: boolean
        redelivered_from:
          type:
            - string
            - 'null'
          format: uuid
      description: >-
        Delivery metadata only. Stored payloads and signing secrets are never
        returned.
    CatalogWebhookEvent:
      type: string
      enum:
        - product.created
        - product.updated
        - product.deleted
        - attribute.created
        - attribute.updated
        - attribute.deleted
    Error:
      type: object
      required:
        - status_code
        - error_type
        - message
        - request_id
      properties:
        status_code:
          type: integer
        error_type:
          type: string
          enum:
            - invalid_request
            - unauthenticated
            - forbidden
            - not_found
            - conflict
            - validation_error
            - rate_limited
            - service_unavailable
            - internal_error
        message:
          type: string
        request_id:
          type: string
        code:
          type: string
          description: >-
            Stable machine-readable detail code for validation, conflict, and
            retryable availability errors.
        retryable:
          type: boolean
          description: Whether the request can be retried without changing its payload.
        attribute_id:
          type: string
          format: uuid
          description: Stable Attribute identity when the error is scoped to one Attribute.
        attribute_key:
          type: string
          description: Attribute key when the error is scoped to one Attribute.
        details:
          type: object
          additionalProperties: true
        current_updated_at:
          type: string
          format: date-time
          description: >-
            Current resource revision supplied for client-directed refetch after
            a stale write.
  responses:
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Conflict:
      description: Resource conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key

````