Skip to main content

ChargePointStatus Webhook

Description

The ChargePointStatus webhook is triggered whenever the status of a charge point connector changes on a Fuzz-managed station.

When a charging station reports a status change via an OCPP StatusNotification message, Fuzz evaluates whether the status has actually changed compared to the previously known state. If a real transition is detected, this webhook event is sent to notify your system of the new connector status.

This webhook fires on the Pre-Status Notification hook, meaning it is sent before Fuzz forwards the notification upstream to the CPO.

Note: If the reported status is identical to the last known status, no webhook is sent - Fuzz deduplicates unchanged notifications to avoid redundant events.

Payload Structure

The webhook uses the standard Fuzz envelope with a ChargePointStatus-specific payload:

{
"eventId": "3c977fbe-ee7b-4f61-bdd5-035a77e56437",
"eventType": "ChargePointStatus",
"siteId": "y1u00tdl",
"timestamp": "2023-10-01T12:00:00+02:00",
"payload": {
"stationId": "jvpfa6ie",
"chargePointId": "1sjn7tza",
"connectorId": 1,
"status": "Charging",
"errorCode": "NoError",
"info": "Connector operating normally"
}
}

Envelope Fields

FieldTypeDescription
eventIdstringUnique identifier of the webhook event (UUID).
eventTypestringAlways "ChargePointStatus" for this event type.
siteIdstringThe unique identifier of the site where the station is located.
timestampstringISO 8601 timestamp in the Europe/Brussels timezone.

Payload Fields

FieldTypeRequiredDescription
stationIdstringYesThe unique identifier of the station that reported the status change.
chargePointIdstringYesThe identifier of the charge point whose status changed.
connectorIdintegerYesThe connector ID on the charge point.
statusstringYesThe new status of the connector. See the Status Values table below.
errorCodestringYesThe error code reported by the charge point. See the Error Codes table below.
infostringNoAdditional free-form information related to the status or error, provided by the station.

Status Values

StatusDescription
AvailableThe connector is available and ready to start a new session.
PreparingThe connector is preparing for a charging session.
ChargingThe connector is actively charging a vehicle.
SuspendedEVSECharging is suspended by the EVSE (station).
SuspendedEVCharging is suspended by the EV (vehicle).
FinishingThe connector is finishing a charging session.
ReservedThe connector is reserved for a future session.
UnavailableThe connector is unavailable and cannot accept sessions.
FaultedThe connector is in a faulted state and requires attention.

Error Codes

Error CodeDescription
NoErrorNo error is present.
ConnectorLockFailureThe connector lock mechanism failed.
EVCommunicationErrorCommunication error with the vehicle.
GroundFailureGround fault detected.
HighTemperatureHigh temperature detected on the connector.
InternalErrorInternal error on the charge point.
LocalListConflictConflict with the local authorization list.
OtherErrorAn unspecified error occurred.
OverCurrentFailureOver-current condition detected.
PowerMeterFailurePower meter failure detected.
PowerSwitchFailurePower switch failure detected.
ReaderFailureRFID reader failure.
ResetFailureReset operation failed.
UnderVoltageUnder-voltage condition detected.
OverVoltageOver-voltage condition detected.
WeakSignalWeak signal detected (typically for Plug & Charge).

Retry Mechanism

Fuzz implements a robust queue-based delivery system for webhook events to ensure reliable notification:

Queue Processing

  • Each webhook type maintains a dedicated background thread that processes events from a bounded queue (capacity: 1000 messages).
  • When a status change event occurs, it is enqueued and processed asynchronously by the dedicated thread.
  • If the webhook is disabled for a site, the thread is gracefully interrupted.

Retry Policy

  • For each HTTP request, Fuzz applies a fixed-delay retry strategy:
    • Up to 360 retry attempts with a 10-second interval between retries.
    • This provides a maximum retry window of approximately 60 minutes per request.
  • If all retry attempts fail, the error is logged with the Webhook_SendHttp exception type and the event is discarded to prevent queue buildup.

Health Monitoring

The webhook executor exposes health metrics for monitoring:

  • Last queue consumption: Timestamp of the last dequeued message.
  • Queue size: Current number of pending messages (alerts if > 5, critical if > 100).
  • Last webhook request: Timestamp and duration of the last HTTP request (alerts if > 500ms, critical if > 5000ms).

Example HTTP Request

Below is an example of a signed HTTP request sent by Fuzz for a ChargePointStatus webhook:

POST /webhook/events HTTP/1.1
Host: partner.example.com
Content-Type: application/json
Content-Length: 438
x-request-id: 3c977fbe-ee7b-4f61-bdd5-035a77e56437
Signature-Input: sig1=created=1696176000;keyId="webhook";alg="rsa-pss-sha256";headers="@method @path x-request-id"
Signature: MEUCIQDX4p6vK8fN2mR7sT1uV3wX5yZ0aBcDeFgHiJkLmNoPqRsTuVw

{
"eventId": "3c977fbe-ee7b-4f61-bdd5-035a77e56437",
"eventType": "ChargePointStatus",
"siteId": "site123",
"timestamp": "2023-10-01T12:00:00+02:00",
"payload": {
"stationId": "station456",
"chargePointId": "cp789",
"connectorId": 1,
"status": "Charging",
"errorCode": "NoError",
"info": "Connector operating normally"
}
}

Signature Headers

All requests are signed following the RFC 9421 standard:

HeaderDescription
x-request-idUnique identifier for the request, generated as a UUID.
Signature-InputDeclares the signature parameters: created timestamp, keyId identifier, signing algorithm (alg), and the list of HTTP components included in the signature (@method, @path, x-request-id).
SignatureThe cryptographic signature over the declared components, generated using the Fuzz edge keystore.

Verifying the Signature

The public key used to verify webhook signatures is available via the JWKS endpoint:

https://auth.fuzz.energy/.well-known/jwks.json

Use the key with kid: "sign" to validate the signature. This allows you to cryptographically verify that each webhook request originates from Fuzz and has not been tampered with in transit.