Stores and terminals
Before you can take a payment, Boundless needs to know where it is taken — which store, and which device in that store. You register these once, using your own identifiers, and then name them on every payment.
Your business
└── Store "Orchard Road branch" → you get back a store id
└── Terminal "Counter 1" → you get back a terminal id
The identifiers Boundless returns are what you use everywhere else. You never need the acquirer's own device numbers — the link between your terminal and the physical Pine Labs device is set up with Boundless during onboarding.
Register a store
curl https://api-live.kcpboundless.com/api/merchants/{merchantExternalId}/stores \
-H "X-API-Key: bndl_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Orchard Road branch",
"addressLine1": "252 Orchard Road",
"city": "Singapore",
"postalCode": "238905",
"country": "SG"
}'
The response includes the store's externalId — keep it; it is how you address the store from now
on.
Optional store details
Beyond the address, a store can carry details that other parts of the platform read:
| Field | Meaning |
|---|---|
country | Two-letter ISO 3166-1 code (SG, KR, …). Forgiving on input (sg works), stored uppercase; anything that is not a country code is rejected rather than saved. |
timezone | IANA zone id, for example Asia/Singapore. This decides which calendar day the store's payments settle under, so it must be a real zone — invalid values are rejected. |
defaultCurrency | ISO 4217 code from the platform's supported currencies. Pre-fills payment creation for this store. |
mcc | Merchant category code — exactly 4 digits, for example 5812. |
metadata | A free-form JSON object for your own details (contact person, opening hours, …). Up to 50 entries with keys up to 100 characters; values are stored as sent and never interpreted. |