Boarding a Merchant with TSYS
You can board a TSYS merchant either through the Koard Merchant Management System (MMS) UI or programmatically via the API. Both paths require the same VAR sheet information provided by TSYS.
Via the MMS
After creating the merchant account, click New Terminal and select TSYS as the processor. You'll be presented with the TSYS VAR Sheet Information form.

Fill in all required fields (marked with *) using the values from the merchant's TSYS VAR sheet:
| MMS Label | Required | Notes |
|---|---|---|
| Acquirer BIN | Yes | 6-digit BIN from TSYS |
| Merchant Number / MID | Yes | 12-digit TSYS merchant number |
| Store Number | Yes | 4 digits — use 0001 for single-location merchants |
| Terminal Number | Yes | 4 digits — use 0001 for the first terminal |
| Merchant Name | Yes | DBA name as it should appear on cardholder statements |
| Merchant Location | Yes | Merchant city |
| Merchant State | Yes | Select from dropdown |
| Merchant Category Code | Yes | 4-digit MCC |
| Industry Code | Yes | See Industry Codes below |
| City Code / ZIP | Yes | 5-digit ZIP code |
| Language Indicator | Yes | See Language Indicators below |
| Time Zone Diff | Yes | See Time Zone Codes below |
| Acceptor Street Address | Yes | Physical street address |
| Acceptor Customer Service Phone | Yes | 10 digits, no formatting |
| Acceptor Phone | Yes | 10 digits, no formatting |
| Authentication Code | No | UAT only — submit to TSYS to authenticate a terminal and receive a gen_key |
| Gen Key | No | Pass this if you have previously authenticated a terminal with authentication_code |
| Currency Code | No | Defaults to 840 (USD) |
| Country Code | No | Defaults to 840 (US) |
Once saved, assign the terminal to a location and generate merchant credentials as usual.
Via the API
Send Authorization: Bearer {API_KEY} with every request. Use https://api.uat.koard.com for sandbox and https://api.koard.com for production.
Create Terminal — POST /v2/terminals
Request body
| Field | Required | Description |
|---|---|---|
account_id |
Yes | Merchant account ID |
processor_config_id |
Yes | TSYS processor configuration ID |
terminal_name |
Yes | Display name for the terminal |
terminal_description |
No | Optional description |
var_sheet |
Yes | TSYS VAR sheet object — see fields below |
Example
curl https://api.uat.koard.com/v2/terminals \
-X POST \
-H "Authorization: Bearer $KOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"account_id": "100200300001",
"processor_config_id": "prc_live_tsys_us",
"terminal_name": "Front Counter iPhone",
"var_sheet": {
"acquirer_bin": "123456",
"merchant_number": "123456789012",
"store_number": "0001",
"terminal_number": "0001",
"merchant_category_code": "5812",
"merchant_name": "Bluebird Coffee Roasters",
"merchant_location": "San Francisco",
"merchant_state": "CA",
"city_code": "94105",
"acceptor_street_address": "123 Market Street",
"industry_code": "R",
"acceptor_phone": "4155551234",
"acceptor_customer_service_phone": "4155551234"
}
}'
Update Terminal — PUT /v2/terminals/{terminal_id}
To correct or update VAR sheet fields after creation, send a PUT with a var_sheet object containing only the fields you want to change. All VAR sheet fields are optional on update.
Example
curl https://api.uat.koard.com/v2/terminals/500600700001 \
-X PUT \
-H "Authorization: Bearer $KOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"var_sheet": {
"merchant_name": "Bluebird Coffee — Mission",
"acceptor_street_address": "456 Valencia Street"
}
}'
VAR Sheet Fields
Required
| Field | Format | Description |
|---|---|---|
acquirer_bin |
6 digits | TSYS acquirer BIN — provided by TSYS for your VAR sheet |
merchant_number |
12 digits | TSYS merchant number — unique identifier for the merchant at the acquirer |
store_number |
4 digits | Store number — typically 0001 if the merchant has a single location |
terminal_number |
4 digits | Terminal number — typically 0001 for the first terminal at a store |
merchant_category_code |
4 digits | MCC for the merchant's business type (e.g. 5812 for restaurants) |
merchant_name |
string | Merchant DBA name as it should appear on cardholder statements |
merchant_location |
string | Merchant city |
merchant_state |
2 letters | US state abbreviation (e.g. CA) |
city_code |
5 digits | ZIP code (e.g. 94105) |
acceptor_street_address |
string | Physical street address of the merchant location |
industry_code |
string | See Industry Codes below |
acceptor_phone |
10 digits | Merchant phone number — digits only, no formatting |
acceptor_customer_service_phone |
10 digits | Customer-facing service phone number — digits only, no formatting |
time_zone_diff |
3 digits | TSYS time zone code — see Time Zone Codes below |
Optional
| Field | Default | Description |
|---|---|---|
currency_code |
840 |
ISO 4217 numeric currency code — 840 for USD |
country_code |
840 |
ISO 3166 numeric country code — 840 for US |
language_indicator |
00 |
2-digit language indicator — see Language Indicators below |
authentication_code |
— | UAT only. Submit this code to TSYS to authenticate a terminal and receive a gen_key in return |
gen_key |
— | The key returned after authenticating with authentication_code. Pass this on subsequent requests if you have previously authenticated a terminal |
surcharge_rate |
— | Surcharge percentage to apply automatically (e.g. 3.5 for 3.5%). Set to null to disable automatic surcharge logic. Set to 0 to never surcharge. Configured via PUT /v2/terminals/{terminal_id} |
Industry Codes
| Code | Industry Type |
|---|---|
A |
Auto Rental |
B |
Bank / Financial Institution |
D |
Direct Marketing |
H |
Hotel |
L |
Limited Amount Terminal |
O |
Oil Company / Automated Fueling System |
P |
Passenger Transport |
R |
Retail / Restaurant / Grocery |
Use R for most mPOS use cases.
Language Indicators
| Indicator | Language |
|---|---|
00 |
English |
01 |
Spanish |
02 |
Portuguese |
03 |
Reserved for Irish |
04 |
Reserved for French |
05 |
Reserved for German |
06 |
Reserved for Italian |
07 |
Reserved for Dutch |
Time Zone Codes
| Code | Time Zone |
|---|---|
705 |
Eastern (EST) |
706 |
Central (CST) |
707 |
Mountain (MST) |
708 |
Pacific (PST) |
Gotchas
merchant_numbermust be exactly 12 digits. TSYS will reject shorter values. Left-pad with zeros if your MID is fewer than 12 digits.store_numberandterminal_numbermust be exactly 4 digits. Use0001, not1.city_codemust be exactly 5 digits. Left-pad with a zero for ZIP codes starting with0(e.g.02101for Boston).- Phone numbers must be exactly 10 digits. No dashes, spaces, or country codes — strip all formatting before submitting.
merchant_nameappears on cardholder statements. Make sure it matches the merchant's registered DBA name — discrepancies can trigger disputes.industry_codeaffects transaction routing. Using the wrong code can cause authorization failures or incorrect interchange rates.acquirer_binis VAR sheet-level, not per-merchant. All merchants under the same TSYS VAR sheet share the same BIN. Do not confuse this with the merchant number.
Troubleshooting
400 Bad Request on create
- Check that all required VAR sheet fields are present.
- Verify
merchant_numberis 12 digits,store_number/terminal_numberare 4 digits,city_codeis 5 digits, and phone numbers are 10 digits. - Confirm
processor_config_idis a valid TSYS config ID for your environment.
Transactions erroring after boarding
- A VAR sheet field is likely incorrect. The most common culprits are
acquirer_bin,merchant_number,store_number, andterminal_number— verify each matches exactly what TSYS has on file, including leading zeros. - Check
industry_codeis appropriate for the merchant's transaction type — an incorrect code can cause authorization failures. - If there is no open batch in our system for the terminal, transactions will error. Ensure a batch has been opened before processing payments.
Wrong merchant name on statements
- Use
PUT /v2/terminals/{terminal_id}to updatemerchant_namein thevar_sheet. Changes take effect on the next transaction.
