Webhook (Notification) Service
The Webhook (Notification) Service allows the merchant's server to receive real-time notifications whenever a transaction status changes.
- Notifications are sent only for successful transactions. (Transaction rejections are not notified).
- While HTTP is supported, we strongly recommend using HTTPS for security.
You can register your Webhook URL and select which services to receive notifications for in the Merchant Admin Console.
Retry Policy
If the merchant server responds with a success code after receiving the webhook, no further notifications are sent. If the initial notification fails (e.g., network error, non-200 response), the system will retry up to 10 times at 3-minute intervals.
[Image of webhook retry policy flowchart]
For transactions that failed all 10 automatic retries, you can manually request a resend via the Merchant Admin > Transaction Management > Notification Inquiry menu.
Response Requirement
Your server must respond with the following JSON format to acknowledge receipt.
{
// If processed successfully
"resCd": "0000",
"resMsg": "Success"
// If processing failed
"resCd": "5001",
"resMsg": "Processing Failed"
}
Firewall Policy
Merchants using the Webhook service must configure their firewall to allow inbound traffic from the following IP addresses.
| Environment | Source IP | Description |
|---|---|---|
| Production | 203.233.72.150 | INBOUND |
| 203.233.72.151 | INBOUND | |
| 61.33.211.180 | INBOUND | |
| Development | 61.33.205.151 | INBOUND |
Event Types
| Code | Event Name | Description |
|---|---|---|
| 10 | Approval | Notification for successful payments (Credit Card, Bank Transfer, Mobile, etc.) |
| 20 | Change | Notification for cancellations or refunds of approved transactions |
| 30 | Deposit | Notification for Virtual Account deposits |
| 31 | Deposit Cancel | Notification when a deposit is cancelled due to a bank error after notification |
| 40 | Escrow | Notification for Escrow status changes |
| 50 | Refund Complete | Notification for Settlement Refund (D+1) completion |
| 51 | Transfer Failed | Notification when a Real-time Refund fails due to a bank error |
| 70 | UnionPay | Notification for UnionPay payment confirmation |
Integration Guide
HTTP Header
The webhook is sent as a POST request with the following header.
POST https://{Merchant Webhook URL}
Content-type: application/json; charset=utf-8
HTTP Body
Common Parameters
| Field Name | Type | Length | Required | Description |
|---|---|---|---|---|
| resCd | String | 4Byte | ✅ | Response Code |
| resMsg | String | 1000Byte | ✅ | Response Message |
| mallId | String | 8Byte | ✅ | Merchant ID assigned by KICC |
| notiType | String | 2Byte | ✅ | Event Type Code (See Event Types table) |
| pgCno | String | 20Byte | ✅ | PG Transaction ID (Deposit Transaction ID for Virtual Account Deposits) |
| shopOrderNo | String | 40Byte | ✅ | Merchant Order No. |
Specific Parameters
The following parameters are included depending on the notiType and payment method.
| Field Name | Type | Length | Description |
|---|---|---|---|
| amount | String | 12byte | Total Amount |
| approvalNo | String | 20byte | Approval Number |
| transactionDate | String | 14byte | Transaction Date/Time |
| pointAuthNo | String | 15byte | Point Approval Number |
| pointTransactionDate | String | 14byte | Point Approval Date/Time |
| cardNo | String | 40byte | Card Number |
| issuerCode | String | 3byte | Issuer Code (See Card Codes) |
| issuerName | String | 20byte | Issuer Name |
| acquirerCode | String | 3byte | Acquirer Code (See Card Codes) |
| acquirerName | String | 20byte | Acquirer Name |
| installmentMonth | String | 2byte | Installment Month |
| freeInstallmentTypeCode | String | 2byte | Interest-free Type (Interest: "00", Merchant-paid: "02", Card-paid: "03") |
| bankCode | String | 3byte | Bank Code |
| bankName | String | 20byte | Bank Name |
| accountNo | String | 20byte | Account Number |
| depositName | String | 10byte | Depositor Name |
| expiryDate | String | 14byte | Virtual Account Expiration Date |
| cashUsed | String | 1byte | Cash Receipt Issued (1: Yes, 0: No) |
| cashResCd | String | 4byte | Cash Receipt Result Code |
| cashResMsg | String | 64byte | Cash Receipt Result Message |
| cashAuthNo | String | 20byte | Cash Receipt Approval Number |
| cashTranDate | String | 14byte | Cash Receipt Date/Time |
| cashIssueType | String | 2byte | Cash Receipt Issue Purpose |
| cashAuthType | String | 1byte | Cash Receipt Auth Type |
| cashAuthValue | String | 20byte | Cash Receipt Identity Value |
| cashAmount | String | 12byte | Cash Receipt Total Amount |
| cashTaxAmount | String | 12byte | Cash Receipt Taxable Amount |
| cashFreeAmount | String | 12byte | Cash Receipt Tax-free Amount |
| cashVatAmount | String | 12byte | Cash Receipt VAT Amount |
| authId | String | 20byte | PhoneID |
| billId | String | 20byte | Bill ID |
| mobileNo | String | 20byte | Mobile Number |
| mobileAnsimUsed | String | 1byte | Safe Payment Used (Y/N) |
| cpCode | String | 4byte | Service Provider Code (See CP Codes) |
| pntAmount | String | 9byte | Used Points |
| remainPoint | String | 9byte | Remaining Points |
| payPnt | String | 9byte | Discount/Generated Points |
| accruePnt | String | 9byte | Accumulated Points |
| deductPnt | String | 9byte | Total Deducted Points |
| paybackPnt | String | 9byte | Payback Points |
| mallName | String | 20byte | Merchant Name |
| escrowUsed | String | 1byte | Escrow Used (Y/N) |
| escrowTypeCode | String | 1byte | Escrow Type ("K") |
| complexUsed | String | 1byte | Complex Payment Used (Y/N) |
| cancelAcqDate | String | 14byte | Capture Cancel Date/Time |
| cancelDate | String | 14byte | Cancel Date/Time |
| joinNo | String | 15byte | Merchant Number |
| statusCode | String | 4byte | Transaction Status Code (See Status Codes) |
| statusMessage | String | 100byte | Status Message |
| vanTid | String | 15byte | VAN TID |
| vanSno | String | 12byte | VAN Serial Number |
| payMethodTypeCode | String | 2byte | Payment Method Code (See Codes) |
| tlfSno | String | 20byte | Virtual Account Transaction No. |
| certNo | String | 20byte | ARS Auth Number |
| partCancelUsed | String | 1byte | Partial Cancel Available (Y/N) |
| membGubun | String | 1byte | Merchant Type |
| cardGubun | String | 1byte | Card Type (Credit/Check) |
| cardClass | String | 1byte | Employee Card Type |
| cardBizGubun | String | 1byte | Card Owner Type (Personal/Corporate) |
| couponFlag | String | 1byte | Coupon/Instant Discount Used (Y/N) |
| cponAuthNo | String | 20byte | Coupon Approval Number |
| cponTranDate | String | 14byte | Coupon Approval Date/Time |
| remainCpon | String | 9byte | Coupon Balance |
| couponAmount | String | 9byte | Coupon Discount Amount |
| cancelAmount | String | 12byte | Partial Cancel/Refund Amount |
| cancelCardAmount | String | 12byte | Cancelled Card Amount |
| cancelCouponAmount | String | 12byte | Cancelled Coupon Amount |
| cancelPgCno | String | 20byte | Cancel/Refund PG Transaction ID |
| cardnoHash | String | 44byte | Card Number Hash |
| vcntType | String | 1byte | Virtual Account Type |
| customerName | String | 20byte | Customer Name |
| vpCardcode | String | 15byte | VP Card Code |
| taxFlg | String | 4byte | Complex Tax Flag ("TG01") |
| taxAmount | String | 12byte | Taxable Amount |
| freeAmount | String | 12byte | Tax-free Amount |
| vatAmount | String | 12byte | VAT Amount |
| cponTerms | String | 12byte | Discount Standard Amount |
| cancelRemainAmount | String | 12byte | Remaining Amount after Cancel |
| shopValue1 | String | 1000byte | Custom Field 1 |
| shopValue2 | String | 100byte | Custom Field 2 |
| shopValue3 | String | 100byte | Custom Field 3 |
| shopValue4 | String | 100byte | Custom Field 4 |
| shopValue5 | String | 100byte | Custom Field 5 |
| shopValue6 | String | 100byte | Custom Field 6 |
| customerId | String | 20byte | Customer ID |
| cardAmount | String | 12byte | Credit Card Approval Amount |
| cancelPointAmount | String | 12byte | Cancelled Point Amount |
| depositPgCno | String | 20byte | (Refund) Virtual Account Deposit Transaction ID |
| depoBkcd | String | 3Byte | Deposit Bank Code |
| depoBknm | String | 20Byte | Deposit Bank Name |
| dayRemPnt | String | 9byte | Daily Remaining Points |
| monthRemPnt | String | 9byte | Monthly Remaining Points |
| dayRemCnt | String | 9byte | Daily Remaining Limit Count |
| remainAmount | String | 12byte | Remaining Prepaid Balance |
| multiCardAmount | String | 12byte | Multi-pay Card Amount (Approve/Cancel) |
| multiPntAmount | String | 12byte | Multi-pay Point Amount (Approve/Cancel) |
| multiCponAmount | String | 12byte | Multi-pay Coupon Amount (Approve/Cancel) |
| subCardCd | String | 3byte | Sub Card Code |
| cardMaskNo | String | 40byte | Masked Card Number |
| oilMgrCost | String | 9byte | Fuel Unit Price |
| oilMgrVolume | String | 9byte | Fuel Volume |
| oilPayType | String | 1byte | Fuel Pre-payment Method |
| mobileCd | String | 3byte | Mobile Carrier Code |
| basketUsed | String | 1Byte | Basket (Split Settlement) Used (Y/N) |
| bkResCnt | String | 2Byte | Basket Item Count (Max 20) |
| productNo[1-20] | String | 40Byte | Product Order No |
| productPgCno[1-20] | String | 20Byte | Product PG Transaction ID |
| sellerId[1-20] | String | 40Byte | Seller ID |
Payload Examples by Event Type
- Approval (10)
- Change/Cancel (20)
- Deposit (30)
- Deposit Cancel (31)
- Escrow (40)
- Refund Complete (50)
- Transfer Failed (51)
- UnionPay (70)
- Split Settlement
Same parameters as the general payment approval response.
{
"resCd": "0000",
"resMsg": "Success",
"mallId": "{Merchant ID}",
"notiType": "10",
"pgCno": "{PG Transaction ID}",
"shopOrderNo": "{Merchant Order No}",
"amount": "1200",
"approvalNo": "01230000",
"transactionDate": "20251105092752",
"cardNo": "49000000****050*",
"issuerCode": "027",
"issuerName": "Hyundai Visa Personal",
"acquirerCode": "027",
"acquirerName": "Hyundai Card",
"freeInstallmentTypeCode": "00",
"installmentMonth": "00",
"pntAmount": "0",
"escrowUsed": "N",
"complexUsed": "N",
"statusCode": "TS03",
"statusMessage": "Capture Requested",
"vanTid": "7574638",
"vanSno": "807627429171",
"payMethodTypeCode": "11",
"partCancelUsed": "Y",
"membGubun": "2",
"cardGubun": "N",
"cardBizGubun": "P",
"couponFlag": "N",
"cardnoHash": "Gy8kMh3KAAAAAT0G9u74AAAAAIUXqVcMmPy0UWAAAAA",
"customerName": "John Doe",
"customerId": "test",
"basketUsed": "N"
// ...
}
Notification for cancellation or real-time refund. Same parameters as the cancel response.
{
"resCd": "0000",
"resMsg": "Cancellation Successful",
"mallId": "{Merchant ID}",
"notiType": "20",
"pgCno": "{Original PG Transaction ID}",
"shopOrderNo": "{Merchant Order No}",
"amount": "44792",
"transactionDate": "20251105092752",
"remainPoint": "0",
"accruePnt": "0",
"escrowUsed": "N",
"cancelDate": "20251105092752",
"statusCode": "TS02",
"statusMessage": "Approval Cancelled",
"payMethodTypeCode": "11",
"cancelAmount": "44792",
"cancelCardAmount": "44792",
"cancelCouponAmount": "0",
"cancelPgCno": "{Cancel/Refund PG Transaction ID}",
"dayRemPnt": "0",
"monthRemPnt": "0",
"dayRemCnt": "0",
"basketUsed": "N"
// ...
}
Notification for Virtual Account deposits. Includes Cash Receipt info if issued.
{
"resCd": "0000",
"resMsg": "Deposit Complete",
"notiType": "30",
"mallId": "{Merchant ID}",
"pgCno": "{Deposit Transaction ID}",
"amount": "15000",
"shopOrderNo": "{Merchant Order No}",
"transactionDate": "20251105092752",
"bankCode": "11",
"bankName": "Nonghyup Bank",
"accountNo": "79013419904403",
"depositName": "Tester",
"escrowUsed": "N",
"payMethodTypeCode": "22",
"cashUsed": "1",
"cashResCd": "0000",
"cashResMsg": "Normal",
"cashTranDate": "20251105092752",
"cashAuthNo": "128170000",
"cashIssueType": "03",
"cashAuthType": "3",
"cashAuthValue": "0100001234",
"statusCode": "",
"statusMessage": "",
"tlfSno": "{PG Transaction No}",
"accountType": "V",
"customerId": "",
"customerName": "John Doe",
"depoBkcd": "090",
"depoBknm": "Kakao Bank"
// ...
}
Notification when a deposit is cancelled by the bank due to an error.
Merchants using Virtual Accounts MUST handle this webhook event.
{
"resCd": "0000",
"resMsg": "Deposit Cancelled",
"notiType": "31",
"mallId": "{Merchant ID}",
"pgCno": "{Deposit Transaction ID}",
"amount": "1004",
"shopOrderNo": "{Merchant Order No}",
"transactionDate": "20251023153126",
"bankCode": "20",
"bankName": "Woori Bank",
"accountNo": "T1619272118508",
"depositName": "test",
"escrowUsed": "Y",
"payMethodTypeCode": "22",
"statusCode": "",
"statusMessage": "",
"tlfSno": "{PG Transaction No}",
"accountType": "V",
"customerId": "USER_1761200487932",
"customerName": "TESTER",
"depoBkcd": "020",
"depoBknm": "Woori Bank"
// ...
}
Notification for Escrow status changes (Deposit, Refund, Confirm, Reject).
{
"resCd": "0000",
"resMsg": "Deposit Complete",
"notiType": "40",
"mallId": "{Merchant ID}",
"pgCno": "{Deposit Transaction ID}",
"amount": "50000",
"shopOrderNo": "{Merchant Order No}",
"transactionDate": "20251105092752",
"bankCode": "04",
"bankName": "Kookmin Bank",
"accountNo": "T9629078365992",
"depositName": "Tester",
"escrowUsed": "Y",
"payMethodTypeCode": "22",
"cashUsed": "1",
"cashResCd": "0000",
"cashResMsg": "Normal",
"cashTranDate": "20251105092752",
"cashAuthNo": "588530253",
"cashIssueType": "03",
"cashAuthType": "3",
"cashAuthValue": "0100001234",
"statusCode": "ES04",
"statusMessage": "Deposit Complete",
"tlfSno": "{PG Transaction No}",
"accountType": "V",
"customerId": "USER_1760669794164",
"customerName": "John Doe",
"depoBkcd": "020",
"depoBknm": "Woori Bank"
// ...
}
Notification for Settlement Refund (D+1) completion.
{
"resCd": "0000",
"resMsg": "Success",
"notiType": "50",
"mallId": "{Merchant ID}",
"pgCno": "{Original PG Transaction ID}",
"shopOrderNo": "{Merchant Order No}",
"transactionDate": "20251105092752",
"escrowUsed": "N",
"statusCode": "RF02",
"statusMessage": "Refund Complete",
"payMethodTypeCode": "22",
"cancelPgCno": "{Refund PG Transaction ID}",
"depositPgCno": "{Deposit Transaction ID}",
"basketUsed": "N"
}
Notification when a Real-time Refund fails due to bank errors.
If you receive this notification, you MUST retry the Real-time Refund or Payment Order.
{
"resCd": "5413",
"resMsg": "Receiver Error",
"notiType": "51",
"mallId": "{Merchant ID}",
"pgCno": "{PG Transaction ID}",
"shopOrderNo": "{Merchant Order No}",
"bankCode": "004",
"bankName": "Kookmin Bank",
"accountNo": "11002235458445"
}
Notification for UnionPay payment confirmation.
{
"resCd": "0000",
"resMsg": "Success",
"notiType": "70",
"mallId": "{Merchant ID}",
"payMethodTypeCode": "11",
"pgCno": "{PG Transaction ID}",
"shopOrderNo": "{Merchant Order No}",
"kvp_pgid": "TEST11",
"issuerCode": "081",
"amount": "50000"
}
Example of additional fields when basketUsed is "Y".
{
// ...
"basketUsed": "Y",
"bkResCnt": "3",
"productNo1": "P2025102017609368949211",
"sellerId1": "EBC100000",
"productPgCno1": "25102014082410899694",
"productNo2": "P2025102017609368949212",
"sellerId2": "EBC100001",
"productPgCno2": "25102014082410899695",
"productNo3": "P2025102017609368949213",
"sellerId3": "EBC100002",
"productPgCno3": "25102014082410899696"
}