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

# Event types

> Every webhook event type, when it fires, and a sample payload.

Every event has the same envelope. `data.object` is the resource as the API returns it from the matching `GET`, frozen at the moment the event was created.

```json Envelope theme={null}
{
  "id": "evt_c4k8m2p6r0t4v8x2z6b0d4f8",
  "object": "event",
  "type": "session.completed",
  "api_version": "v1",
  "created_at": "2026-10-13T09:42:31.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "session",
      "id": "48213"
    }
  }
}
```

| Field | Description |
| - | - |
| `id` | Unique event id (`evt_…`). Use it to deduplicate. Redeliveries keep the same id. |
| `object` | Always `"event"`. |
| `type` | The event type, from the list below. |
| `api_version` | Always `"v1"`. The shape of `data.object` follows this version. |
| `created_at` | When the event happened (ISO 8601, UTC). Use it to order events. |
| `fleet_id` | Your fleet's id, as in `GET /fleet`. Sandbox events carry the sandbox's own fleet id. |
| `livemode` | `true` for events from your live fleet, `false` for events from your [sandbox](/guides/sandbox). |
| `data.object` | The object the event is about. |

(The envelope sample above abbreviates `data.object`.)

Events fire for changes made through any channel: the fleet portal, the driver app, the chargers and the API. New event types may be added to `v1`; endpoints subscribed to `*` will receive them, so ignore types you don't handle.

## All event types

| Type | `data.object` |
| - | - |
| [`session.started`](#session-started) | Session |
| [`session.start_failed`](#session-start-failed) | Session |
| [`session.completed`](#session-completed) | Session |
| [`session.stopped_by_limit`](#session-stopped-by-limit) | Session, plus `stop_reason: "budget_reached"` |
| [`wallet.funded`](#wallet-funded) | Funding |
| [`wallet.funding_failed`](#wallet-funding-failed) | Funding |
| [`wallet.low_balance`](#wallet-low-balance) | Wallet, plus `low_balance_threshold_kwh` |
| [`invoice.created`](#invoice-created) | Invoice (`kind: "usage"` or `kind: "purchase"`) |
| [`invoice.paid`](#invoice-paid) | Invoice (`kind: "usage"`) |
| [`driver.created`](#driver-created) | Driver |
| [`driver.updated`](#driver-updated) | Driver |
| [`driver.removed`](#driver-removed) | Driver |
| [`vehicle.created`](#vehicle-created) | Vehicle |
| [`vehicle.updated`](#vehicle-updated) | Vehicle |
| [`vehicle.retired`](#vehicle-retired) | Vehicle |
| [`invitation.accepted`](#invitation-accepted) | Invitation, with the resulting `driver` |
| [`limit.updated`](#limits-updated) | Limit set |
| [`limit.reached`](#limit-reached) | Limit reached |
| `ping` | `{ "object": "ping", "message": "…" }`. Only sent by **Send test**, which can also send any other type with a sample payload; test events are never stored or retried. |

## Sessions

### Session started

`session.started` · `data.object`: Session

A fleet-wallet session has started: the charger reported the start of the transaction. Fires for sessions started from the API, the driver app or the charger.

```json session.started theme={null}
{
  "id": "evt_a1c5e9g3j7l1n5q9s3u7w1y5",
  "object": "event",
  "type": "session.started",
  "api_version": "v1",
  "created_at": "2026-10-13T09:02:12.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "session",
      "id": "48213",
      "status": "charging",
      "charge_point_id": "CX-ACC-0007",
      "driver_id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "vehicle_id": "v6b1c8n3m5k2j9h4g7f0d2sa",
      "energy_kwh": "0.0000",
      "budget_kwh": "40.0000",
      "unit_price": "3.85",
      "cost": "0.00",
      "on_credit": "0.00",
      "currency": "GHS",
      "paid_after_session": false,
      "started_at": "2026-10-13T09:02:11.000Z",
      "stop_requested_at": null,
      "ended_at": null
    }
  }
}
```

### Session start failed

`session.start_failed` · `data.object`: Session

A session never charged: the charger rejected the start, or the start was abandoned (for example, the cable was never plugged in). The wallet reservation is released and nothing is billed. `status` is `cancelled`.

```json session.start_failed theme={null}
{
  "id": "evt_b2d6f0h4k8m2p6r0t4v8x2z6",
  "object": "event",
  "type": "session.start_failed",
  "api_version": "v1",
  "created_at": "2026-10-13T09:15:40.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "session",
      "id": "48214",
      "status": "cancelled",
      "charge_point_id": "CX-ACC-0007",
      "driver_id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "vehicle_id": "v6b1c8n3m5k2j9h4g7f0d2sa",
      "energy_kwh": "0.0000",
      "budget_kwh": "40.0000",
      "unit_price": "3.85",
      "cost": "0.00",
      "on_credit": "0.00",
      "currency": "GHS",
      "paid_after_session": false,
      "started_at": "2026-10-13T09:12:02.000Z",
      "stop_requested_at": null,
      "ended_at": "2026-10-13T09:15:40.000Z"
    }
  }
}
```

### Session completed

`session.completed` · `data.object`: Session

A session has been settled and its final energy and cost are known. Fires however the session ended: a stop from the API or app, the driver unplugging, the budget being reached, or a later reconciliation.

```json session.completed theme={null}
{
  "id": "evt_c4k8m2p6r0t4v8x2z6b0d4f8",
  "object": "event",
  "type": "session.completed",
  "api_version": "v1",
  "created_at": "2026-10-13T09:42:31.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "session",
      "id": "48213",
      "status": "completed",
      "charge_point_id": "CX-ACC-0007",
      "driver_id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "vehicle_id": "v6b1c8n3m5k2j9h4g7f0d2sa",
      "energy_kwh": "18.4250",
      "budget_kwh": "40.0000",
      "unit_price": "3.85",
      "cost": "70.94",
      "on_credit": "0.00",
      "currency": "GHS",
      "paid_after_session": false,
      "started_at": "2026-10-13T09:02:11.000Z",
      "stop_requested_at": "2026-10-13T09:41:55.000Z",
      "ended_at": "2026-10-13T09:42:30.000Z"
    }
  }
}
```

### Session stopped by limit

`session.stopped_by_limit` · `data.object`: Session, plus `stop_reason: "budget_reached"`

A session used up its energy budget (its `max_kwh`, a fleet or driver limit, or what the wallet could cover), so ChargeExpress asked the charger to stop. Sent once per session. `session.completed` follows when the charger confirms.

```json session.stopped_by_limit theme={null}
{
  "id": "evt_d5m9p3r7t1v5x9z3b7d1f5h9",
  "object": "event",
  "type": "session.stopped_by_limit",
  "api_version": "v1",
  "created_at": "2026-10-13T11:31:08.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "session",
      "id": "48220",
      "status": "charging",
      "charge_point_id": "CX-ACC-0007",
      "driver_id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "vehicle_id": "v6b1c8n3m5k2j9h4g7f0d2sa",
      "energy_kwh": "39.9620",
      "budget_kwh": "40.0000",
      "unit_price": "3.85",
      "cost": "153.86",
      "on_credit": "0.00",
      "currency": "GHS",
      "paid_after_session": false,
      "started_at": "2026-10-13T10:24:50.000Z",
      "stop_requested_at": "2026-10-13T11:31:08.000Z",
      "ended_at": null,
      "stop_reason": "budget_reached"
    }
  }
}
```

## Wallet

### Wallet funded

`wallet.funded` · `data.object`: Funding

A top-up has been paid and the wallet credited. Any outstanding credit is repaid first (`debt_repaid`), and the rest is credited as kWh (`credited_kwh`). Fires for top-ups started in the portal too.

```json wallet.funded theme={null}
{
  "id": "evt_e6n0q4s8u2w6y0a4c8e2g6j0",
  "object": "event",
  "type": "wallet.funded",
  "api_version": "v1",
  "created_at": "2026-10-13T10:04:37.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "funding",
      "id": "wallet-6f1d2c3a-9b8e-5c4d-a7f6-0e1d2c3b4a59",
      "status": "success",
      "amount": "500.00",
      "currency": "GHS",
      "unit_price": "3.85",
      "kwh": "129.8701",
      "credited_kwh": "129.8701",
      "debt_repaid": "0.00",
      "invoice_number": null,
      "checkout_url": null,
      "credited_at": "2026-10-13T10:04:37.000Z",
      "created_at": "2026-10-13T10:00:00.000Z",
      "updated_at": "2026-10-13T10:04:37.000Z"
    }
  }
}
```

### Wallet funding failed

`wallet.funding_failed` · `data.object`: Funding

The payment provider reported that a top-up failed. Nothing was credited.

```json wallet.funding_failed theme={null}
{
  "id": "evt_f7p1r5t9v3x7z1b5d9f3h7k1",
  "object": "event",
  "type": "wallet.funding_failed",
  "api_version": "v1",
  "created_at": "2026-10-13T10:20:12.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "funding",
      "id": "wallet-1b2c3d4e-5f60-5a7b-8c9d-0e1f2a3b4c5d",
      "status": "failed",
      "amount": "250.00",
      "currency": "GHS",
      "unit_price": "3.85",
      "kwh": "64.9351",
      "credited_kwh": null,
      "debt_repaid": null,
      "invoice_number": null,
      "checkout_url": null,
      "credited_at": null,
      "created_at": "2026-10-13T10:12:00.000Z",
      "updated_at": "2026-10-13T10:20:12.000Z"
    }
  }
}
```

### Wallet low balance

`wallet.low_balance` · `data.object`: Wallet, plus `low_balance_threshold_kwh`

The wallet's `balance_kwh` dropped below the fleet's `low_balance_threshold_kwh` (set with `PATCH /fleet`). Fires once when the balance crosses the threshold, and again only after the balance has been back at or above it.

```json wallet.low_balance theme={null}
{
  "id": "evt_g8q2s6u0w4y8a2c6e0g4j8l2",
  "object": "event",
  "type": "wallet.low_balance",
  "api_version": "v1",
  "created_at": "2026-10-13T11:42:03.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "wallet",
      "id": "w2e9r4t7y1u6i3o8p5a0s4df",
      "balance_kwh": "487.2500",
      "reserved_kwh": "0.0000",
      "available_kwh": "487.2500",
      "debt_kwh": "0.0000",
      "debt": "0.00",
      "credit_limit": "2000.00",
      "credit_available": "2000.00",
      "currency": "GHS",
      "updated_at": "2026-10-13T11:42:03.000Z",
      "low_balance_threshold_kwh": "500.0000"
    }
  }
}
```

## Invoices

### Invoice created

`invoice.created` · `data.object`: Invoice (`kind: "usage"` or `kind: "purchase"`)

ChargeExpress has assigned an invoice number. A **usage** invoice bills the part of a completed session that went on credit; its `id` is the session id. A **purchase** invoice covers a paid top-up; its `id` is the funding id.

```json Usage invoice theme={null}
{
  "id": "evt_h9r3t7v1x5z9b3d7f1h5k9m3",
  "object": "event",
  "type": "invoice.created",
  "api_version": "v1",
  "created_at": "2026-10-11T16:21:40.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "invoice",
      "kind": "usage",
      "id": "48177",
      "session_id": "48177",
      "charge_point_id": "CX-ACC-0007",
      "invoice_number": "ACC-SINV-2026-00412",
      "status": "unpaid",
      "billed_kwh": "22.1000",
      "unit_price": "3.85",
      "amount": "85.09",
      "amount_due": "85.09",
      "currency": "GHS",
      "issued_at": "2026-10-11T16:20:05.000Z"
    }
  }
}
```

```json Purchase invoice theme={null}
{
  "id": "evt_j0s4u8w2y6a0c4e8g2j6l0n4",
  "object": "event",
  "type": "invoice.created",
  "api_version": "v1",
  "created_at": "2026-10-13T10:05:12.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "invoice",
      "kind": "purchase",
      "id": "wallet-6f1d2c3a-9b8e-5c4d-a7f6-0e1d2c3b4a59",
      "funding_id": "wallet-6f1d2c3a-9b8e-5c4d-a7f6-0e1d2c3b4a59",
      "invoice_number": "ACC-SINV-2026-00431",
      "status": "paid",
      "billed_kwh": "129.8701",
      "unit_price": "3.85",
      "amount": "500.00",
      "amount_due": "0.00",
      "currency": "GHS",
      "issued_at": "2026-10-13T10:04:37.000Z"
    }
  }
}
```

### Invoice paid

`invoice.paid` · `data.object`: Invoice (`kind: "usage"`)

A usage invoice has been fully repaid, by `POST /invoices/usage/pay` or by any top-up, which repays outstanding credit first. Purchase invoices are paid when created, so they never send this event.

```json invoice.paid theme={null}
{
  "id": "evt_k1t5v9x3z7b1d5f9h3k7m1p5",
  "object": "event",
  "type": "invoice.paid",
  "api_version": "v1",
  "created_at": "2026-10-13T10:04:37.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "invoice",
      "kind": "usage",
      "id": "48177",
      "session_id": "48177",
      "charge_point_id": "CX-ACC-0007",
      "invoice_number": "ACC-SINV-2026-00412",
      "status": "paid",
      "billed_kwh": "22.1000",
      "unit_price": "3.85",
      "amount": "85.09",
      "amount_due": "0.00",
      "currency": "GHS",
      "issued_at": "2026-10-11T16:20:05.000Z"
    }
  }
}
```

## Drivers

### Driver created

`driver.created` · `data.object`: Driver

A driver was added to the fleet, from the API or the portal.

```json driver.created theme={null}
{
  "id": "evt_l2v6x0z4b8d2f6h0k4m8p2r6",
  "object": "event",
  "type": "driver.created",
  "api_version": "v1",
  "created_at": "2026-10-13T08:30:00.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "driver",
      "id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "status": "active",
      "first_name": "Ama",
      "last_name": "Mensah",
      "email": "ama.mensah@example.com",
      "phone": "+233241234567",
      "employee_id": "EMP-0142",
      "license_number": "GH-DL-8842193",
      "license_expires_at": "2029-04-30",
      "photo_url": null,
      "vehicle_ids": [
        "v6b1c8n3m5k2j9h4g7f0d2sa"
      ],
      "profile": {
        "date_of_birth": "1991-07-18",
        "gender": "female",
        "national_id": "GHA-123456789-0",
        "address": "14 Ring Road East",
        "city": "Accra",
        "license_class": "B",
        "license_issued_at": "2019-05-02",
        "hire_date": "2024-01-15",
        "emergency_contact_name": "Kofi Mensah",
        "emergency_contact_phone": "+233201112233",
        "emergency_contact_relationship": "Brother",
        "notes": null
      },
      "created_at": "2026-10-13T08:30:00.000Z",
      "updated_at": "2026-10-13T08:30:00.000Z"
    }
  }
}
```

### Driver updated

`driver.updated` · `data.object`: Driver

A driver's details or status changed, including suspension (`status: "suspended"`), reactivation and photo uploads.

```json driver.updated theme={null}
{
  "id": "evt_m3w7y1a5c9e3g7j1l5n9q3s7",
  "object": "event",
  "type": "driver.updated",
  "api_version": "v1",
  "created_at": "2026-10-13T14:05:10.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "driver",
      "id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "status": "suspended",
      "first_name": "Ama",
      "last_name": "Mensah",
      "email": "ama.mensah@example.com",
      "phone": "+233241234567",
      "employee_id": "EMP-0142",
      "license_number": "GH-DL-8842193",
      "license_expires_at": "2029-04-30",
      "photo_url": null,
      "vehicle_ids": [
        "v6b1c8n3m5k2j9h4g7f0d2sa"
      ],
      "profile": {
        "date_of_birth": "1991-07-18",
        "gender": "female",
        "national_id": "GHA-123456789-0",
        "address": "14 Ring Road East",
        "city": "Accra",
        "license_class": "B",
        "license_issued_at": "2019-05-02",
        "hire_date": "2024-01-15",
        "emergency_contact_name": "Kofi Mensah",
        "emergency_contact_phone": "+233201112233",
        "emergency_contact_relationship": "Brother",
        "notes": null
      },
      "created_at": "2026-10-13T08:30:00.000Z",
      "updated_at": "2026-10-13T14:05:10.000Z"
    }
  }
}
```

### Driver removed

`driver.removed` · `data.object`: Driver

A driver was removed from the fleet. The driver record is kept with `status: "archived"`, and their vehicles are unassigned.

```json driver.removed theme={null}
{
  "id": "evt_n4x8z2b6d0f4h8k2m6p0r4t8",
  "object": "event",
  "type": "driver.removed",
  "api_version": "v1",
  "created_at": "2026-10-13T15:00:00.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "driver",
      "id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "status": "archived",
      "first_name": "Ama",
      "last_name": "Mensah",
      "email": "ama.mensah@example.com",
      "phone": "+233241234567",
      "employee_id": "EMP-0142",
      "license_number": "GH-DL-8842193",
      "license_expires_at": "2029-04-30",
      "photo_url": null,
      "vehicle_ids": [],
      "profile": {
        "date_of_birth": "1991-07-18",
        "gender": "female",
        "national_id": "GHA-123456789-0",
        "address": "14 Ring Road East",
        "city": "Accra",
        "license_class": "B",
        "license_issued_at": "2019-05-02",
        "hire_date": "2024-01-15",
        "emergency_contact_name": "Kofi Mensah",
        "emergency_contact_phone": "+233201112233",
        "emergency_contact_relationship": "Brother",
        "notes": null
      },
      "created_at": "2026-10-13T08:30:00.000Z",
      "updated_at": "2026-10-13T15:00:00.000Z"
    }
  }
}
```

## Vehicles

### Vehicle created

`vehicle.created` · `data.object`: Vehicle

A vehicle was added to the fleet.

```json vehicle.created theme={null}
{
  "id": "evt_p5y9a3c7e1g5j9l3n7q1s5u9",
  "object": "event",
  "type": "vehicle.created",
  "api_version": "v1",
  "created_at": "2026-10-13T08:20:00.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "vehicle",
      "id": "v6b1c8n3m5k2j9h4g7f0d2sa",
      "registration_number": "GR 4521-24",
      "vin": "LFV3A24G9P3012345",
      "asset_tag": "VAN-017",
      "status": "active",
      "vehicle_type_id": 4,
      "vehicle_model_id": 12,
      "brand": "BYD",
      "model": "T3",
      "description": "Cargo van, Tema depot",
      "image_url": null,
      "driver_id": null,
      "created_at": "2026-10-13T08:20:00.000Z",
      "updated_at": "2026-10-13T08:20:00.000Z"
    }
  }
}
```

### Vehicle updated

`vehicle.updated` · `data.object`: Vehicle

A vehicle's details, status or assigned driver changed.

```json vehicle.updated theme={null}
{
  "id": "evt_q6z0b4d8f2h6k0m4p8r2t6v0",
  "object": "event",
  "type": "vehicle.updated",
  "api_version": "v1",
  "created_at": "2026-10-13T08:30:01.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "vehicle",
      "id": "v6b1c8n3m5k2j9h4g7f0d2sa",
      "registration_number": "GR 4521-24",
      "vin": "LFV3A24G9P3012345",
      "asset_tag": "VAN-017",
      "status": "active",
      "vehicle_type_id": 4,
      "vehicle_model_id": 12,
      "brand": "BYD",
      "model": "T3",
      "description": "Cargo van, Tema depot",
      "image_url": null,
      "driver_id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "created_at": "2026-10-13T08:20:00.000Z",
      "updated_at": "2026-10-13T08:30:01.000Z"
    }
  }
}
```

### Vehicle retired

`vehicle.retired` · `data.object`: Vehicle

A vehicle was retired (`status: "retired"`), for example with `DELETE /vehicles/{vehicleId}`. Its driver is unassigned and its history is kept.

```json vehicle.retired theme={null}
{
  "id": "evt_r7a1c5e9g3j7l1n5q9s3u7w1",
  "object": "event",
  "type": "vehicle.retired",
  "api_version": "v1",
  "created_at": "2026-10-13T16:10:00.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "vehicle",
      "id": "v6b1c8n3m5k2j9h4g7f0d2sa",
      "registration_number": "GR 4521-24",
      "vin": "LFV3A24G9P3012345",
      "asset_tag": "VAN-017",
      "status": "retired",
      "vehicle_type_id": 4,
      "vehicle_model_id": 12,
      "brand": "BYD",
      "model": "T3",
      "description": "Cargo van, Tema depot",
      "image_url": null,
      "driver_id": null,
      "created_at": "2026-10-13T08:20:00.000Z",
      "updated_at": "2026-10-13T16:10:00.000Z"
    }
  }
}
```

## Invitations

### Invitation accepted

`invitation.accepted` · `data.object`: Invitation, with the resulting `driver`

Someone accepted an invitation to join the fleet in the ChargeExpress app and is now a driver. Invitations themselves are managed in the portal, not the API.

```json invitation.accepted theme={null}
{
  "id": "evt_s8b2d6f0h4k8m2p6r0t4v8x2",
  "object": "event",
  "type": "invitation.accepted",
  "api_version": "v1",
  "created_at": "2026-10-13T12:45:19.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "invitation",
      "email": "yaw.boateng@example.com",
      "status": "accepted",
      "accepted_at": "2026-10-13T12:45:19.000Z",
      "driver": {
        "object": "driver",
        "id": "e5y8p3r0m6n1q7s2t9u4v0w3",
        "status": "active",
        "first_name": "Yaw",
        "last_name": "Boateng",
        "email": "yaw.boateng@example.com",
        "phone": "+233551234567",
        "employee_id": null,
        "license_number": null,
        "license_expires_at": null,
        "photo_url": null,
        "vehicle_ids": [],
        "profile": null,
        "created_at": "2026-10-13T12:45:19.000Z",
        "updated_at": "2026-10-13T12:45:19.000Z"
      }
    }
  }
}
```

## Limits

### Limits updated

`limit.updated` · `data.object`: Limit set

The fleet's default limits (`scope: "fleet"`, `driver_id: null`) or one driver's overrides (`scope: "driver"`) were replaced. `limits` is the complete new set for that scope. An override with `amount: null` exempts the driver from that fleet default. Each limit's `source` matches the scope: `"fleet"` for defaults, `"driver"` for overrides.

```json limit.updated theme={null}
{
  "id": "evt_t9c3e7g1j5l9n3q7s1u5w9y3",
  "object": "event",
  "type": "limit.updated",
  "api_version": "v1",
  "created_at": "2026-10-13T07:55:00.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "limit_set",
      "scope": "fleet",
      "driver_id": null,
      "limits": [
        {
          "object": "limit",
          "metric": "kwh",
          "period": "session",
          "amount": "60.000",
          "source": "fleet"
        },
        {
          "object": "limit",
          "metric": "kwh",
          "period": "day",
          "amount": "150.000",
          "source": "fleet"
        },
        {
          "object": "limit",
          "metric": "ghs",
          "period": "month",
          "amount": "12000.00",
          "source": "fleet"
        }
      ]
    }
  }
}
```

### Limit reached

`limit.reached` · `data.object`: Limit reached

A fleet or driver limit affected a session start. `outcome: "capped"` means the session started with a smaller budget (`allowed_kwh`) than requested. `outcome: "blocked"` means the limit was already used up and the start was refused. `limit` is the limit that applied, with its usage in the current period. `requested_kwh` is `null` when no `max_kwh` was requested.

```json limit.reached theme={null}
{
  "id": "evt_u0d4f8h2k6m0p4r8t2v6x0z4",
  "object": "event",
  "type": "limit.reached",
  "api_version": "v1",
  "created_at": "2026-10-13T17:20:44.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "limit_reached",
      "outcome": "capped",
      "driver_id": "d3x7n2q9k4m8p1r6t0v5w2yz",
      "limit": {
        "object": "limit",
        "metric": "kwh",
        "period": "day",
        "amount": "150.000",
        "source": "fleet",
        "used": "137.500",
        "remaining": "12.500",
        "period_start": "2026-10-13T00:00:00.000Z",
        "resets_at": "2026-10-14T00:00:00.000Z"
      },
      "requested_kwh": "40.0000",
      "allowed_kwh": "12.5000"
    }
  }
}
```

## Ping

`ping` is sent only by **Send test** in the portal and by `POST /webhook_endpoints/{endpointId}/test` when no `type` is given. It is signed like any other event, but it isn't stored, retried or listed in `/events`, and you can't subscribe to it.

**Send test** can also send any type on this page: pass `{"type": "wallet.funded"}` (for example) and the endpoint receives a sample event of that type, with the same shape as the samples here. Like `ping`, test events aren't stored or retried. See [Testing an endpoint](/webhooks/overview#testing-an-endpoint).

```json ping theme={null}
{
  "id": "evt_p0q1r2s3t4u5v6w7x8y9z0a1",
  "object": "event",
  "type": "ping",
  "api_version": "v1",
  "created_at": "2026-10-13T09:00:05.000Z",
  "fleet_id": "q8h2kz4m0v1n7c3x9b5t6r2w",
  "livemode": true,
  "data": {
    "object": {
      "object": "ping",
      "message": "Webhook test from Charge Express"
    }
  }
}
```


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