Terminal Setup

Completing the PCE Terminal setup gives you a registered, configured terminal device ready to process card-present payments — connected to your merchant account and authenticated through the PCE Terminal API.


Before You Begin

RequirementDetailsWhere to get it
Active PCE Merchant AccountThe merchant must be fully onboarded, underwritten, and approved on PCE before a terminal device can be ordered or activated.PCE Account Management team
Partner AccessTerminal device ordering is initiated through your Partner, who submits the Equipment Order Form on your behalf.Your assigned PCE Partner
Consumer Key and Consumer SecretRequired to obtain a JWT bearer token for Terminal API authentication.PCE Account Management team
HTTPS ConnectionThe terminal device requires a stable internet connection — Wi-Fi or Ethernet — for real-time authorization.Your network environment

Integration Overview

Terminal setup follows six sequential steps. Complete each step before proceeding to the next.

  1. Onboard your merchant account — Complete merchant onboarding and receive account approval.
  2. Order your terminal device — Submit a device order through your Partner or directly from Priority.
  3. Configure your terminal — Priority builds the configuration file for your terminal based on your environment (retail or restaurant).
  4. Authenticate with the Terminal API — Obtain a JWT bearer token using your Consumer Key and Consumer Secret.
  5. Verify your terminal — Confirm the device is registered and in ENABLED status via the Terminal API.
  6. Test your integration — Run end-to-end transaction tests in the sandbox environment before going live.

Step 1: Onboard Your Merchant Account

Before ordering or activating a terminal device, your merchant account must be fully onboarded and approved on PCE.

📌

Note — Terminal device ordering and activation cannot proceed until the merchant account status is Approved. Contact the PCE Account Management team to confirm account status.


Step 2: Order Your Terminal Device

Once the merchant account is approved, a terminal device can be ordered through one of two pathways:

PathwayHow it WorksWhen to Use
Order from PriorityThe merchant contacts their Partner, who submits an Equipment Order Form to the Priority team. Priority ships the device and builds the configuration file.Preferred pathway — Priority manages the full setup.
Order from a SupplierThe Partner orders the terminal from a third-party vendor and submits a file build request to Priority for configuration.Use when sourcing hardware independently from a preferred supplier.

Order process:

  1. The merchant contacts their Partner to request a terminal device.
  2. The Partner submits an Equipment Order Form to the Priority team.
  3. The Priority team reviews and approves the order.
  4. The terminal is shipped to the designated delivery address.

Once the order is approved, Priority configures the terminal's encryption keys, payment applications, and connection settings before shipment. You do not need to configure these manually.


Step 3: Configure Your Terminal

Terminal devices are configured by Priority during the file build process. The configuration is based on your business environment:

EnvironmentConfigurationNotes
RetailStandard card-present configuration. Supports EMV, NFC, and magnetic stripe.Default configuration for most merchants.
RestaurantIncludes tip collection support at the point of sale.Requires restaurant-specific file build. Contact PCE Account Management to request this configuration.
📌

Note — Tip collection must be enabled during the file build process. It cannot be activated after the terminal has been configured and shipped. Confirm your environment type with the PCE Account Management team before submitting the order.


Step 4: Authenticate with the Terminal API

All PCE Terminal API endpoints require a valid JWT bearer token in the Authorization header. Obtain your token using your Consumer Key and Consumer Secret before making any Terminal API calls.

curl --request POST \
     --url 'https://api2.mxmerchant.com/security/v1/application/authorize' \
     --header 'content-type: application/json' \
     --data '{
       "consumerKey": "{your_consumer_key}",
       "consumerSecret": "{your_consumer_secret}"
     }'

Store the returned JWT bearer token and pass it in the Authorization header of every Terminal API request:

Authorization: Bearer {your_jwt_token}

JWT tokens expire after a set period. Implement token refresh logic in your integration to prevent authentication failures during active terminal sessions.


Step 5: Verify Your Terminal

Before processing transactions, confirm that your terminal device is registered and in ENABLED status under your merchant account.

  1. Make a GET request to /terminal/v1/merchantid/{merchantId} to retrieve all registered terminals.
{
  "records": [
    {
      "id": "TRM-001",
      "name": "Front Counter Terminal",
      "status": "Active",
      "enabled": true,
      "merchantId": "1000156763",
      "device": "MXMAPI01"
    }
  ]
}
  1. Confirm the following fields in the response before proceeding:
FieldExpected ValueAction if Incorrect
enabledtrueContact PCE Account Management to activate the device.
statusActiveContact PCE Account Management if status is not Active.
idUnique terminal IDStore this value — required for all transaction requests.

Step 6: Test Your Integration

Validate your complete terminal workflow in the sandbox environment before going live.

Sandbox environments:

EnvironmentTerminal API Base URL
Sandboxhttps://sandbox-api2.mxmerchant.com/terminal/v1/
Productionhttps://api2.mxmerchant.com/terminal/v1/

Test the following scenarios before going live:

ScenarioHow to SimulateExpected Result
Successful saleSubmit a Sale transaction with a test cardstatus: approved
Declined transactionUse a test card configured for declinestatus: declined
Transaction cancellationCancel before the customer presents their cardstatus: canceled
Polling timeoutDo not complete the transaction within 2 minutesSurface timeout error in your application
Final record retrievalCall GET /checkout/v3/payment with the replayIdFull payment object returned

Go Live Checklist

ItemHow to Verify
Merchant account approvedConfirm Approved status in the PCE dashboard.
Terminal device received and powered onDevice displays Ready on startup.
Terminal registered and enabled: trueConfirmed via GET /terminal/v1/merchantid/{merchantId}.
JWT authentication implementedBearer token obtained and passed in Authorization header.
Token refresh logic implementedIntegration handles token expiry without session interruption.
replayId generated uniquely per transactionEach transaction uses a new client-generated UUID.
devicePaymentAuditId stored on transaction creationStored immediately from Step 2 response for polling.
Polling timeout capped at 2 minutesIntegration surfaces an error if no final state is reached.
Final payment record retrieved from Checkout APIGET /checkout/v3/payment called after every final state.
All test scenarios validated in sandboxApproved, declined, canceled, and timeout flows tested.
Production API credentials in placeLive Consumer Key and Consumer Secret configured.

Troubleshooting

IssueLikely CauseAction
Terminal not appearing in API responseDevice not yet registered or activation pending.Contact the PCE Account Management team to confirm activation.
enabled: false in terminal responseDevice is inactive or decommissioned.Contact PCE Account Management to reactivate the device.
Authentication failure on Terminal APIJWT token expired or invalid credentials.Refresh the JWT token using your Consumer Key and Consumer Secret.
Transaction stuck in SENTTOTERMINALDevice is offline or not responding.Check network connectivity. Confirm the device displays Ready.
canceled status returned immediatelyTerminal rejected the request before card presentation.Verify terminalId is correct and the device is powered on and connected.
Payment record not found on Checkout APIreplayId does not match the value submitted at transaction creation.Confirm the replayId was stored immediately and passed without modification.


.readme-logo { display: none !important; }