# product_match.updated

`POST product_match.updated`

A product match was created as `matched`, or changed status. `data` is the product match.

```yaml
security: []
parameters:
  - name: Beauty-Router-Signature
    in: header
    required: true
    description: >
      `t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your
      webhook secret>`. While several secrets are live,

      the header has one `v1` per live secret, and you accept the event if any
      `v1` matches. Reject a request when `t` is

      more than 5 minutes old or more than 5 minutes in the future. See
      [Webhooks](/webhooks/).
    schema:
      type: string
    example: t=1793200437,v1=5f2b8c0e4d6a7b1c9e3f0a2d4b6c8e1f3a5b7d9c0e2f4a6b8d1c3e5f7a9b0c2d
requestBody:
  required: true
  content:
    application/json:
      schema:
        allOf:
          - type: object
            description: Every webhook event has these fields, plus `type` and `data`.
            required:
              - id
              - type
              - createdAt
              - data
            properties:
              id:
                type: string
                description: The event ID. Skip an event you already handled.
                examples:
                  - event-7Zx1cVb9Nm
              createdAt:
                type: string
                format: date-time
          - type: object
            properties:
              type:
                type: string
                const: product_match.updated
              data:
                type: object
                required:
                  - id
                  - externalId
                  - status
                  - createdAt
                  - updatedAt
                properties:
                  id:
                    type: string
                    description: The product match ID.
                    examples:
                      - match-3Pa8sDf2Gh
                  externalId:
                    type: string
                    minLength: 1
                    maxLength: 128
                    description: Your own ID, any string up to 128 characters.
                  status:
                    type: string
                    description: >
                      `in_review`: Beauty Router is matching the product.
                      `needs_reply`: Beauty Router needs more information, asked

                      in `question`. `matched`: final, with `productId`.
                    enum:
                      - in_review
                      - needs_reply
                      - matched
                  productId:
                    type: string
                    description: The matched product ID. Only when `status` is `matched`.
                    examples:
                      - prod-4Fz9QbX2kL
                  question:
                    type: string
                    description: What Beauty Router needs to know. Only when `status` is
                      `needs_reply`.
                  createdAt:
                    type: string
                    format: date-time
                  updatedAt:
                    type: string
                    format: date-time
      examples:
        Match needs a reply:
          value:
            id: event-7Zx1cVb9Nm
            type: product_match.updated
            createdAt: 2026-10-27T16:40:33Z
            data:
              id: match-9Lk4jHg7Fd
              externalId: inv-10517
              status: needs_reply
              question: Is this product from Jadewell or Amberlin?
              createdAt: 2026-10-27T09:14:02Z
              updatedAt: 2026-10-27T16:40:31Z
responses:
  2XX:
    description: >
      Respond with a `2xx` status within 10 seconds. Otherwise Beauty Router
      retries with backoff for up to 24 hours.

      Delivery is at least once, so skip an event `id` you already handled.
```
