---
title: Shift4 Dynamic Terminal Support
slug: shift4-dynamic-terminal-support
docTags: 
createdAt: 2026-03-03T09:41:50.493Z
---

# Overview

Shift4's Dynamic Terminal functionality allows Payment Facilitators to add new POS devices as part of the financial transaction flow without requiring separate device setup requests in advance. The Toro platform supports this feature by automatically including the required Shift4 parameters during transaction processing.

:::hint{type="warning"}
**Important:&#x20;**&#x54;he Toro platform does not directly interact with the Shift4 Immediate Setup API. Payment Facilitators must complete the sub-merchant setup process through Shift4's Immediate Setup flow before configuring dynamic terminal parameters in Toro. Additionally, Dynamic Terminal functionality requires specific authorization from the Shift4 team - contact your Shift4 Solution Architect to ensure your account has the necessary permissions. For detailed information on the Immediate Setup process, refer to the [Shift4 Payment Facilitator Immediate Setup Specifications](https://epower.credorax.com/wp-content/uploads/2025/10/Shift4-Payment-Facilitator-Immediate-Setup-Specifications-v1.8-rev-3.pdf).
:::

# Configuration

Dynamic Terminal configuration involves setting these parameters through the Management API:

| **Parameter**            | **Shift4 Field** | **Toro Configuration**                            | **Required** |
| ------------------------ | ---------------- | ------------------------------------------------- | ------------ |
| POS Device Address       | h5               | `location` or `location_id` (POI)                 | Yes          |
| Card Present Device Code | h13              | `acquirer_device_code` (Configuration)            | Yes          |
| Dynamic Terminal Enable  | N/A              | `immediate_setup_dynamic_terminal`(Configuration) | Yes          |

:::hint{type="info"}
**Note**: The `acquirer_terminal_id` field in Toro configuration corresponds to
Shift4's `b17` parameter (Card Acceptor Terminal ID), which is required for
all Card Present transactions.
:::

## Card Present Device Code (h13)

The Shift4 `h13` parameter (card present device code) identifies the specific make and model of the POS device. This 3-digit code must be configured in the Shift4 configuration, which will then be linked to POIs.

### Configuration Location

The device code is set via the acquirer\_device\_code field in either:

- **`shift4_config`**: For standard Shift4 processing
- **`shift4_amex_config`**: For American Express processing via Shift4

Additionally, the `immediate_setup_dynamic_terminal` boolean field must be set to `true` to enable Dynamic Terminal functionality. This field is specific to the Toro platform and controls whether the system includes the h5 and h13 parameters in transaction requests.

:::hint{type="warning"}
**Important**: The device code must be obtained from Shift4 and corresponds to the certified device make and model. If the code is padded with leading zeros to make it 3 digits (e.g., '003'), include the leading zeros in the configuration.
:::

### Configuration Examples

::::CodeDrawer{title="Shift4 Dynamic Terminal" isResponseExpanded="true" autoGeneratedAnchorSlug="shift4-dynamic-terminal" legacyHash="f1HNUblfOkjz0LcHcGVuA"}
:::CodeblockTabsExamples
```curl
curl --request POST \
  --url https://mgmt-api.torogateway.dev/v1/configurations \
  --header 'API-Key: <KEY>' \
  --header 'content-type: application/json' \
  --data '{
    "shift4_config": {
      "acquirer": "shift4",
      "acquirer_merchant_id": "MERCHANT001",
      "acquirer_device_code": "123",
      "acquirer_terminal_id": "TERM001",
      "immediate_setup_dynamic_terminal": true,
      "supported_card_entry_modes": [
        "integrated_circuit_card",
        "magnetic_stripe"
      ],
      "online_pin_supported": true,
      "partial_approval_supported": false
    }
  }'
```
:::

:::CodeblockTabsResponses
```javascript
{
    "id": "cfg_b07fa17ed2530939ae0f24",
    "account_id": "acc_123",
    "dba_name": null,
    "shift4_config": {
        "id": "acp_c9acac83067c2c4f2f5fb4",
        "account_id": "acc_123",
        "acquirer_merchant_id": "MERCHANT001",
        "acquirer_submerchant_id": null,
        "acquirer_terminal_id": "TERM001",
        "acquirer_submerchant_address": null,
        "acquirer": "shift4",
        "supported_card_entry_modes": [
            "integrated_circuit_card",
            "magnetic_stripe"
        ],
        "partial_approval_supported": false,
        "online_pin_supported": true,
        "supported_cvms": null,
        "cvms_supporting_pre_approval": null,
        "nexo_host_message_to_send": null,
        "nexo_financial_capture": null,
        "nexo_completion_exchange_policy": null,
        "nexo_cancellation_exchange": null,
        "nexo_card_data_verification": null,
        "pin_request_supported": null,
        "acquirer_device_code": "123",
        "immediate_setup_dynamic_terminal": true
    },
    "created_at": "2026-03-03T14:44:56.460215",
    "updated_at": "2026-03-03T14:44:56.460215",
    "phone_number": null,
    "shift4_amex_config": null
}
```
:::
::::

::::CodeDrawer{title="Shift4 American Express Dynamic Terminal" isResponseExpanded="true" autoGeneratedAnchorSlug="shift4-american-express-dynamic-terminal" legacyHash="vk8q80SUT-meEkpV_s0Rp"}
:::CodeblockTabsExamples
```curl
curl --request POST \
  --url https://mgmt-api.torogateway.dev/v1/configurations \
  --header 'API-Key: <KEY>' \
  --header 'content-type: application/json' \
  --data '{
    "shift4_amex_config": {
      "acquirer": "shift4_amex",
      "acquirer_merchant_id": "AMEXMERCH001",
      "acquirer_device_code": "003",
      "acquirer_terminal_id": "AMEXTERM001",
      "immediate_setup_dynamic_terminal": true
    }
  }'
```
:::

:::CodeblockTabsResponses
```javascript
{
    "id": "cfg_46587ec203dae1b6e9ed54",
    "account_id": "acc_123",
    "dba_name": null,
    "shift4_config": null,
    "created_at": "2026-03-03T14:57:32.039613",
    "updated_at": "2026-03-03T14:57:32.039613",
    "phone_number": null,
    "shift4_amex_config": {
        "id": "sac_82e0105acb300620aa753a",
        "account_id": "acc_123abc",
        "acquirer_merchant_id": "AMEXMERCH001",
        "acquirer_submerchant_id": null,
        "acquirer_terminal_id": "AMEXTERM001",
        "acquirer_submerchant_address": null,
        "acquirer": "shift4_amex",
        "supported_card_entry_modes": null,
        "partial_approval_supported": null,
        "online_pin_supported": null,
        "supported_cvms": null,
        "cvms_supporting_pre_approval": null,
        "nexo_host_message_to_send": null,
        "nexo_financial_capture": null,
        "nexo_completion_exchange_policy": null,
        "nexo_cancellation_exchange": null,
        "nexo_card_data_verification": null,
        "pin_request_supported": null,
        "acquirer_device_code": "003",
        "immediate_setup_dynamic_terminal": true
    }
}
```
:::
::::

## POS Device Address Configuration (h5)

The Shift4 `h5` parameter (POS device address) is configured through the POI (Point of Interaction) location settings and linked to the configuration created above.

### Configuration Methods

You can specify the device location using either approach:

1. **Direct Location Object**: Provide address details directly in the POI create/update request
2. **Location Reference**: Reference an existing address using location\_id

:::hint{type="success"}
**Note**: Do not provide both `location` and `location_id` in the same request. Use only one method.
:::

::::CodeDrawer{title="Create POI with Address Example" isResponseExpanded="true" autoGeneratedAnchorSlug="create-poi-with-address-example" legacyHash="J2HT6JzDpyD5ruXe9oRBy"}
:::CodeblockTabsExamples
```javascript
curl --request POST \
  --url https://mgmt-api.torogateway.dev/v1/pois \
  --header 'API-Key: <KEY>' \
  --header 'content-type: application/json' \
  --data '{
    "merchant_id": "merchant_123",
    "is_active": true,
    "manufacturer_id": "device_12345",
    "label_id": "POS-001",
    "model": "Miura M20",
    "location": {
      "line_1": "123 High Street",
      "postal_code": "SW1A 1AA",
      "city": "London",
      "country_code": "GBR"
    },
    "configuration_id": "cfg_b07fa17ed2530939ae0f24"
  }'
```
:::

:::CodeblockTabsResponses
```javascript
{
    "id": "poi_21ae850d0d1047c86377e9",
    "account_id": "acc_123",
    "manufacturer_id": "device_12345",
    "label_id": "POS-001",
    "location_id": "adr_7f71db885a6e748c96f284",
    "model": "Miura M20",
    "merchant_id": "merchant_123",
    "is_active": true,
    "poi_group_id": null,
    "configuration_id": "cfg_b07fa17ed2530939ae0f24",
    "created_at": "2026-03-03T16:00:31.412145",
    "updated_at": "2026-03-03T16:00:31.412145",
    "location": {
        "id": "adr_7f71db885a6e748c96f284",
        "account_id": "acc_123abc",
        "line_1": "123 High Street",
        "line_2": null,
        "line_3": null,
        "city": "London",
        "district": null,
        "postal_code": "SW1A 1AA",
        "country_code": "GBR",
        "formatted_address": null,
        "latitude": null,
        "longitude": null,
        "created_at": "2026-03-03T16:00:31.412145",
        "updated_at": "2026-03-03T16:00:31.412145",
        "region": null,
        "country_name": null
    }
}
```
:::
::::

## Summary

Once the configuration and POI setup is complete, the Toro platform will automatically include the required Shift4 Dynamic Terminal parameters (`h5` and `h13`) in transaction requests when `immediate_setup_dynamic_terminal` is enabled. This allows new POS devices to be processed without requiring separate device setup requests to Shift4.

