checkValue with the later Payment request so Merchant Connect can locate the correct ZPK version.3DES clarification: In this document, 3DESmeans Triple DES encryption for PIN-block processing. It is not3DS(3-D Secure cardholder authentication).
| Item | Description |
|---|---|
| Interface | ZPK retrieval |
| Method | GET |
| Path | /g2/v1/payment/mer/{sid}/zpk?terminalID={terminalID} |
| Protocol | HTTPS + JSON response |
| Initiator | Merchant Host or approved POS integration |
| Request body | None |
| Key source | Institution-level ZMK/BDK |
| Key scope | Institution + store sid + terminal ID |
| PIN algorithm | 3DES in the current release |
| PSP call | None |
| Follow-up operation | Use checkValue in an offline card Payment request |
{sid} value represents the merchant/store identifier assigned to the target environment. It must not be hard-coded in a production integration.| Location | Field | Required | Type | Length | Description |
|---|---|---|---|---|---|
| Path | sid | Yes | String | 32 | Store identifier. It is also the store dimension of the ZPK binding. |
| Query | terminalID | Yes | String | 8 | Registered terminal identifier. It is the terminal dimension of the ZPK binding. |
{sid}.| Header | Required | Description |
|---|---|---|
Authorization | Yes | Merchant Connect signature. |
Content-Type | Yes | application/json; charset=utf-8. |
DateTime | Yes | ISO 8601 message timestamp. |
MsgID | Yes | Merchant-generated request trace identifier. |
SignType | Yes | Configured signing method, such as SHA256, SHA512, HMAC-SHA256, or HMAC-SHA512. |
KeyID | Conditional | Required when multi-level signing keys are enabled. |
Idempotency-Key | Not applicable | This GET endpoint has no request body; follow the deployment's standard GET retry and tracing policy. |
| Dimension | Scope | Description |
|---|---|---|
| Key source | Institution | BDK/ZMK is configured at institution level. |
| Store | sid | The store is resolved from the request path. |
| Terminal | terminalID | Each registered terminal has an independent ZPK. |
| Version | checkValue | Each generated ZPK version is identified by its check value. |
| Rule | Behavior |
|---|---|
| Current ZPK | The latest ZPK for a terminal remains the current key until another ZPK is retrieved. |
| Previous ZPK | When a new ZPK is generated, the previous version remains usable for one hour. |
| Version timing | Each previous key has its own one-hour window; requesting another key does not extend older versions. |
| Lookup | Payment processing uses checkValue to locate the terminal's current or still-valid previous ZPK. |
| Missing or expired version | Merchant Connect returns B0034; the terminal should retrieve a new ZPK before retrying the related PIN transaction. |
| Field path | Required on success | Type | Length | Description |
|---|---|---|---|---|
result | Yes | Object | — | Common response result container. |
result.code | Yes | String | 8 | Response code. Success is S0000; key or validation failures use the documented error code. |
result.message | Yes | String | 1024 | Human-readable response message. |
zpk | Yes on success | Object | — | ZPK result container. It is omitted on failure. |
zpk.status | Yes on success | String | 20 | Result status: Success or Failed. |
zpk.zpk | Yes on success | String | 32 | ZPK ciphertext encrypted under the institution ZMK. It is not the plaintext ZPK. |
zpk.checkValue | Yes on success | String | 6 | Six-character hexadecimal check value used to identify the ZPK version during Payment processing. |
{
"result": {
"code": "S0000",
"message": "Success"
},
"zpk": {
"status": "Success",
"zpk": "{{zpkCiphertext}}",
"checkValue": "{{checkValue}}"
}
}zpk.zpk is an encrypted ZPK ciphertext. The integration must use the approved secure key-management process to unwrap it; the plaintext ZPK must never be exposed in logs, source code, or ordinary application storage.{
"result": {
"code": "B0049",
"message": "ZMK not exist"
}
}B0034; retrieve a new ZPK and follow the approved retry policy.{
"paymentMethod": {
"type": "card",
"card": {
"pin": {
"encryptedPin": "{{encryptedPinBlock}}",
"pinEncryptMethod": "3DES",
"checkValue": "{{checkValue}}"
}
}
},
"transInitiator": {
"platform": "POS",
"paymentScenario": "inStore",
"terminalID": "{{terminalId}}"
}
}| Code | Meaning | Client action |
|---|---|---|
S0000 | ZPK retrieved successfully | Securely process the ciphertext and retain checkValue. |
C0000 | Institution not found | Check the store configuration and institution mapping. |
C0002 | Store not found | Correct the sid and do not retry unchanged. |
C0003 | Terminal not found under the requested store, including a cross-store terminal | Verify the store-terminal relationship and terminalID. |
B0001–B0004 | Group, merchant, store, or terminal status is invalid | Correct the resource status before retrying. |
B0005 | Offline/ZPK capability is not enabled | Enable the required product and configuration. |
B0049 | Institution ZMK/BDK is not configured | Configure the applicable institution key through the approved key-management process. |
B0034 | Payment checkValue is missing, unknown, or expired | Retrieve a new ZPK and retry according to the transaction retry policy. |
E0000 | System error | Follow the deployment retry and support procedure; do not log key material. |