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

# card.status.changed

> Fired when a card's status changes

## Event: `card.status.changed`

Sent when a card is activated, frozen, unfrozen, or cancelled.

## Payload

```json theme={null}
{
  "cardId": "card_xyz789",
  "cardholderId": "ch_abc123",
  "previousStatus": "active",
  "newStatus": "frozen"
}
```

| Field | Type | Description |
| - | - | - |
| `cardId` | string | Card whose status changed |
| `cardholderId` | string | Cardholder who owns the card |
| `previousStatus` | string | Status before the change. One of `inactive`, `active`, `frozen`, `cancelled` |
| `newStatus` | string | Status after the change. One of `active`, `frozen`, `cancelled` |

## Response

Your endpoint must return a **2xx** status code within **30 seconds** to acknowledge receipt. Any non-2xx response or timeout triggers the [retry policy](/partner/webhooks#retry-policy).

| Status code | Meaning |
| - | - |
| `200` | Event received and processed |
| `202` | Event received, will process asynchronously |
| Any non-2xx | Delivery failed — will retry |

## Example handler

```javascript theme={null}
app.post("/webhooks/contro", (req, res) => {
  const eventType = req.headers["x-contro-event"];

  if (eventType === "card.status.changed") {
    const { cardId, newStatus } = req.body;
    // Update card status in your system
  }

  res.status(200).send("OK");
});
```
