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

# Manage terminals remotely

> Send administrative commands to a Dintero payment terminal and read the results, including end-of-day, log upload, update checks, and opening the terminal menu.

Terminal operations let you send administrative commands to a registered payment terminal and read the results. Use them to run an end-of-day close, ask the terminal to upload its logs, check for software updates, or open the terminal menu, without physically touching the device.

Operations are asynchronous. You send a command, the API dispatches it to the terminal and returns immediately with a `PENDING` operation, and the terminal processes the command in the background. You then poll the operation to see how it finished.

<Info>
  Terminal operations are administrative commands. They do not start a payment. To take a payment on a terminal, see [creating a terminal session](/docs/checkout/in-person/creating-terminal-session).
</Info>

## Available operations

| Operation      | Description                                    |
| -------------- | ---------------------------------------------- |
| `end_of_day`   | Run the end-of-day routine on the terminal.    |
| `send_logs`    | Instruct the terminal to upload its logs.      |
| `check_update` | Have the terminal check for a software update. |
| `open_menu`    | Open the settings menu on the terminal.        |

## Send a command

```http theme={null}
POST https://checkout.dintero.com/v1/admin/terminals/operations
Authorization: Bearer <token>
Content-Type: application/json
```

The request body identifies the terminal and the operation to run.

```json theme={null}
{
  "terminal_id": "P11223351-T0013",
  "operation": "end_of_day"
}
```

The response is returned as soon as the command is dispatched to the terminal. The terminal's response is processed asynchronously, so the operation starts with status `PENDING`.

```json theme={null}
{
  "id": "3f1a9c2e-8b7d-4f6a-9c1e-2d5b8a0f4e6c",
  "terminal_id": "P11223351-T0013",
  "operation": "end_of_day",
  "status": "PENDING",
  "created_at": "2026-06-29T09:00:00Z",
  "created_by": "user@example.com",
  "updated_at": "2026-06-29T09:00:00Z",
  "updated_by": "user@example.com"
}
```

See [POST /admin/terminals/operations](/api-reference/terminals/admin_terminals_operations_post) for the full schema.

### Idempotency

Pass an `Idempotency-Key` header to ensure the same command is only executed once, for example when retrying after a network error.

```http theme={null}
Idempotency-Key: 9b2c5d7e-1a3f-4c6b-8d9e-0f1a2b3c4d5e
```

### One operation at a time

A terminal processes one operation at a time. If an operation is already pending for the terminal, the API responds with `409 Conflict` and a `Retry-After` header indicating how many seconds to wait before retrying.

## List operation results

Poll operations to see how a command finished. The endpoint returns operations and supports filtering by `terminal_id` and `operation_id`.

```http theme={null}
GET https://checkout.dintero.com/v1/admin/terminals/operations?terminal_id=P11223351-T0013
Authorization: Bearer <token>
```

To check a single operation, filter by the `id` returned when you sent the command.

```http theme={null}
GET https://checkout.dintero.com/v1/admin/terminals/operations?operation_id=3f1a9c2e-8b7d-4f6a-9c1e-2d5b8a0f4e6c
Authorization: Bearer <token>
```

See [GET /admin/terminals/operations](/api-reference/terminals/admin_terminals_operations_get) for the full schema.

### Operation status

| Status      | Meaning                                                                                                  |
| ----------- | -------------------------------------------------------------------------------------------------------- |
| `PENDING`   | The operation has been dispatched to the terminal and is awaiting a response.                            |
| `COMPLETED` | The terminal responded and the operation finished successfully.                                          |
| `FAILED`    | The terminal responded but reported a failure.                                                           |
| `TIMEOUT`   | No response was received from the terminal within the timeout window. A new operation can be dispatched. |

## Scopes

| Endpoint                           | Scopes                                                |
| ---------------------------------- | ----------------------------------------------------- |
| `POST /admin/terminals/operations` | `admin:checkout` or `write:checkout:/admin/terminals` |
| `GET /admin/terminals/operations`  | `admin:checkout` or `read:checkout:/admin/terminals`  |
