--- title: "Cellular failover" description: "Switch to cellular when the terminal can't access the internet through the network connection." url: "https://docs.adyen.com/point-of-sale/design-your-integration/network-and-connectivity/cellular-failover" source_url: "https://docs.adyen.com/point-of-sale/design-your-integration/network-and-connectivity/cellular-failover.md" canonical: "https://docs.adyen.com/point-of-sale/design-your-integration/network-and-connectivity/cellular-failover" last_modified: "2025-08-11T09:41:00+02:00" language: "en" --- # Cellular failover Switch to cellular when the terminal can't access the internet through the network connection. [View source](/point-of-sale/design-your-integration/network-and-connectivity/cellular-failover.md) To process a transaction, the terminal must have internet access. Cellular failover occurs when the payment terminal cannot access the internet over the primary network connection (usually Wi-Fi or Ethernet), and switches to a cellular connection (3G or 4G). This enables you to continue making transactions when there is a problem with the internet access. The payment terminal will switch back to using the primary connection when this is available again. This page provides an overview of how to manage cellular connectivity, including using the Management API to activate or deactivate SIM cards. It also covers cellular failover scenarios and alternatives where cellular failover is not useful, and explains how to use third-party SIM cards in addition to the pre-installed SIM cards provided. ## Requirements | Requirement | Description | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | A [Terminal API integration](/point-of-sale/basic-tapi-integration/) with payment terminals or a [standalone solution](/point-of-sale/standalone/). | | **Limitations** | Take into account the following limitations:- Cellular failover is limited to Adyen-related services, such as payment or diagnostics requests. Cellular failover does not support network requests from other apps that you may have deployed on the terminal. - [Third-party SIM cards](/point-of-sale/design-your-integration/network-and-connectivity/cellular-failover#activating-a-third-party-sim-card) can only be used with AMS1, S1U2, S1F2, S1F2L, and S1E2L payment terminals with software version 1.93 or later installed. | ## Cellular connection and alternatives When there is a problem with the internet access, you can use cellular failover so that your terminals automatically switch to a cellular connection. To make cellular failover possible, you can either: * [Use terminals with built-in cellular connectivity](#using-3g-4g-terminals). * [Use a cellular router](#using-a-3g-4g-router). ### Using terminals with cellular connectivity Most [mobile and portable terminals](/point-of-sale/what-we-support/select-your-terminals/) have built-in 3G or 4G hardware and a pre-installed, activated SIM card. This allows the terminals to send and receive payment messages as packets over the internet through General Packet Radio Service (GPRS, which is an extension to cellular communication). If these terminals cannot reach the internet through their primary network connection, they automatically switch to processing payments using their cellular connection. They will also switch back to using the primary connection when this is available again. Note that our terminals only support SIM cards supplied by Adyen. For exceptions see [activating a third-party SIM card](#activating-a-third-party-sim-card). Currently, we do not charge fees for using the cellular connection. In the near future this will change for Android terminals: we won't charge a fee for using the cellular connection to make payments or update the terminal, but you will need to buy data bundles to cover the expected data traffic of the apps that you have running on your Android terminals. Mobile network operators around the world are [ending coverage for 3G](/point-of-sale/design-your-integration/network-and-connectivity/end-of-3g). This affects terminals that only support 3G for cellular connectivity. ### Using a cellular router If your terminals do not have built-in cellular hardware, you can install a router with 3G/4G cellular failover. When the terminal cannot reach the internet through its primary network connection, the terminal switches to an internet connection over GPRS. The terminal also switches back to the primary connection when this is available again. To ensure you get the best cellular reception, you should also install external 3G/4G antennas. However, there are situations when cellular failover is not always useful, as described in the [scenarios](#scenarios) in the next section. The following alternatives are available: * Enable [offline payments](/point-of-sale/offline-payment). This is possible when your integration uses [local communications](/point-of-sale/design-your-integration/choose-your-architecture/local). * Use a [standalone terminal](/point-of-sale/standalone) as a backup. This must be a terminal model with a **built-in printer**. Also, either [cellular connectivity](#set-up-cellular-connectivity-on-the-terminal) or [offline payments](/point-of-sale/offline-payment) must be enabled on the standalone terminal. You are fully liable for the risk of failed captures, chargebacks, and disputes related to offline payments. ## Understanding cellular failover scenarios There is a difference between network connectivity and internet connectivity. The terminal uses its primary network connection (Wi-Fi or Ethernet) to reach the internet. There are two ways this can go wrong: * The terminal cannot access the internet because it has lost the connection to your network. * The terminal is connected to your network but cannot access the internet. The following scenarios show how cellular failover works in these cases with cloud communications and local communications. ### Scenario: No network connection - cloud integration ![](/user/pages/docs/03.point-of-sale/04.design-your-integration/07.network-and-connectivity/03.cellular-failover/cloud-no-network.svg?decoding=auto\&fetchpriority=auto)\ The terminal lost its primary network connection, and fails over to a cellular connection. The POS app sends the payment request to the Adyen payments platform, which forwards the request to the terminal. The terminal receives and processes the request over the cellular connection. ### Scenario: No internet - cloud integration ![](/user/pages/docs/03.point-of-sale/04.design-your-integration/07.network-and-connectivity/03.cellular-failover/cloud-no-internet.svg?decoding=auto\&fetchpriority=auto)\ The terminal is connected to the network through its primary network connection, but has no internet access. The terminal fails over to a cellular connection. If the POS app does have internet access, it sends the payment request to the Adyen payments platform, which forwards the request to the terminal. The terminal receives and processes the request over the cellular connection. If the POS app cannot access the internet, cellular failover on the terminal does not solve the problem as shown in the next illustration. ![](/user/pages/docs/03.point-of-sale/04.design-your-integration/07.network-and-connectivity/03.cellular-failover/cloud-no-internet-at-all.svg?decoding=auto\&fetchpriority=auto) If the POS app has no internet access, it cannot send and receive payment messages. In this scenario, cellular failover on the terminal is not useful. Consider using a [standalone terminal](/point-of-sale/standalone) as a backup. ### Scenario: No network connection - local integration ![](/user/pages/docs/03.point-of-sale/04.design-your-integration/07.network-and-connectivity/03.cellular-failover/local-no-network.svg?decoding=auto\&fetchpriority=auto)\ The terminal lost its primary network connection, and fails over to a cellular connection. The POS app is still connected to the network and sends the payment request to the terminal over the network. However, the terminal never receives the request because it is disconnected from the network. In this scenario, cellular failover on the terminal is not useful. Consider alternatives: * Use a [standalone terminal](/point-of-sale/standalone) as a backup. * Enable [offline payments](/point-of-sale/offline-payment). ### Scenario: No internet - local integration ![](/user/pages/docs/03.point-of-sale/04.design-your-integration/07.network-and-connectivity/03.cellular-failover/local-no-internet.svg?decoding=auto\&fetchpriority=auto)\ The terminal is connected to the network through its primary network connection. After receiving the request, the terminal tries to access the internet through the primary connection. After 36 seconds of not being able to connect to the internet, the terminal fails over to a cellular connection. The transaction is processed over the cellular connection. ## Manage cellular connectivity on the terminal By default, SIM cards are activated and cellular connectivity is enabled. Using our [Management API](/point-of-sale/automating-terminal-management/configure-terminals-api), you can deactivate and activate the SIM card in individual terminals one at a time. If you deactivate a SIM card, the terminal cannot use cellular connectivity. If you later enable the SIM card again, you need to ensure the terminal can use it. To deactivate or activate the SIM card in a terminal: 1. Optional. To see the current activation status of a SIM card, make a GET [/terminals/{terminalId}/terminalSettings](https://docs.adyen.com/api-explorer/Management/latest/get/terminals/\(terminalId\)/terminalSettings) request and check the [simcardStatus](https://docs.adyen.com/api-explorer/Management/latest/patch/terminals/\(terminalId\)/terminalSettings#responses-200-connectivity-simcardStatus). 2. Make a PATCH [/terminals/{terminalId}/terminalSettings](https://docs.adyen.com/api-explorer/Management/latest/patch/terminals/\(terminalId\)/terminalSettings) request. In the request body, specify a [connectivity](https://docs.adyen.com/api-explorer/Management/latest/patch/terminals/\(terminalId\)/terminalSettings#request-connectivity) object with the following properties: | Parameter | Data type | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [simcardStatus](https://docs.adyen.com/api-explorer/Management/latest/patch/terminals/\(terminalId\)/terminalSettings#request-connectivity-simcardStatus) | String | The status of the SIM card in the terminal that is specified in the path. Possible values:- **ACTIVATED**: the SIM card is activated. - **INVENTORY**: the SIM card is deactivated. The terminal cannot use cellular connectivity. | **Deactivate SIM card** #### curl ```bash curl https://management-test.adyen.com/v3/terminals/{terminalId}/terminalSettings \ -H 'x-API-key: ADYEN_API_KEY' \ -X PATCH \ -d '{ "connectivity":{ "simcardStatus":"INVENTORY" } }' ``` #### 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 Connectivity connectivity = new Connectivity() .simcardStatus(Connectivity.SimcardStatusEnum.INVENTORY); TerminalSettings terminalSettings = new TerminalSettings() .connectivity(connectivity); // Make the request TerminalSettingsTerminalLevelApi service = new TerminalSettingsTerminalLevelApi(client); TerminalSettings response = service.updateTerminalSettings("terminalId", terminalSettings, null); ``` #### PHP ```php // Adyen PHP API Library v17.4.0 use Adyen\Client; use Adyen\Environment; use Adyen\Model\Management\Connectivity; use Adyen\Model\Management\TerminalSettings; use Adyen\Service\Management\TerminalSettingsTerminalLevelApi; $client = new Client(); $client->setXApiKey("ADYEN_API_KEY"); $client->setEnvironment(Environment::TEST); // Request objects $connectivity = new Connectivity(); $connectivity ->setSimcardStatus("INVENTORY"); $terminalSettings = new TerminalSettings(); $terminalSettings ->setConnectivity($connectivity); // Make the request $service = new TerminalSettingsTerminalLevelApi($client); $response = $service->updateTerminalSettings('terminalId', $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 Connectivity connectivity = new Connectivity { SimcardStatus = Connectivity.SimcardStatusEnum.INVENTORY }; TerminalSettings terminalSettings = new TerminalSettings { Connectivity = connectivity }; // Make the request var service = new TerminalSettingsTerminalLevelService(client); var response = service.UpdateTerminalSettings("terminalId", 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 = { connectivity: { simcardStatus: "INVENTORY" } } // Make the request const managementAPI = new ManagementAPI(client); const response = managementAPI.TerminalSettingsTerminalLevelApi.updateTerminalSettings("terminalId", 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 connectivity := management.Connectivity{ SimcardStatus: common.PtrString("INVENTORY"), } terminalSettings := management.TerminalSettings{ Connectivity: &connectivity, } // Make the request service := client.Management() req := service.TerminalSettingsTerminalLevelApi.UpdateTerminalSettingsInput("terminalId").TerminalSettings(terminalSettings) res, httpRes, err := service.TerminalSettingsTerminalLevelApi.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 = { "connectivity": { "simcardStatus": "INVENTORY" } } result = adyen.management.terminal_settings_terminal_level_api.update_terminal_settings(request=json_request, terminalId="terminalId") ``` #### 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 = { :connectivity => { :simcardStatus => 'INVENTORY' } } result = adyen.management.terminal_settings_terminal_level_api.update_terminal_settings(request_body, 'terminalId') ``` #### 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 connectivity: Types.management.Connectivity = { simcardStatus: Types.management.Connectivity.SimcardStatusEnum.INVENTORY }; const terminalSettings: Types.management.TerminalSettings = { connectivity: connectivity }; // Make the request const managementAPI = new ManagementAPI(client); const response = managementAPI.TerminalSettingsTerminalLevelApi.updateTerminalSettings("terminalId", terminalSettings); ``` The response returns all terminal settings at the level where you made the request. 3. If you activated a SIM card that was previously deactivated, re-enable cellular connectivity on the terminal or reboot the terminal: * For **non-Android** terminal models: * With the [new menu structure](/point-of-sale/menu-access#engage-terminal-menus): 1. Select **Settings** > **Network** and enter your [Admin & Settings](/point-of-sale/menu-access/#manage-passcodes) passcode. 2. Select **Cellular** and select the toggle to enable the SIM card. * With the [old menu structure](/point-of-sale/menu-access#old-menu-structure): 1. Go to the [Admin menu](/point-of-sale/pos-troubleshooting/terminal-turns-on/admin-pin/#open-admin-menu) and enter your [Admin & Settings](/point-of-sale/menu-access/#manage-passcodes) passcode. 2. Select **Network** > **Cellular**. 3. Select the **Cellular** toggle to enable the feature. * For **Android** terminal models, you need to restart your terminal after changing the SIM status either by: * [Manually rebooting your terminal](/point-of-sale/managing-terminals/maintain-performance/#update-the-configuration-manually). * [Rebooting at the restart hour](/point-of-sale/managing-terminals/maintain-performance/#rebooting-at-the-restart-hour). The terminal automatically selects the strongest available network that is supported by the terminal model. You can also select a network manually from the **Device info** menu. ## Activating a third-party SIM card You can use a third-party SIM card on AMS1, S1U2, S1F2, S1F2L, and S1E2L payment terminals in addition to the pre-installed SIM card provided by Adyen. To activate a third-party SIM card on your terminal at the merchant level: 1. Contact your Adyen account manager and provide the following details: * The Access Point Name (APN) that you received from your network operator. * The serial number of the terminal on which you installed the third-party SIM card. 2. Make sure software version v1.93 or later is installed on your terminal. 3. Place the third-party SIM card in the *second* SIM slot of your terminal. Do not remove the pre-installed SIM card from its slot. Your terminal will automatically prioritize the activated third-party SIM card. When you remove the third-party SIM card, your terminal will automatically use the pre-installed SIM card again. ## Switch to a local network operator in Brazil Regulatory requirements in Brazil allow roaming for cellular network traffic for up to 90 days. This is why Adyen supports switching to a local network operator in Brazil without the need to sign any additional contracts or install additional SIM cards.\ On Android payment terminals, like [S1F2](/point-of-sale/user-manuals/s1f2-user-manual/), you can manually select a Brazilian network provider from the list of supported ones in the payment terminal menu. The payment terminals must be on software version 1.96 or later. To switch to a local network provider: 1. Go to **Settings** > **Network** and enter your [Admin & Settings](/point-of-sale/menu-access/#manage-passcodes) passcode. 2. Select **Cellular** > **Select operator**. 3. In the pop-up, select **OK**. This means the terminal will restart after you select a different operator. 4. Select **MULTI IMSI** > **Status** > **Enable.** 5. Select **MULTI IMSI** > **IMSI**. From the list of network operators, select: 1. **ARQIA** to connect to *TIM*. 2. **ROAMING 1** to connect to *Vivo*. 3. **ROAMING 2** to connect to *Claro*. When done, the payment terminal automatically restarts and applies the new settings. After you manually switch to a different network provider, the terminal stays connected to that network even if the connection is weak. To change the network provider, you need to select a different one manually. ## See also * [Use API calls to configure terminals](/point-of-sale/automating-terminal-management/configure-terminals-api) * [Standalone terminals](/point-of-sale/standalone) * [Offline payments](/point-of-sale/offline-payment)