Skip to main content

Troubleshooting Guide

Use this guide when a payment flow does not behave as expected on a real terminal or during local terminal testing. It helps you identify whether the issue is in your H2H or C2C runtime flow and choose the right recovery action.
This page focuses on operational troubleshooting for SDK and terminal runtime issues. For request validation, authentication, and simulation-specific API errors, see Errors & Simulations.

Before you troubleshoot

Confirm these basics before you retry a payment:
  • Identify your connection mode: H2H or C2C
  • Confirm whether you are using simulation or a real terminal
  • Verify the terminal shows Online, Connected, or Ready
  • Verify the terminal_id, IP address, client key, and environment are correct
  • Check that your terminal, mobile device, and Gateway service are on the expected network
When the payment outcome is unclear, avoid immediately starting a second payment. First confirm whether the original transaction completed, was canceled, or needs to be voided.

Troubleshooting matrix

Use this table to choose the next action quickly.

H2H scenarios

What this usually means: The Terminal API accepted the request, but the terminal is not reachable through the SDK or gateway layer.Check these items:
  • Confirm the terminal appears connected or ready in your app or Gateway
  • Verify the terminal is registered with the correct terminal_id
  • Make sure the terminal and your app can reach each other on the network
  • Confirm you are using the correct environment for the terminal registration
Next action:
  • Restart the terminal connection if the device appears offline
  • Retry the payment only after the terminal returns to a healthy state
What this usually means: The terminal may have completed the payment, but your app or callback handler did not receive the final state.Check these items:
  • Query the latest Payment Session status
  • Review webhook or callback logs
  • Verify the callback URL is reachable and returns HTTP 200
  • Check for intermittent network issues between the terminal, app, and backend
Next action:
  • Call GET /v1/terminal/sessions/{id} to confirm the latest authoritative state
  • Update your order state from the latest session result instead of creating a new payment immediately
This recovery flow is especially important for BRI terminals.
What this usually means: The terminal may have printed a receipt before your integration received the final transaction result.Next action:
  • Call POST /v1/terminal/sessions/{id}/retry
  • Let the app verify the current transaction status and redo the payment only if the original transaction is incomplete
Use this when:
  • The terminal printed a receipt
  • Your app or backend never received the final callback
  • You need the terminal side to verify whether the payment really completed
What this usually means: The payment may be complete, but webhook delivery to your backend failed or was delayed.Check these items:
  • Webhook endpoint availability
  • Server logs and firewall configuration
  • Whether the webhook handler returns HTTP 200
Next action:
  • Query GET /v1/terminal/sessions/{id} to retrieve the latest status
  • Reconcile the order from the Payment Session status before you consider a retry

C2C scenarios

What this usually means: Your app did not receive a timely response from the terminal or Gateway, but the terminal may still be processing the transaction.Next action:
  • Cancel the transaction on the terminal if it has not completed
  • If the payment already completed, void the transaction and redo it
Do not immediately resend the same payment request without confirming whether the original transaction completed on the terminal.
What this usually means: The terminal completed a payment or receipt action, but your app did not get the response back from the C2C flow.Check these items:
  • Confirm whether the terminal is still showing the transaction summary or detail screen
  • Confirm whether the operator already dismissed the transaction result on the terminal
Next action:
  • Make sure the transaction summary or detail screen on the terminal is already closed
  • If the transaction already completed and you need to reverse it, void the transaction and redo it
What this usually means: The SDK cannot reach the local Gateway service or the configured terminal device.Check these items:
  • Verify the Gateway service is running
  • Confirm the configured port is 8189
  • Verify the terminal IP address is correct
  • Make sure your app and Gateway are on the same reachable network
Next action:
  • Fix the local connectivity issue first
  • Retry terminal commands only after the Gateway is reachable again
What this usually means: The SDK is initialized with the wrong CLIENT_KEY, the configured terminal does not match, or no default device is set.Next action:
  • Re-initialize the SDK with the correct CLIENT_KEY
  • Verify the configured terminal device uses the correct terminal ID and IP address
  • Set or pass the intended terminal device before sending the next command

Recovery actions

Use the recovery action that matches the current state of the transaction:
For H2H, treat the Payment Session as the source of truth before you initiate another payment. For C2C, confirm the terminal state first so you do not create duplicate customer-facing actions.

Errors & Simulations

Review API-side errors, simulation amounts, and real-terminal testing guidance.

Gateway App Configuration

Check device status colors, IP address setup, and Gateway connectivity.

Terminal H2H iOS SDK

Review H2H setup details and platform-specific recovery options.

Terminal C2C iOS SDK

Review C2C SDK setup details and local Gateway communication guidance.