---
title: "Create a terminal action"
method: POST
path: "/terminals/scheduleActions"
tags: ["Terminal actions - terminal level"]
---

# Create a terminal action

`POST /terminals/scheduleActions`

Schedules a [terminal action](https://docs.adyen.com/point-of-sale/automating-terminal-management/terminal-actions-api) by specifying the action and the terminals that the action must be applied to. 

The following restrictions apply:
* You can schedule only one action at a time. For example, to install a new app version and remove an old app version, you have to make two API requests. 
* The maximum number of terminals in a request is **100**. For example, to apply an action to 250 terminals, you have to divide the terminals over three API requests. 
* If there is an error with one or more terminal IDs in the request, the action is scheduled for none of the terminals. You need to fix the error and try again. 

To make this request, your API credential must have the following [role](https://docs.adyen.com/development-resources/api-credentials#api-permissions):
* Management API—Terminal actions read and write

In the live environment, requests to this endpoint are subject to [rate limits](https://docs.adyen.com/point-of-sale/automating-terminal-management#rate-limits-in-the-live-environment).

## Request body

- ScheduleTerminalActionsRequest
  - `actionDetails` union — Information about the action to take.
    - ForceRebootDetails
      - `type` 'ForceReboot' — The type of terminal action. The value **ForceReboot** triggers an immediate reboot of the specified terminal(s).
    - InstallAndroidAppDetails
      - `appId` string — The unique identifier of the app to be installed.
      - `type` 'InstallAndroidApp' — Type of terminal action: Install an Android app.
    - InstallAndroidCertificateDetails
      - `certificateId` string — The unique identifier of the certificate to be installed.
      - `type` 'InstallAndroidCertificate' — Type of terminal action: Install an Android certificate.
    - ReleaseUpdateDetails
      - `type` 'ReleaseUpdate' — Type of terminal action: Update Release.
      - `updateAtFirstMaintenanceCall` boolean — Boolean flag that tells if the terminal should update at the first next maintenance call. If false, terminal will update on its configured reboot time.
    - UninstallAndroidAppDetails
      - `appId` string — The unique identifier of the app to be uninstalled.
      - `type` 'UninstallAndroidApp' — Type of terminal action: Uninstall an Android app.
    - UninstallAndroidCertificateDetails
      - `certificateId` string — The unique identifier of the certificate to be uninstalled.
      - `type` 'UninstallAndroidCertificate' — Type of terminal action: Uninstall an Android certificate.
  - `scheduledAt` string — The date and time when the action should happen. Format: [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339), but without the **Z** before the time offset. For example, **2021-11-15T12:16:21+0100** The action is sent with the first [maintenance call](https://docs.adyen.com/point-of-sale/automating-terminal-management/terminal-actions-api#when-actions-take-effect) after the specified date and time in the time zone of the terminal. An empty value causes the action to be sent as soon as possible: at the next maintenance call.
  - `storeId` string — The unique ID of the [store](https://docs.adyen.com/api-explorer/#/ManagementService/latest/get/stores). If present, all terminals in the `terminalIds` list must be assigned to this store.
  - `terminalIds` string[] — A list of unique IDs of the terminals to apply the action to. You can extract the IDs from the [GET `/terminals`](https://docs.adyen.com/api-explorer/#/ManagementService/latest/get/terminals) response. Maximum length: 100 IDs.

## Response `200`

OK - the request has succeeded.

- ScheduleTerminalActionsResponse
  - `actionDetails` union — Information about the action to take.
    - ForceRebootDetails
      - `type` 'ForceReboot' — The type of terminal action. The value **ForceReboot** triggers an immediate reboot of the specified terminal(s).
    - InstallAndroidAppDetails
      - `appId` string — The unique identifier of the app to be installed.
      - `type` 'InstallAndroidApp' — Type of terminal action: Install an Android app.
    - InstallAndroidCertificateDetails
      - `certificateId` string — The unique identifier of the certificate to be installed.
      - `type` 'InstallAndroidCertificate' — Type of terminal action: Install an Android certificate.
    - ReleaseUpdateDetails
      - `type` 'ReleaseUpdate' — Type of terminal action: Update Release.
      - `updateAtFirstMaintenanceCall` boolean — Boolean flag that tells if the terminal should update at the first next maintenance call. If false, terminal will update on its configured reboot time.
    - UninstallAndroidAppDetails
      - `appId` string — The unique identifier of the app to be uninstalled.
      - `type` 'UninstallAndroidApp' — Type of terminal action: Uninstall an Android app.
    - UninstallAndroidCertificateDetails
      - `certificateId` string — The unique identifier of the certificate to be uninstalled.
      - `type` 'UninstallAndroidCertificate' — Type of terminal action: Uninstall an Android certificate.
  - `items` TerminalActionScheduleDetail[] — A list containing a terminal ID and an action ID for each terminal that the action was scheduled for.
    - `id` string — The ID of the action on the specified terminal.
    - `terminalId` string — The unique ID of the terminal that the action applies to.
  - `scheduledAt` string — The date and time when the action should happen. Format: [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339), but without the **Z** before the time offset. For example, **2021-11-15T12:16:21+0100** The action is sent with the first [maintenance call](https://docs.adyen.com/point-of-sale/automating-terminal-management/terminal-actions-api#when-actions-take-effect) after the specified date and time in the time zone of the terminal. An empty value causes the action to be sent as soon as possible: at the next maintenance call.
  - `storeId` string — The unique ID of the [store](https://docs.adyen.com/api-explorer/#/ManagementService/latest/get/stores). If present, all terminals in the `terminalIds` list must be assigned to this store.
  - `terminalIds` string[] — A list of unique IDs of the terminals that the action applies to.
  - `terminalsWithErrors` object — The validation errors that occurred in the list of terminals, and for each error the IDs of the terminals that the error applies to.
  - `totalErrors` integer — The number of terminals for which scheduling the action failed.
  - `totalScheduled` integer — The number of terminals for which the action was successfully scheduled. This doesn't mean the action has happened yet.

## Other responses

- `400` — Bad Request - a problem reading or understanding the request.
- `401` — Unauthorized - authentication required.
- `403` — Forbidden - insufficient permissions to process the request.
- `422` — Unprocessable Entity - a request validation error.
- `500` — Internal Server Error - the server could not process the request.

---

[API](https://skmtc.net/adyen/apis/management-api.md) · [All operations](https://skmtc.net/adyen/apis/management-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/adyen/management-api/revisions/1089ade06e17/schema)
