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

# Bulk Command

Queues the same OCPP 1.6 command against multiple chargers at once. Each charger is processed by a background job; the response returns a run resource you can poll to track progress.

Chargers the authenticated user cannot access are silently reported as `skipped_forbidden` in the run results. Chargers that are offline at dispatch time are reported as `offline`. Other failures are reported as `error` with a message.

<ParamField body="command" type="string" required>
  The OCPP 1.6 command name (e.g. `Reset`, `ChangeAvailability`, `UnlockConnector`, `TriggerMessage`, `ChangeConfiguration`).
</ParamField>

<ParamField body="data" type="object">
  Command-specific payload forwarded to each charger. Optional. Shape depends on the command.
</ParamField>

<ParamField body="charger_ids" type="array" required>
  UUIDs of the target chargers. Minimum 1, no hard upper bound — result rows are inserted in batches and one queue job is dispatched per accessible charger.
</ParamField>

## Response

Returns `202 Accepted` with the created run wrapped in `data`.

<ResponseField name="uuid" type="string">
  Unique identifier of the bulk run. Use this with `GET /v3/chargers/commands/bulk/{run}` to poll progress.
</ResponseField>

<ResponseField name="command" type="string">
  The OCPP command that was queued.
</ResponseField>

<ResponseField name="data" type="object">
  The command payload forwarded to each charger.
</ResponseField>

<ResponseField name="status" type="string">
  `running` while jobs are in flight, `completed` once every charger has a terminal result.
</ResponseField>

<ResponseField name="total_count" type="integer">
  Number of chargers submitted.
</ResponseField>

<ResponseField name="sent_count" type="integer">
  Chargers that acknowledged the command.
</ResponseField>

<ResponseField name="offline_count" type="integer">
  Chargers that were offline when the command was dispatched.
</ResponseField>

<ResponseField name="error_count" type="integer">
  Chargers whose command failed for any other reason (message in the per-result payload).
</ResponseField>

<ResponseField name="skipped_count" type="integer">
  Chargers the authenticated user does not have access to, or that could not be resolved.
</ResponseField>

<ResponseField name="created_at" type="string">
  When the run was created (ISO 8601 date-time).
</ResponseField>

<ResponseField name="completed_at" type="string">
  When every charger reached a terminal result (ISO 8601 date-time). `null` while the run is still in progress.
</ResponseField>

<ResponseField name="results" type="array">
  Per-charger status. Each entry contains `charger_uuid`, `status` (`pending`, `sent`, `offline`, `error`, `skipped_forbidden`), `message`, `executed_at`, and — when the user has access — an embedded `charger` object with `uuid`, `identity`, and `reference`.
</ResponseField>
