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

# Events

> Every event type the Fleet API emits, when it fires and what to do.

Flatpeak records an event when something changes. Receive events as [webhooks](/docs/fleet-api/guides/platform/webhooks.md), or list them with [list all events](/docs/fleet-api/reference/events/list.md), filtered by `type` or `object_id`. Use the list to catch up after downtime.

Every event has the same envelope. `data` carries IDs only, so retrieve the object before you act. Ignore types you do not handle, because more can be added.

```json Event theme={"system"}
{
  "id": "evt_66cd1a83f0b25d4e7a3c6e15",
  "object": "event",
  "live_mode": true,
  "type": "vpp_enrollment.update",
  "data": {
    "device_id": "dev_63a6087272941ef077a8fd3e",
    "enrollment_id": "enr_7c2f1a9e4b0d8f3a6e2c5d10"
  },
  "time_created": "2026-07-08T11:25:39Z"
}
```

| Event | Fires when | Do |
| :- | :- | :- |
| `connect_session.complete` | A customer finishes a Connect session, whether or not the redirect to `callback_url` happens | Mark the session done. `device.connect` follows for each connected device; if none follows, the customer left without connecting |
| `device.connect` | A customer connects a device | [Retrieve the device](/docs/fleet-api/reference/devices/retrieve.md) and its [enrollment](/docs/fleet-api/reference/vpp-enrollments/list.md). Check `consent_scopes` |
| `device.update` | A device changes: its `dispatch_limits` when the OEM adds or removes hardware, or its `consent_scopes` when the customer grants or withdraws consent. It does not fire on telemetry | [Retrieve the device](/docs/fleet-api/reference/devices/retrieve.md) and refresh your cached copy. For a consent change, read [consent history](/docs/fleet-api/reference/devices/consent-history.md) |
| `vpp_enrollment.update` | An enrollment changes state or step, including a customer's request to leave | [Retrieve the enrollment](/docs/fleet-api/reference/vpp-enrollments/retrieve.md). At step `AWAITING_APPROVAL` or `UNENROLLING`, [approve it](/docs/fleet-api/reference/vpp-enrollments/approve.md). At other steps, read `enrollment_state` and the device's `telemetry` to see if it is dispatchable |
| `program.update` | A program changes status, for example during approval | [Retrieve the program](/docs/fleet-api/reference/vpp-programs/retrieve.md) |
| `vpp_event.update` | A VPP event changes status: allocation open, locked, active, complete or canceled | [Retrieve the event](/docs/fleet-api/reference/vpp-events/retrieve.md) and read `delivery`. [List its devices](/docs/fleet-api/reference/vpp-events/list-devices.md) for each device's share and status. `fulfillment` is `null` until meter records cover the window |
| `device.instructions.confirm` | The OEM confirms the power a device will deliver for your plan or its share of a VPP event. It fires once per device per confirmation, so a VPP event over a large group sends thousands. Subscribe only if you track confirmations per device | Read the [timeline](/docs/fleet-api/reference/plans/retrieve-timeline.md). A confirmed power below the instruction is a deviation, and the instruction stands. Confirmations show intent; meter records prove delivery |
| `device.settings.update` | A device's settings change, from either app or on the device | [Retrieve the settings](/docs/fleet-api/reference/devices/retrieve-settings.md) and update your UI |
| `device.settings.sync_failed` | The device has not applied a settings change in the expected window | Re-fetch the settings. If your write was superseded or refused by hardware limits, show the customer the current values |
| `zone.membership.update` | Devices join or leave a zone, or a new or changed zone finishes resolving | [Retrieve the zone](/docs/fleet-api/reference/zones/retrieve.md) for its `device_count`, and [list the zone's devices](/docs/fleet-api/reference/zones/list-devices.md) |
| `export.complete` | An export finishes and its download URL is ready | [Retrieve the export](/docs/fleet-api/reference/exports/retrieve.md) |
| `reward.update` | Flatpeak creates a reward entry or recalculates its amount. Your own approve and mark paid calls do not fire it | [List rewards](/docs/fleet-api/reference/rewards/list.md) |

## Event data

| Event | `data` |
| :- | :- |
| `connect_session.complete` | `connect_session_id`, `device_id` |
| `device.connect` | `device_id` |
| `device.update` | `device_id` |
| `vpp_enrollment.update` | `device_id`, `enrollment_id` |
| `program.update` | `program_id` |
| `vpp_event.update` | `vpp_event_id` |
| `device.instructions.confirm` | `device_id`, `confirmation_id` |
| `device.settings.update` | `device_id` |
| `device.settings.sync_failed` | `device_id` |
| `zone.membership.update` | `zone_id` |
| `export.complete` | `export_id` |
| `reward.update` | `reward_id`, `device_id` |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.