Terminals, Locations, and Routing

Payments use the authenticated merchant's active location. That location links to a boarded terminal, which identifies the processor configuration and processor credentials used for the payment.

Keep the Identifiers Distinct

Identifier Meaning
account_id The merchant account that owns the configuration and payment.
processor_config_id A processor configuration assigned to the account in this environment.
terminal_id The Koard ID returned when boarding a terminal.
location_id The Koard location ID selected in the SDK.
MID/TID and other VAR-sheet identifiers Processor-assigned routing credentials. Preserve their leading zeros.

The physical phone is the reader device. A boarded Koard terminal contains processor routing data; an Apple reader terminal profile controls reader behavior. These are different concepts.

Provision in Order

  1. Create the merchant account and select an available processor configuration.
  2. Board a terminal with POST /v2/terminals, that merchant's account_id, and the processor's required fields. Store the returned terminal_id.
  3. Create a location with POST /v1/locations on the same merchant and link the terminal using terminal_id. Store the returned location id.
  4. Issue merchant SDK credentials, authenticate in the app, and load that merchant's locations.
  5. Let the operator choose the active location in settings. Pass its location ID to the SDK, then complete platform readiness.

The Merchant Setup via API provides the complete request sequence. Use the processor boarding contract and Locations API reference for the field details.

Active Location in App Settings

Include an active-location selector in your app's settings and show the selection on the payment screen. Validate that the location belongs to the authenticated merchant and has a usable linked terminal before taking payments.

  • On iOS, select it with setActiveLocationID(location.id), then follow the linking and reader preparation flow.
  • On Android, use the suspending setActiveLocation(location.id), complete enrollment when needed, and check readiness before starting a reader session.

Use the full iOS or Android implementation. Do not replace a location ID with a terminal ID, silently choose the first location, or reuse another merchant's saved selection.

Changes and Merchant Switching

To change a location's linked terminal, update terminal_id through PUT /v1/locations/{location_id}. To edit a boarded terminal, follow Terminal Updates and the processor's guide.

After a routing change, reload the location/configuration and complete the SDK readiness flow before accepting another payment. Block new payments during the change.

After switching merchants, clear the app's selected location, authenticate the new merchant, and reload its locations. Android enrollment has a separate lifecycle: changing to a different merchant requires the documented unenrollment flow before enrolling again. See Android SDK Lifecycle.

Verify Routing

Before the first test payment, confirm the environment, merchant, location, linked terminal, and processor configuration in the dashboard. After the payment, reconcile its status, amount, and identifiers with the app's order. See Outcome Recovery if the response is missing.