All merchant REST requests and webhook signature verification share the same HMAC model.
Updated: 2026-08-05
| Header | Required | Notes | Example |
|---|---|---|---|
API-KEY | Yes | Merchant apiKey | ak_live_xxx |
API-TIMESTAMP | Yes | Unix epoch milliseconds | 1690000000000 |
API-SIGNATURE | Yes | Algorithm below | a1b2c3... |
Content-Type | Required for POST | application/json |
POST message = compactJson(body) + "&" + timestampMillis
GET message = sortedDecodedQueryPairs + "&" + timestampMillis
signature = HEX_LOWER( HMAC_SHA256( key = apiSecret(UTF-8), message ) )key=value pairs with &, then append ×tampMillis. Do not percent-encode values again when signing. Only a GET with no query parameters uses an empty signing body. Avoid duplicate parameter names.GET /v1/virtual-account/sub/get?virtualAccountId=12345 signs virtualAccountId=12345&<timestampMillis>.compactJson: JSON serialization without insignificant whitespace; field order must match the body bytes you actually send.API-SIGNATURE with the same algorithm. See Webhooks Overview.