Boarding a Merchant with Worldpay
You can board a Worldpay merchant either through the Koard Merchant Management System (MMS) UI or programmatically via the API. Koard targets Worldpay's 610 interface (TPS / Vantage) for mPOS EMV COTS.
Worldpay assigns the merchant a Merchant ID and Terminal ID out-of-band. Those two values plus mcc are all Koard needs from the merchant. The other 610 credentials (User ID, Password, Network Routing, Bank ID) are configured by Koard once per environment.
Before You Start
Worldpay provisions merchants on their side; Koard never makes a "create merchant" call. The packet you get from Worldpay for a new merchant contains:
| Provided by Worldpay | What it is |
|---|---|
| Merchant ID (MID) | up to 12 digits — Worldpay-assigned merchant identifier (610 §3 Field 42 "Card Acceptor ID Code") |
| Terminal ID (TID) | 3 digits — lane/device identifier (610 §3 Field 41) |
| Merchant Category Code | 4-digit MCC — held in the Worldpay merchant profile, not on the wire |
That's it from the merchant. The other 610 fields you may have heard about (userid, password, network_routing, bank_id) are owned by Koard and configured once per environment — never paste them into a POST /v2/terminals body.
Via the MMS
After creating the merchant account, click New Terminal and select Worldpay as the processor.
| MMS Label | Required | Notes |
|---|---|---|
| Merchant ID | Yes | Worldpay-assigned, up to 12 digits |
| Terminal ID | Yes | Worldpay-assigned, 3 digits |
| Merchant Category Code | Yes | 4-digit MCC |
| Currency | No | Defaults to USD. The 610 message has no wire currency field — currency is inferred from the MID profile on Worldpay's side. |
Once saved, assign the terminal to a location and generate merchant credentials as usual.
Via the API
Send X-Koard-apikey: {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 | Worldpay processor configuration ID |
terminal_name |
Yes | Display name for the terminal |
terminal_description |
No | Optional description |
mid |
Yes | Worldpay Merchant ID — up to 12 digits |
tid |
Yes | Worldpay Terminal ID — 3 digits |
mcc |
Yes | 4-digit MCC |
var_sheet |
No | Currently no required merchant fields — reserved for future extensions. |
Example
curl https://api.uat.koard.com/v2/terminals \
-X POST \
-H "X-Koard-apikey: $KOARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"account_id": "100200300001",
"processor_config_id": "prc_live_worldpay_us",
"terminal_name": "Front Counter iPhone",
"mid": "000038462929",
"tid": "001",
"mcc": "5812"
}'
Update Terminal — PUT /v2/terminals/{terminal_id}
Send a PUT with only the fields you want to change.
Batch & Settlement
The 610 spec describes Worldpay as "host capture" with "host settlement requirements" (610 §1.1.1). The integrator can drive batch release explicitly:
| Operation | Message | Trigger |
|---|---|---|
| Batch Inquiry | MTI 0500 / PC 920000 |
Read current batch counts and amounts (610 §2.5) |
| Batch Release | MTI 0500 / PC 930000 |
Close the current batch, "initiates the closing of the current batch by settling all transactions" (610 §2.5 line 33922) |
The spec is silent on whether Worldpay can be configured to auto-release — that would be a per-merchant boarding option not documented in the 610 reference. Koard exposes a batch_schedule on the terminal to drive Batch Release on a schedule; see Automated Batch Scheduling.
Currency & Country
The 610 base message has no wire currency field. Field 04 (Amount) is n9 cents and the spec layers on ISO 8583's "amount expressed in U.S. Dollars" (ISO 8583 §F004). Multi-currency on a USD-boarded MID is not supported by the 610 message set.
The 610 base message has no wire country field either. Country is inferred from the MID profile. For EMV transactions only, the terminal country surfaces via EMV TLV tag 9F1A inside G035 chip data; Koard builds this internally.
currency exposed at the API level defaults to USD and is reserved for future multi-currency support.
Reading the Response
A Worldpay 610 response comes back with a 21-byte TPS header prefix, the MTI, then a 2-character Bitmap Type that tells you whether the transaction was approved or declined:
| Bitmap Type | Meaning | What to look at next |
|---|---|---|
90 / 91 |
Approved | F65 auth code (offset 30, 6 chars); F37 retrieval reference (offset 22, 8 chars); F120.3 4-char card brand mnemonic (VI / MC / DI / AX) |
99 |
Declined / error | F123.1 20-char error text (offset 44); F123.2 3-char response code (offset 64) |
The full canonical response-code list is in Appendix A of the Worldpay 610 Interface Reference Guide.
Express vs 610 vs RAFT
Worldpay offers three integration surfaces. Koard targets 610 for mPOS EMV COTS because it's the only interface in the spec that exposes device classes 6 — SoftPOS Device and 9 — MPOS explicitly in fields F25 and F107.
| Interface | What it is | Koard support |
|---|---|---|
| 610 | Host-capture controller message set, ISO 8583-derived flat positional format | Production today |
| Express | XML over HTTPS (SOAP is deprecated per the spec). Requires AccountID + AccountToken + AcceptorID + TerminalID instead of 610's credential set. |
Not currently used |
| RAFT | Worldpay's internal authorization platform — referenced in 610 messages (e.g. R997 RAFT=…) but not a separate integrator interface in the supplied spec set |
Internal — not a customer-facing option |
Gotchas
midandtidare top-level fields on the request — not insidevar_sheet. Matches every other processor on Koard.userid,password,network_routing,bank_idare configured by Koard once per environment. Don't ask the merchant for these.- The 610 wire has no currency or country field. Both are inferred from the MID. If the merchant needs multi-currency, contact Koard support — it requires Worldpay-side reconfiguration.
- MCC is not on the 610 wire either — it's held in the Worldpay merchant profile. Koard still requires it on the API for surcharge calculation and reporting.
- F22 / F25 / F107 are device-class constants (SoftPOS), set by Koard once per device class. Not configurable per merchant.
Troubleshooting
400 Bad Request on create
- Verify
mid,tid, andmccare at the top level. - Confirm
processor_config_idis a valid Worldpay config ID for your environment.
Transactions erroring with FORMAT ERROR (response code 730)
- Usually an EMV TLV issue — Worldpay's whitelist of allowed EMV tags is narrow. Capture the request body and forward to Koard support.
Transactions erroring with CALL OPER (response code 701)
- Card-side decline. Have the merchant ask the cardholder to call their bank.
Need multi-currency
- Not supported on the 610 wire as written. Requires Worldpay-side reconfiguration of the MID; contact Koard support.
Need explicit batch close
- Use
batch_scheduleon the terminal to scheduleMTI 0500 / PC 930000Batch Release on a recurring cadence, or trigger manually via the batch API.

