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

# cart.product.approval_status.changed

> A product's approval status has changed.

# cart.product.approval\_status.changed

> Generated from COPE public event contracts. Do not edit this page by hand.

Use this event to follow a product through review. It fires on approval, denial, an admin reversal, and the automatic return to re-review after a creator edits an approved or denied product.

## Delivery Contract

| Field           | Value                                                                                |
| --------------- | ------------------------------------------------------------------------------------ |
| Encoding        | CloudEvents 1.0 structured JSON                                                      |
| Delivery        | At least once                                                                        |
| Idempotency     | Use the CloudEvents `source` + `id` tuple, or COPE `idempotency_key` when available. |
| Source          | `cope.cart`                                                                          |
| Subject pattern | `product:<identifier>`                                                               |
| Category        | Products                                                                             |
| Availability    | Available in the public webhook reference.                                           |
| Schema title    | cart.product.approval\_status.changed v1 payload                                     |
| Schema ID       | `https://schemas.cope.com/events/cart.product.approval_status.changed/v1`            |

## Payload Fields

| Field                      | Required | Type     | Allowed Values                                                       | Description                                                                                                                                                                                                                                                                     |                                                                                                                                                                                                                               |
| -------------------------- | -------- | -------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `approval_status`          | yes      | `string` | `review`, `approved`, `denied`, `approved_changed`, `denied_changed` | Approval status the product holds after this transition. `approved_changed` / `denied_changed` mean the creator edited content on an approved or denied product and it is queued for re-review.                                                                                 |                                                                                                                                                                                                                               |
| `approved_at`              | no       | \`string | null\`                                                               | -                                                                                                                                                                                                                                                                               | When this product was most recently approved, or null if it never has been. Retained across later transitions — use occurred\_at for the time of this change.                                                                 |
| `denial_reason`            | no       | \`string | null\`                                                               | -                                                                                                                                                                                                                                                                               | Human-readable reason recorded with a denial, in English; null on every other transition. Wording can change — branch on denial\_reason\_code instead.                                                                        |
| `denial_reason_code`       | no       | \`string | null\`                                                               | `picture_missing`, `wrong_category`, `promo_url_missing`, `promo_url_and_picture_missing`, `missing_medical_disclosure`, `missing_thank_you_statement`, `description_insufficient`, `restricted_items`, `prohibited_guarantees`, `similar_to_existing`, `test_product`, `other` | Stable identifier for a preset rejection reason, safe to branch on. Null when the reason is free-form text or the transition is not a denial.                                                                                 |
| `denied_at`                | no       | \`string | null\`                                                               | -                                                                                                                                                                                                                                                                               | When this product was most recently denied, or null if it never has been. Retained across later transitions, so an approved product still reports the denial that preceded it — use occurred\_at for the time of this change. |
| `event_id`                 | yes      | `string` | -                                                                    | -                                                                                                                                                                                                                                                                               |                                                                                                                                                                                                                               |
| `event_type`               | yes      | `const`  | `cart.product.approval_status.changed`                               | -                                                                                                                                                                                                                                                                               |                                                                                                                                                                                                                               |
| `occurred_at`              | yes      | `string` | -                                                                    | -                                                                                                                                                                                                                                                                               |                                                                                                                                                                                                                               |
| `previous_approval_status` | yes      | `string` | `review`, `approved`, `denied`, `approved_changed`, `denied_changed` | Approval status the product held before this transition.                                                                                                                                                                                                                        |                                                                                                                                                                                                                               |
| `product_name`             | no       | \`string | null\`                                                               | -                                                                                                                                                                                                                                                                               | -                                                                                                                                                                                                                             |
| `product_type`             | no       | \`string | null\`                                                               | -                                                                                                                                                                                                                                                                               | -                                                                                                                                                                                                                             |
| `schema_version`           | yes      | `const`  | `1.0`                                                                | -                                                                                                                                                                                                                                                                               |                                                                                                                                                                                                                               |
| `status`                   | yes      | `string` | `active`, `inactive`, `archived`                                     | Sale status after the transition. Approval activates the product; a denial leaves the sale status alone, and only an admin reversal of an approval deactivates it.                                                                                                              |                                                                                                                                                                                                                               |

## Example CloudEvent

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": {
    "approval_status": "review",
    "event_id": "example_id",
    "event_type": "cart.product.approval_status.changed",
    "occurred_at": "2026-05-05T12:00:00.000Z",
    "previous_approval_status": "review",
    "schema_version": "1.0",
    "status": "active"
  },
  "datacontenttype": "application/json",
  "dataschema": "https://schemas.cope.com/events/cart.product.approval_status.changed/v1",
  "id": "cart.product.approval_status.changed:example",
  "idempotency_key": "cart.product.approval_status.changed:example",
  "source": "cope.cart",
  "specversion": "1.0",
  "subject": "product:example",
  "time": "2026-05-05T12:00:00.000Z",
  "type": "cart.product.approval_status.changed"
}
```

## Compatibility

Fields may be added within the same major version. Removing or changing the meaning of a documented field requires a new event version.
