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

# List Logbook Events

Returns the charger's logbook: the events in its OCPP log that matter to an owner, newest first. A refused card, a fault and its recovery, a transaction that started or ended, a restart, a command the charger refused or did not answer, and what the proxy saw between the charger and its operators. Each event points back at the OCPP call it was read from, so you can open the full message with [List Logs](/api-reference/ocpp-logs/list-charger-logs).

The response carries codes, not sentences. Write the line in your own language from `type` and `details`.

<ParamField path="charger" type="string" required>
  The UUID of the charger.
</ParamField>

<ParamField query="filter[type]" type="string[]">
  Only these event types. Accepts an array or a comma-separated list. See `type` below for the values.
</ParamField>

<ParamField query="filter[severity]" type="string[]">
  Only these severities: `info`, `warning`, `critical`. Use `warning,critical` for the problems alone.
</ParamField>

<ParamField query="filter[operator]" type="string[]">
  Only events that involve these operators, as the proxy names them (see `operator` below). Accepts an array or a comma-separated list. `filter_options.operators` lists the operators set on this charger.
</ParamField>

<ParamField query="filter[connector]" type="integer[]">
  Only events on these connectors. Use `0` for the charger as a whole. Accepts an array or a comma-separated list.
</ParamField>

<ParamField query="filter[date_from]" type="string">
  Events from this moment on. Any date or ISO 8601 timestamp.
</ParamField>

<ParamField query="filter[date_to]" type="string">
  Events up to this moment. Must be after or equal to `filter[date_from]`.
</ParamField>

<ParamField query="before" type="string">
  The `next_cursor` of the previous page. Leave it out for the newest events.
</ParamField>

<ParamField query="per_page" type="integer">
  Events per page, 1 to 100. Defaults to 25.
</ParamField>

## Response

<ResponseField name="data" type="object[]">
  The events, newest first. A run of the same event in a row (the same card refused four times) is one event with a `count`.

  <Expandable title="event">
    <ResponseField name="type" type="string">
      What happened. One of `card_rejected`, `card_rejected_by_operator`, `session_started`, `session_stopped`, `connector_faulted`, `connector_recovered`, `connector_unavailable`, `charger_booted`, `command_failed`, `firmware_installed`, `firmware_failed`, `operator_failover`, `no_operator_reachable`, `message_lost`.

      `card_rejected` means the answer the charger acted on refused the card. `card_rejected_by_operator` means another operator refused it while the charger still got permission to charge.
    </ResponseField>

    <ResponseField name="severity" type="string">
      `info`, `warning` or `critical`.
    </ResponseField>

    <ResponseField name="occurred_at" type="string">
      ISO 8601 timestamp of the event, or of the latest one in a run.
    </ResponseField>

    <ResponseField name="first_at" type="string">
      ISO 8601 timestamp of the first event in a run. Equal to `occurred_at` when `count` is 1.
    </ResponseField>

    <ResponseField name="count" type="integer">
      How many identical events in a row this line stands for.
    </ResponseField>

    <ResponseField name="connector_id" type="integer">
      The connector, `0` for the charger as a whole, or `null` when the event has no connector.
    </ResponseField>

    <ResponseField name="operator" type="string">
      The operator involved, as the proxy names it: `hub` for Plugchoice, `proxy` when the proxy answered itself, otherwise the operator's host. Look up the display name in `operators`. May be `null`.

      For `operator_failover` it is the operator that stood in; `details.leader` is the operator that handles billing and did not answer.
    </ResponseField>

    <ResponseField name="details" type="object">
      The facts the event is written from. Depends on `type`: `id_tag`, `reason` and `authority` for a refused card (`configured` when the answer came from the operator that handles billing, `failover` when another operator stood in), plus `leader` for a `card_rejected` during a failover and `answered_by` for `card_rejected_by_operator`; `id_tag` and `transaction_id` for a started transaction; `reason` and `transaction_id` for a stopped one; `leader` for `operator_failover`; `status`, `error_code`, `info` and `vendor_error_code` for a fault; `status` for a recovery and for a failed firmware update; `command` and `outcome` for a command the charger refused or did not answer; `firmware` and `status` for a boot; `message` for a lost message.
    </ResponseField>

    <ResponseField name="log_id" type="integer">
      The ID of the OCPP call the event was read from.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="next_cursor" type="string">
  Pass it as `before` to get the next, older page. `null` on the last page.

  One page reads at most 14 days of log. When those 14 days hold no events, `data` is empty and `next_cursor` points further back, so keep paging until `next_cursor` is `null`.
</ResponseField>

<ResponseField name="operators" type="object">
  The display name for each operator on this page, keyed by the `operator` value. `hub` is Plugchoice; a host of a known operator gets its name.
</ResponseField>

<ResponseField name="cards" type="object">
  The name the location gave each card on this page, keyed by `id_tag`. Cards without a name are left out.
</ResponseField>

<ResponseField name="card_access" type="object">
  Where each card refused on this page (`card_rejected`) stands on the card list of the charger's location today, keyed by `id_tag`. Matched exactly, the way Plugchoice matches a card when it decides. A card that is not on the list is left out.

  <Expandable title="card access">
    <ResponseField name="status" type="string">
      `allowed` when the card may charge on this charger now, `other_chargers` when it is on the list but only for other chargers at the location.
    </ResponseField>

    <ResponseField name="card" type="string">
      The ID of the card at the location, for [Update Card](/api-reference/cards/update-card).
    </ResponseField>

    <ResponseField name="name" type="string">
      The name the location gave the card.
    </ResponseField>

    <ResponseField name="chargers" type="string[]">
      The UUIDs of the chargers the card is limited to. Empty means every charger at the location.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="filter_options" type="object">
  The values you can filter on.

  <Expandable title="filter_options">
    <ResponseField name="operators" type="string[]">
      The operators set on this charger, as the proxy names them: `hub` first, then each other operator's host. Their display names are in `operators`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json Response theme={null}
  {
    "data": [
      {
        "type": "card_rejected_by_operator",
        "severity": "warning",
        "occurred_at": "2026-10-08T13:05:00.000000Z",
        "first_at": "2026-10-08T13:05:00.000000Z",
        "count": 1,
        "connector_id": null,
        "operator": "ocpp.example.com",
        "details": {
          "id_tag": "AA9CD0F7",
          "reason": "Invalid",
          "answered_by": "hub",
          "authority": "configured"
        },
        "log_id": 81234
      }
    ],
    "next_cursor": "WyIyMDI2LTEwLTA4IDEzOjA1OjAwIiw4MTIzNF0",
    "operators": {
      "ocpp.example.com": "Example Operator",
      "hub": "Plugchoice"
    },
    "cards": {
      "AA9CD0F7": "Office card"
    },
    "card_access": {},
    "filter_options": {
      "operators": ["hub", "ocpp.example.com"]
    }
  }
  ```
</ResponseExample>


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