---
title: "Maintain performance"
description: "Understand maintenance calls, automatic reboots, configuration changes, and software releases."
url: "https://docs.adyen.com/point-of-sale/managing-terminals/maintain-performance"
source_url: "https://docs.adyen.com/point-of-sale/managing-terminals/maintain-performance.md"
canonical: "https://docs.adyen.com/point-of-sale/managing-terminals/maintain-performance"
last_modified: "2021-10-28T13:33:00+02:00"
language: "en"
---

# Maintain performance

Understand maintenance calls, automatic reboots, configuration changes, and software releases.

[View source](/point-of-sale/managing-terminals/maintain-performance.md)

To ensure your terminals continue to perform well and are using up-to-date settings and software, several events happen automatically on the terminals:

* **Maintenance calls**: every couple of hours, the terminal contacts our platform to check for configuration changes and software updates. The terminal doesn't implement or install anything yet (with a few exceptions).
* **Rebooting**: for security reasons, the terminal must clear its cache regularly. To achieve this, the terminal reboots once every 24 hours at the **restart hour**.
* **Configuration changes**: any configuration changes that the terminal discovered during a maintenance call, are implemented when the terminal reboots at the restart hour.
* **Software updates**: if the terminal is set to automatically update to new releases, any software update that the terminal discovered during a maintenance call is installed when the terminal reboots at the restart hour.

These events do not interfere with accepting payments or other daily operations. Below we explain the events in more detail, and describe what you need to do.

## Requirements

Before you begin, take into account the following requirements.

| Requirement          | Description                                                                                                                                                                                         |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Integration type** | A [Terminal API](/point-of-sale/design-your-integration/terminal-api) integration with payment terminals, or a [standalone solution ](/point-of-sale/standalone).                                   |
| **Setup steps**      | Ensure that your terminal is [turned on and connected to the network](#what-you-need-to-do) during at least one maintenance interval (three hours) before the restart hour (at 6:00 AM by default). |

## Maintenance calls

Every day, the terminal contacts our platform a few times to check for updates. We refer to this as *maintenance calls*. During a maintenance call, the terminal is informed of any changes in the configuration. For example, terminal settings that you configured in your Customer Area. If the terminal is set to [automatically update to new releases](/point-of-sale/release-updating/#automatic-updating), it is also informed of software updates that we have made available.

You won't notice when maintenance calls happen, because:

* On average a maintenance call takes only 1.8 seconds.
* Any changes and software updates are not installed yet, with a few [exceptions](#configuration-changes).
* The terminal doesn't make maintenance calls while it is doing a payment or other operation.

Terminals are scheduled to make a maintenance call regularly; by default every three hours. We refer to this period as the *maintenance interval*. When the terminal is busy at the time it is scheduled to make a maintenance call, it waits for a minute and tries again, and so on until it has succeeded in making a maintenance call. When the terminal has succeeded in making a maintenance call, it waits until the next scheduled maintenance call.

## Rebooting at the restart hour

*Rebooting* means the terminal is power cycled: it turns off and on again. Then the software restarts. This process takes about two minutes. Power cycling clears the terminal's cache, which is important for security reasons.

When the terminal reboots, it also installs any configuration change or software update that the terminal was informed of during a maintenance call. Installing the software can take up to 30 minutes.

To ensure the terminal's cache is cleared regularly and the terminal is updated, we have programmed the terminal to reboot once every 24 hours, at the so-called *restart hour*. By default, the restart hour is at **6:00 AM** in the timezone of the terminal.

### Set the restart hour

To ensure the terminal reboots during a period when the terminal is not in use, you can change the restart hour in your Customer Area. Considerations for changing the restart hour are:

* Your opening hours
* Operational events

For this task, you need to be the [**admin** ](/account/users)user.

To change the restart hour:

1. Log in to your [Customer Area](https://ca-test.adyen.com/).
2. Optionally select the merchant account, store, or terminal that you want to set the restart hour for.
3. Go to **In-person payments** > **Terminal settings** > **Hardware**.
4. In the **Maintenance** section, select one of the **Restart hour** values.
5. At the bottom of the page, select **Save**.

## Configuration changes

Configuration changes can be terminal settings that you updated in your Customer Area or [through API requests](/point-of-sale/automating-terminal-management/configure-terminals-api), but can also be platform-wide changes initiated by us. For example, an update to the contactless CVM limits. Configuration changes are implemented during the restart of the Adyen application, either when the terminal reboots at the [restart hour](#configuration-update-at-restart-hour), or when [triggered manually](#update-the-configuration-manually).

### Configuration update at restart hour

The terminal receives configuration changes when it makes a maintenance call. The terminal then implements the changes when the Adyen application restarts during reboot at the restart hour. There are a few exceptions:

* Changes initiated by us that must be applied as soon as possible. With these changes, we add an instruction to the terminal to restart after the maintenance call. Restarting takes about 30 seconds.
* Installing or uninstalling Android apps on Android terminals. The terminal carries out these changes immediately.
* Updating the configuration manually on the physical terminal.

### Update the configuration manually

If you want configuration changes to take effect immediately, you can update the configuration manually:

1. On the terminal, [open the Admin menu](/point-of-sale/pos-troubleshooting/terminal-turns-on/admin-pin).
2. Select **Config** > **Update**.

The terminal retrieves the updated configuration and then restarts.

### Automatic configuration update

You can enable a setting that restarts the Adyen application installed on the payment terminal as soon as the configuration is updated. This lets the terminal automatically apply the configuration update without restarting other applications you might have installed on the terminal. This can be useful for unattended terminals attached to a vending machine, token dispenser, parking payment systems, or similar.

To enable automatic configuration update:

1. Make a PATCH request to the `/terminalSettings` endpoint for the [company account](https://docs.adyen.com/api-explorer/Management/latest/get/companies/\(companyId\)/terminalSettings), [merchant account](https://docs.adyen.com/api-explorer/Management/latest/get/merchants/\(merchantId\)/terminalSettings), [store](https://docs.adyen.com/api-explorer/Management/latest/get/stores/\(storeId\)/terminalSettings) or [terminal](https://docs.adyen.com/api-explorer/Management/latest/get/terminals/\(terminalId\)/terminalSettings).\
   In the request body, specify a [terminalInstructions](https://docs.adyen.com/api-explorer/Management/latest/patch/companies/_companyId_/terminalSettings#request-terminalInstructions) object with:

   | Parameter                                                                                                                                                          | Data type | Description                                                                                                       |
   | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------- |
   | [adyenAppRestart](https://docs.adyen.com/api-explorer/Management/latest/patch/companies/_companyId_/terminalSettings#request-terminalInstructions-adyenAppRestart) | Boolean   | Indicates whether the Adyen app on the payment terminal restarts automatically when the configuration is updated. |

   **Automatic configuration update**

   #### curl

   ```bash
   curl https://management-test.adyen.com/v3/companies/{companyId}/terminalSettings \
   -H 'x-API-key: ADYEN_API_KEY' \
   -X PATCH \
   -d '{
     "terminalInstructions" : {
        "adyenAppRestart" : true
      }
   }'
   ```

   #### Java

   ```java
   // Adyen Java API Library v25.0.0
   import com.adyen.Client;
   import com.adyen.enums.Environment;
   import com.adyen.model.management.*;
   import java.time.OffsetDateTime;
   import java.util.*;
   import com.adyen.service.management.*;

   Client client = new Client("ADYEN_API_KEY", Environment.TEST);

   // Request objects
   TerminalInstructions terminalInstructions = new TerminalInstructions()
   	.adyenAppRestart(true);

   TerminalSettings terminalSettings = new TerminalSettings()
   	.terminalInstructions(terminalInstructions);

   // Make the request
   TerminalSettingsCompanyLevelApi service = new TerminalSettingsCompanyLevelApi(client);
   TerminalSettings response = service.updateTerminalSettings("companyId", terminalSettings, null);
   ```

   #### PHP

   ```php
   // Adyen PHP API Library v17.4.0
   use Adyen\Client;
   use Adyen\Environment;
   use Adyen\Model\Management\TerminalInstructions;
   use Adyen\Model\Management\TerminalSettings;
   use Adyen\Service\Management\TerminalSettingsCompanyLevelApi;

   $client = new Client();
   $client->setXApiKey("ADYEN_API_KEY");
   $client->setEnvironment(Environment::TEST);


   // Request objects
   $terminalInstructions = new TerminalInstructions();
   $terminalInstructions
   	->setAdyenAppRestart(true);

   $terminalSettings = new TerminalSettings();
   $terminalSettings
   	->setTerminalInstructions($terminalInstructions);

   // Make the request
   $service = new TerminalSettingsCompanyLevelApi($client);
   $response = $service->updateTerminalSettings('companyId', $terminalSettings);
   ```

   #### C\#

   ```cs
   // Adyen .net API Library v14.3.0
   using Adyen;
   using Environment = Adyen.Model.Environment;
   using Adyen.Model;
   using Adyen.Model.Management;
   using Adyen.Service.Management;

   var config = new Config()
   {
       XApiKey = "ADYEN_API_KEY",
       Environment = Environment.Test
   };
   var client = new Client(config);

   // Fill in your request objects
   TerminalInstructions terminalInstructions = new TerminalInstructions
   {
   	AdyenAppRestart = true
   };

   TerminalSettings terminalSettings = new TerminalSettings
   {
   	TerminalInstructions = terminalInstructions
   };

   // Make the request
   var service = new TerminalSettingsCompanyLevelService(client);
   var response = service.UpdateTerminalSettings("companyId", terminalSettings);
   ```

   #### NodeJS (JavaScript)

   ```js
   // Adyen Node API Library v16.2.0
   // Require the parts of the module you want to use
   const { Client, ManagementAPI } = require('@adyen/api-library');

   // Initialize the client object
   const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

   // Create the request object
   const terminalSettings = {
     terminalInstructions: {
       adyenAppRestart: true
     }
   }

   // Make the request
   const managementAPI = new ManagementAPI(client);
   const response = managementAPI.TerminalSettingsCompanyLevelApi.updateTerminalSettings("companyId", terminalSettings);
   ```

   #### Go

   ```go
   // Adyen Go API Library v9.2.0
   import (
   	"context"
   	"github.com/adyen/adyen-go-api-library/v9/src/common"
   	"github.com/adyen/adyen-go-api-library/v9/src/adyen"
   	"github.com/adyen/adyen-go-api-library/v9/src/management"
   )

   client := adyen.NewClient(&common.Config{
       ApiKey:      "ADYEN_API_KEY",
       Environment: common.TestEnv,
   })

   // Fill in your request objects
   terminalInstructions := management.TerminalInstructions{
   	AdyenAppRestart: common.PtrBool(true),
   }

   terminalSettings := management.TerminalSettings{
   	TerminalInstructions: &terminalInstructions,
   }

   // Make the request
   service := client.Management()
   req := service.TerminalSettingsCompanyLevelApi.UpdateTerminalSettingsInput("companyId").TerminalSettings(terminalSettings)
   res, httpRes, err := service.TerminalSettingsCompanyLevelApi.UpdateTerminalSettings(context.Background(), req)
   ```

   #### Python

   ```py
   # Adyen Python API Library v12.2.0
   import Adyen

   adyen = Adyen.Adyen()
   adyen.client.xapikey = "ADYEN_API_KEY"
   adyen.client.platform = "test" # The environment to use library in.

   json_request = {
     "terminalInstructions": {
       "adyenAppRestart": True
     }
   }

   result = adyen.management.terminal_settings_company_level_api.update_terminal_settings(request=json_request, companyId="companyId")
   ```

   #### Ruby

   ```rb
   # Adyen Ruby API Library v9.2.0
   require "adyen-ruby-api-library"

   adyen = Adyen::Client.new
   adyen.api_key = 'ADYEN_API_KEY'
   adyen.env = :test # Set to "live" for live environment

   request_body = {
     :terminalInstructions => {
       :adyenAppRestart => true
     }
   }

   result = adyen.management.terminal_settings_company_level_api.update_terminal_settings(request_body, 'companyId')
   ```

   #### NodeJS (TypeScript)

   ```ts
   // Adyen Node API Library v16.2.0
   // Require the parts of the module you want to use
   import { Client, ManagementAPI, Types } from "@adyen/api-library";

   // Initialize the client object
   const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});

   // Create the request objects
   const terminalInstructions: Types.management.TerminalInstructions = {
   	adyenAppRestart: true
   };

   const terminalSettings: Types.management.TerminalSettings = {
   	terminalInstructions: terminalInstructions
   };

   // Make the request
   const managementAPI = new ManagementAPI(client);
   const response = managementAPI.TerminalSettingsCompanyLevelApi.updateTerminalSettings("companyId", terminalSettings);
   ```

   The response returns all terminal settings at the level where you made the request.

## Software updates

By default, the Adyen software on the terminal is updated automatically. When there is a new release, the terminal learns about this during a maintenance call. When the terminal reboots at the restart hour, it downloads and installs the new software package.\
We can also enable background downloading for you. Android terminals use this by default. With background downloading, the terminal downloads new software after the maintenance call. This reduces the chance that the software update fails because the internet connection is down at the reboot hour.

Apart from updating automatically, you can decide to participate in our beta program.

For more information about update strategies and the release cycle, see [Update to a new release](/point-of-sale/release-updating)

## What you need to do

It is important that:

* The terminal makes at least one maintenance call every day to receive information about any changes.\
  For this, the terminal must be turned on and have a network connection.
* The terminal reboots every day.\
  To reboot automatically, the terminal needs to be turned on at the restart hour. To download updates when it reboots, the terminal also needs to have a network connection.

This means you must ensure that your terminal is turned on and connected to the network during at least one maintenance interval (three hours) before the restart hour (at 6:00 AM by default).\
In practice, we recommend you **keep your terminals turned on and connected to the network overnight**.

## See also

* [Managing terminals](/point-of-sale/managing-terminals)
* [Strategies for updating to a new release](/point-of-sale/release-updating)
