> ## 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.

# Changelog

> Changes to the ChargeExpress Fleet API.

The Fleet API is versioned in its path (`/api/public/v1`). Within `v1` we only make additive changes: new endpoints, new optional parameters, new response fields, new error codes and new event types. Breaking changes will come as `/v2`, with notice. Build your integration to ignore fields and event types it doesn't recognise.

**Sandbox**

## Sandbox and per-key environments

* **Choose the environment per key.** In **Developers → API keys → Create key**, pick **Live** or **Sandbox**. `cxk_live_` keys act on your real fleet; `cxk_test_` keys act on your fleet's sandbox. The environment no longer depends on which ChargeExpress deployment you call. Live keys come from the production portal.
* **[Sandbox](/guides/sandbox).** A separate copy of your fleet, created on first use, with three fake drivers, their vehicles, 500 kWh of credit and a GHS 1,000 credit limit. Nothing in it is billed, invoiced or sent to ExpressPay. Drivers created in it get placeholder emails and `login_invite.status: "skipped"`.
* **Simulated chargers.** With a sandbox key, `GET /charge_points` returns `SIM-AC-22`, `SIM-DC-60`, `SIM-OFFLINE` and `SIM-REJECT` (`simulated: true`). Sessions run at 60× real time, stop at their budget with `session.stopped_by_limit`, and end within about two minutes.
* **Simulated payments.** Sandbox top-ups and usage-invoice payments return `checkout_url: null` and `sandbox: true`. Settle them with `POST /sandbox/fundings/{fundingId}/succeed` or `/fail`.
* **`POST /sandbox/reset`** clears sandbox activity and reseeds it, keeping keys and webhook endpoints.
* **Test events of any type.** `POST /webhook_endpoints/{endpointId}/test` accepts `{"type": "…"}` and sends a sample payload of that event type. The response now includes `type`.
* **`livemode`** on events is `false` for sandbox events and `true` for live ones. Sandbox and live webhook endpoints and events are separate.
* New error codes: `sandbox_only`, `funding_not_pending`, and `live_keys_disabled` in the portal.
* **Developers → Sandbox** in the fleet portal runs sessions on the simulated chargers, simulates top-ups and resets the sandbox without code.

**v1**

## Fleet API v1

The first public release.

* **API keys** created in the fleet portal under **Developers → API keys**, with seven scopes, and `cxk_live_` and `cxk_test_` keys.
* **Fleet and wallet:** read the fleet, set the low-balance alert, read the wallet and its transactions.
* **Drivers and vehicles:** list, create, update, suspend, remove and retire, with photo and image uploads, and the vehicle type catalogue.
* **Limits:** fleet default limits and per-driver overrides, by kWh or GHS per session, day, week or month.
* **Charging:** list charge points, and list and read sessions.
* **Payments:** quote and start wallet top-ups through an ExpressPay checkout, pay usage invoices, list invoices and download PDFs.
* **Webhooks:** up to 10 endpoints per fleet, 18 event types, HMAC-SHA256 signatures with secret rotation, automatic retries over about 45 hours, a 30-day event log and redelivery.
* Cursor pagination, `Idempotency-Key` support on `POST`s, per-key rate limits, and `X-Request-Id` on every response.


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