# Purchase API - Create Payment Intent ## 1. API Overview ### Purpose [context] This API initializes a payment intent to start the payment process. It supports various payment methods including card, bank transfer, installment, and e-wallet. You can choose an integration method that suits your environment: either a redirect method using the EBP-provided payment URL (`paymentUrl`) or a direct integration method using the PG response data (`pgResponse`). After creating a payment intent, the user proceeds with the payment directly through the PG depending on the integration method, and EBP then receives the result to send a Webhook or the merchant calls the Payment Creation API to finalize the transaction. [/context] ### Details [table:key-value] | Item | Value | | :-------------- | :-------------------- | | **API Name** | Create Payment Intent | | **API Path** | /api/v2/payment-intents | | **API ID** | EBP_API_224 | | **HTTP Method** | [badge:POST,blue,lg] | | **Region** | [badge:Global,green-subtle,lg] | [/table] @@include:billing-account-creation.md@@ > After creating a payment intent, if the user completes authentication via the payment method, EBP sends a Webhook to the store to notify the result. > Detailed documentation for the Webhook can be found at the link below. > [**Go to Payment Authorized Webhook**](/docs/webhooks/payment-authorized) ## 2. Request Specification ### 2.1 Request Header @@include:common-headers-link.md@@ | depth | Field | Details & Description | |:------|:------------------|:-----------------------------------------------------------------------| | 0 | X-Idempotency-Key | [type:string] [req:Yes] [desc:Idempotency key to prevent duplicate processing for identical payment intent creation requests.] | ### 2.2 Request Data Schema | depth | Field | Details & Description | |:------|:----------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 0 | userNo | [type:string] [req:Yes] [desc:User identification number] | | 0 | userName | [type:string] [req:Conditional] [desc:Buyer's name. Required when using Tamara payment method.] | | 0 | email | [type:string] [req:Conditional] [desc:Buyer's email address. Required when using Tamara payment method.] | | 0 | phone | [type:string] [req:Optional] [desc:Buyer's contact phone number] | | 0 | paymentMethod | [type:string] [req:Yes] [desc:Payment method code [modal:appendix/payment-method-codes#payment-methods]][eg:CARD, INSTALLMENT, DIRECT_DEBIT, BANK_TRANSFER ... etc] | | 0 | purchaseChannel | [type:string] [req:Yes] [desc:Sales channel classification] [eg:WEB, APP] | | 0 | merchantId | [type:string] [req:Optional] [desc:Merchant ID] | | 0 | successUrl | [type:string] [req:Yes] [desc:URL to redirect after successful payment] | | 0 | failureUrl | [type:string] [req:Yes] [desc:URL to redirect if payment fails] | | 0 | totalAmount | [type:number] [req:Yes] [desc:The final total payment amount.] | | 0 | subtotalAmount | [type:number] [req:Yes] [desc:Amount before discounts.] | | 0 | totalDiscountAmount | [type:number] [req:Yes] [desc:Total discount amount.] | | 0 | discountAmount | [type:number] [req:Yes] [desc:Seller discount amount.] | | 0 | lgeDiscountAmount | [type:number] [req:Yes] [desc:LGE discount amount.] | | 0 | nonCancelableAmount | [type:number] [req:Yes] [desc:Non-cancelable amount.] | | 0 | itemName | [type:string] [req:Yes] [desc:Representative product name to be displayed on the payment screen.] | | 0 | useSavedPaymentMethod | [type:boolean] [req:Optional] [desc:Whether to use a saved payment method. If set to true, the payment proceeds using previously saved information.] [eg:true/false] [def: false] | | 0 | savePaymentMethod | [type:boolean] [req:Optional] [desc:Whether to save the payment method. If set to true, the payment method is securely saved after a successful payment, and the saved information will be used for future 'Create Payment' requests.] [eg:true/false] [def: false] | | 0 | autoCapture | [type:boolean] [req:Optional] [desc:Whether to automatically capture the payment. If set to true, capture is performed immediately after authorization. If false, a separate capture API call is required later.] [eg:true/false] [def: true] | | 0 | nonTaxableAmount | [type:number] [req:Optional] [desc:Tax-exempt amount] | | 0 | taxAmount | [type:number] [req:Optional] [desc:VAT amount calculated by the store] | | 0 | shippingAddress | [type:object] [req:Conditional] [desc:Shipping address information. Required when using Tabby or Tamara payment methods.] | | 1 | addressLine1 | [type:string] [req:Conditional] [desc:Basic shipping address. Required when using Tabby or Tamara payment methods.] | | 1 | addressLine2 | [type:string] [req:Optional] [desc:Detailed shipping address.] | | 1 | city | [type:string] [req:Conditional] [desc:Shipping city information. Required when using Tabby or Tamara payment methods.] | | 1 | stateOrProvince | [type:string] [req:Optional] [desc:Shipping state/province/region information.] | | 1 | postalCode | [type:string] [req:Conditional] [desc:Shipping postal code. Required when using Tabby payment method.] | | 1 | countryCode | [type:string] [req:Conditional] [desc:Shipping country code (ISO 3166-1 alpha-2). Required when using Tabby or Tamara payment methods.] | | 0 | billingAddress | [type:object] [req:Conditional] [desc:Billing address information. Required when using Tamara payment method.] | | 1 | firstName | [type:string] [req:Conditional] [desc:Recipient's first name for billing. Required when using Tamara payment method.] | | 1 | lastName | [type:string] [req:Conditional] [desc:Recipient's last name for billing. Required when using Tamara payment method.] | | 1 | phoneNumber | [type:string] [req:Conditional] [desc:Contact phone number for billing. Required when using Tamara payment method.] | | 1 | addressLine1 | [type:string] [req:Conditional] [desc:Basic billing address. Required when using Tamara payment method.] | | 1 | addressLine2 | [type:string] [req:Optional] [desc:Detailed billing address.] | | 1 | city | [type:string] [req:Conditional] [desc:Billing city information. Required when using Tamara payment method.] | | 1 | stateOrProvince | [type:string] [req:Optional] [desc:Billing state/province/region information.] | | 1 | postalCode | [type:string] [req:Optional] [desc:Billing postal code.] | | 1 | countryCode | [type:string] [req:Conditional] [desc:Billing country code (ISO 3166-1 alpha-2). Required when using Tamara payment method.] | | 0 | bankTransferSource | [type:string] [req:Conditional] [desc:Required when using Thailand Bank Transfer payment method.] [eg: mobile_banking_bay, mobile_banking_bbl, mobile_banking_kbank, mobile_banking_ktb, mobile_banking_scb] | | 0 | platformType | [type:string] [req:Conditional] [desc:Required when using Thailand Bank Transfer payment method.] [eg: IOS, ANDROID] | | 0 | installmentSource | [type:string] [req:Conditional] [desc:Required when using Thailand Installment payment method.] [eg: installment_bay, installment_kbank, ...] | | 0 | installmentTerm | [type:number] [req:Conditional] [desc:Required when using Thailand Installment payment method.] [eg: 3, 5 ...] | @@include:items.md@@ @@include:item-type.md@@ > **Installment Payment Information (installmentSource & installmentTerm)** > > When using Thailand installment payments (`INSTALLMENT`), please note the following conditions and restrictions: > - **Amount Requirements**: Only available for **total payment amounts of 2,000 THB or more**, and the **monthly installment amount (Total Amount / Terms) must be at least 500 THB**. > - **Terms by Provider**: The available `installmentTerm` (number of months) varies depending on the selected `installmentSource`. > - **installment_bay** (Krungsri Bank): `[3, 4, 6, 9, 10]` > - **installment_kbank** (Kasikorn Bank): `[3, 4, 6, 10]` > - **installment_ktc** (Krungthai Card): `[3, 4, 5, 6, 7, 8, 9, 10]` > - **installment_bbl** (Bangkok Bank): `[4, 6, 8, 9, 10]` > - **installment_first_choice** (Krungsri First Choice): `[3, 4, 6, 9, 10, 12, 18, 24, 36]` > - **installment_scb** (Siam Commercial Bank): `[3, 4, 6, 9, 10]` > - **installment_ttb** (TMBThanachart Bank): `[3, 4, 6, 10]` > - **installment_uob** (United Overseas Bank): `[3, 4, 6, 10]` > Note: > > - See examples for delivery group number (deliveryGroupNo) here[modal:modals/payment/delivery-group#delivery-group]. ### 2.3 Request Examples [tabs] [tab:Card] ```json : scrollable { "userNo": "AU1741850000100", "userName": "James Cook", "email": "james.cook@example.au", "phone": "+61-412-345-100", "shippingAddress": null, "billingAddress": null, "purchaseChannel": "WEB", "successUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/worldpay/success", "failureUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/worldpay/failure", "totalAmount": 1815, "subtotalAmount": 1815, "totalDiscountAmount": 0, "discountAmount": 0, "lgeDiscountAmount": 0, "nonCancelableAmount": 0, "nonTaxableAmount": 0, "taxAmount": 0, "itemName": "LG Gram 16\" Laptop", "savePaymentMethod": false, "items": [ { "seq": 1, "sellerNo": "SELLER-001", "itemType": "PHYSICAL", "itemId": "AU_PROD_01", "itemName": "LG Gram 16\" Laptop", "quantity": 1, "unitPrice": 1800, "netAmount": 1800, "grossAmount": 1800, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 }, { "seq": 2, "sellerNo": "SELLER-001", "itemType": "DELIVERY", "itemId": "AU_SHIP_01", "itemName": "Standard Delivery", "quantity": 1, "unitPrice": 15, "netAmount": 15, "grossAmount": 15, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 } ], "paymentMethod": "CARD", "useSavedPaymentMethod": false } ``` [tab:Paypal] ```json : scrollable { "userNo": "AU1741850000100", "userName": "James Cook", "email": "james.cook@example.au", "phone": "+61-412-345-100", "shippingAddress": null, "billingAddress": null, "purchaseChannel": "WEB", "successUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/worldpay/success", "failureUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/worldpay/failure", "totalAmount": 1800, "subtotalAmount": 1800, "totalDiscountAmount": 0, "discountAmount": 0, "lgeDiscountAmount": 0, "nonCancelableAmount": 0, "nonTaxableAmount": 0, "taxAmount": 0, "itemName": "LG Gram 16\" Laptop", "savePaymentMethod": false, "items": [ { "seq": 1, "sellerNo": "SELLER-001", "itemType": "PHYSICAL", "itemId": "AU_PROD_01", "itemName": "LG Gram 16\" Laptop", "quantity": 1, "unitPrice": 1800, "netAmount": 1800, "grossAmount": 1800, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 } ], "paymentMethod": "PAYPAL", "useSavedPaymentMethod": false } ``` [tab:Bank Transfer (Thailand)] ```json : scrollable { "userNo": "TH1741850000100", "userName": "Somchai Pak", "email": "somchai.p@example.th", "phone": "+66-81-234-1000", "shippingAddress": null, "billingAddress": null, "purchaseChannel": "WEB", "successUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/omise/success", "failureUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/omise/failure", "totalAmount": 26100, "subtotalAmount": 26100, "totalDiscountAmount": 0, "discountAmount": 0, "lgeDiscountAmount": 0, "nonCancelableAmount": 0, "nonTaxableAmount": 0, "taxAmount": 0, "itemName": "LG Nanocell 55\" TV", "savePaymentMethod": false, "items": [ { "seq": 1, "sellerNo": "SELLER-001", "itemType": "PHYSICAL", "itemId": "TH_PROD_01", "itemName": "LG Nanocell 55\" TV", "quantity": 1, "unitPrice": 25900, "netAmount": 25900, "grossAmount": 25900, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 }, { "seq": 2, "sellerNo": "SELLER-001", "itemType": "DELIVERY", "itemId": "TH_SHIP_01", "itemName": "Standard Shipping", "quantity": 1, "unitPrice": 200, "netAmount": 200, "grossAmount": 200, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 } ], "paymentMethod": "BANK_TRANSFER", "useSavedPaymentMethod": false, "bankTransferSource": "mobile_banking_bay", "platformType": "IOS" } ``` [tab:Installment (Thailand)] ```json : scrollable { "userNo": "TH1741850000100", "userName": "Somchai Pak", "email": "somchai.p@example.th", "phone": "+66-81-234-1000", "shippingAddress": null, "billingAddress": null, "purchaseChannel": "WEB", "successUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/omise/success", "failureUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/omise/failure", "totalAmount": 26100, "subtotalAmount": 26100, "totalDiscountAmount": 0, "discountAmount": 0, "lgeDiscountAmount": 0, "nonCancelableAmount": 0, "nonTaxableAmount": 0, "taxAmount": 0, "itemName": "LG Nanocell 55\" TV", "savePaymentMethod": false, "items": [ { "seq": 1, "sellerNo": "SELLER-001", "itemType": "PHYSICAL", "itemId": "TH_PROD_01", "itemName": "LG Nanocell 55\" TV", "quantity": 1, "unitPrice": 25900, "netAmount": 25900, "grossAmount": 25900, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 }, { "seq": 2, "sellerNo": "SELLER-001", "itemType": "DELIVERY", "itemId": "TH_SHIP_01", "itemName": "Standard Shipping", "quantity": 1, "unitPrice": 200, "netAmount": 200, "grossAmount": 200, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 } ], "paymentMethod": "INSTALLMENT", "useSavedPaymentMethod": false, "installmentSource": "installment_kbank", "installmentTerm": 3 } ``` [tab:Tamara (UAE)] ```json : scrollable { "userNo": "AE1741850000100", "userName": "Zayed Ahmed", "email": "zayed.a@example.ae", "phone": "+971-50-123-4100", "shippingAddress": { "addressLine1": "Burj Khalifa, Floor 122", "city": "Dubai", "state": "Dubai", "postalCode": "12210", "countryCode": "AE" }, "billingAddress": { "addressLine1": "Burj Khalifa, Floor 122", "city": "Dubai", "countryCode": "AE" }, "purchaseChannel": "WEB", "successUrl": "http://localhost:8080/pgui/v2/hpp/checkoutcom/success", "failureUrl": "http://localhost:8080/pgui/v2/hpp/checkoutcom/failure", "totalAmount": 2825, "subtotalAmount": 2825, "totalDiscountAmount": 0, "discountAmount": 0, "lgeDiscountAmount": 0, "nonCancelableAmount": 0, "nonTaxableAmount": 0, "taxAmount": 0, "itemName": "LG OLED G3 65\" TV", "savePaymentMethod": false, "items": [ { "seq": 1, "sellerNo": "SELLER-001", "itemType": "PRODUCT", "itemId": "AE_PROD_01", "itemName": "LG OLED G3 65\" TV", "quantity": 1, "unitPrice": 2800, "netAmount": 2800, "grossAmount": 2800, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 }, { "seq": 2, "sellerNo": "SELLER-001", "itemType": "SHIPPING", "itemId": "AE_SHIP_01", "itemName": "Premium Delivery", "quantity": 1, "unitPrice": 25, "netAmount": 25, "grossAmount": 25, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 } ], "paymentMethod": "TAMARA", "useSavedPaymentMethod": false } ``` [tab:Tabby (UAE)] ```json : scrollable { "userNo": "AE1741850000100", "userName": "Zayed Ahmed", "email": "zayed.a@example.ae", "phone": "+971-50-123-4100", "shippingAddress": { "addressLine1": "Burj Khalifa, Floor 122", "city": "Dubai", "state": "Dubai", "postalCode": "12210", "countryCode": "AE" }, "purchaseChannel": "WEB", "successUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/checkoutcom/success", "failureUrl": "https://devkic-pgui.nebp.lge.com/pgui/v2/hpp/checkoutcom/failure", "totalAmount": 1900, "subtotalAmount": 1900, "totalDiscountAmount": 0, "discountAmount": 0, "lgeDiscountAmount": 0, "nonCancelableAmount": 0, "nonTaxableAmount": 0, "taxAmount": 0, "itemName": "LG Gram 17\" Laptop", "savePaymentMethod": false, "items": [ { "seq": 1, "sellerNo": "SELLER-001", "itemType": "PHYSICAL", "itemId": "AE_PROD_02", "itemName": "LG Gram 17\" Laptop", "quantity": 1, "unitPrice": 1900, "netAmount": 1900, "grossAmount": 1900, "discountAmount": 0, "lgeDiscountAmount": 0, "orderDiscountAllocated": 0 } ], "paymentMethod": "TABBY", "useSavedPaymentMethod": false } ``` [tab:Google Pay] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "GOOGLEPAY", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 20.0, "subtotalAmount": 20.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "In-app Purchase", "phone": "+15551234567", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "In-app Purchase", "feeRate": 10, "quantity": 1, "unitPrice": 20, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Apple Pay] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "APPLEPAY", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 25.0, "subtotalAmount": 25.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Subscription", "phone": "+15559876543", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Subscription", "feeRate": 10, "quantity": 1, "unitPrice": 25, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Klarna] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "KLARNA", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 120.0, "subtotalAmount": 120.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Fashion Item", "phone": "+46701234567", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Fashion Item", "feeRate": 10, "quantity": 1, "unitPrice": 120, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:iDEAL] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "IDEAL", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 45.5, "subtotalAmount": 45.5, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Home Decor", "phone": "+31612345678", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Home Decor", "feeRate": 10, "quantity": 1, "unitPrice": 45.5, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Bizum] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "BIZUM", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 30.0, "subtotalAmount": 30.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Event Ticket", "phone": "+34600123456", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Event Ticket", "feeRate": 10, "quantity": 1, "unitPrice": 30, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:MB Way] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "MBWAY", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 15.0, "subtotalAmount": 15.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Digital Content", "phone": "+351912345678", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Digital Content", "feeRate": 10, "quantity": 1, "unitPrice": 15, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Kredivo] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "KREDIVO", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 500000.0, "subtotalAmount": 500000.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Electronics", "phone": "+628123456789", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Electronics", "feeRate": 10, "quantity": 1, "unitPrice": 500000, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Mybank] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "MYBANK", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 200.0, "subtotalAmount": 200.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Online Course", "phone": "+8613800138000", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Online Course", "feeRate": 10, "quantity": 1, "unitPrice": 200, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Sepa DD] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "SEPA_DD", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 10.0, "subtotalAmount": 10.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Monthly Subscription", "phone": "+4915123456789", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Monthly Subscription", "feeRate": 10, "quantity": 1, "unitPrice": 10, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Przelewy24] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "PRZELEWY24", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 100.0, "subtotalAmount": 100.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Books", "phone": "+48500123456", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Books", "feeRate": 10, "quantity": 1, "unitPrice": 100, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Bilk] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "BILK", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 50.0, "subtotalAmount": 50.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Game Credits", "phone": "+905321234567", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Game Credits", "feeRate": 10, "quantity": 1, "unitPrice": 50, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:PIX] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "PIX", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 100.0, "subtotalAmount": 100.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Streaming Service", "phone": "+5511912345678", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Streaming Service", "feeRate": 10, "quantity": 1, "unitPrice": 100, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:SafetyPay] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "SAFETYPAY", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 75.0, "subtotalAmount": 75.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Travel Booking", "phone": "+51912345678", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Travel Booking", "feeRate": 10, "quantity": 1, "unitPrice": 75, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Transferncia Bancaria] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "TRANS_BANC", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 200.0, "subtotalAmount": 200.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Furniture", "phone": "+5521912345678", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Furniture", "feeRate": 10, "quantity": 1, "unitPrice": 200, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Afterpay] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "AFTERPAY", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 150.0, "subtotalAmount": 150.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Clothing", "phone": "+61412345678", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Clothing", "feeRate": 10, "quantity": 1, "unitPrice": 150, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:BillEase] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "BILLEASE", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 2000.0, "subtotalAmount": 2000.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Smartphone", "phone": "+639171234567", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Smartphone", "feeRate": 10, "quantity": 1, "unitPrice": 2000, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:FPX] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "FPX", "purchaseChannel": "WEB", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 100.0, "subtotalAmount": 100.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Gift Card", "phone": "+60123456789", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Gift Card", "feeRate": 10, "quantity": 1, "unitPrice": 100, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:BoostPay] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "BOOSTPAY", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 50.0, "subtotalAmount": 50.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Mobile Top-up", "phone": "+60123456789", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Mobile Top-up", "feeRate": 10, "quantity": 1, "unitPrice": 50, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:GrabPay] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "GRABPAY", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 20.0, "subtotalAmount": 20.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Food Delivery", "phone": "+6581234567", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Food Delivery", "feeRate": 10, "quantity": 1, "unitPrice": 20, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Maybank QR Pay] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "MAYBANK_QR", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 15.0, "subtotalAmount": 15.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Coffee", "phone": "+60123456789", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Coffee", "feeRate": 10, "quantity": 1, "unitPrice": 15, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:TnGo] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "TNGO", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 10.0, "subtotalAmount": 10.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Snacks", "phone": "+60123456789", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Snacks", "feeRate": 10, "quantity": 1, "unitPrice": 10, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [tab:Konbini] ```json : scrollable { "userNo": "GB2501108122805", "paymentMethod": "CONBINI", "purchaseChannel": "APP", "successUrl": "https://example.com/success", "failureUrl": "https://example.com/fail", "totalAmount": 5000.0, "subtotalAmount": 5000.0, "totalDiscountAmount": 0.0, "discountAmount": 0.0, "lgeDiscountAmount": 0.0, "nonCancelableAmount": 0.0, "itemName": "Beverage", "phone": "01012345678", "items": [ { "seq": 1, "sellerNo": "TEST_SELLR", "itemType": "PHYSICAL", "itemId": "Item1", "itemName": "Beverage", "feeRate": 10, "quantity": 1, "unitPrice": 5000, "discountAmount": 0, "lgeDiscountAmount": 0, "deliveryGroupNo": "" } ] } ``` [/tabs] ## 3. Response Specification ### 3.1 Response Data Schema @@include:standard-response.md@@ | -1 | data | [type:object] [req:Yes] [desc:Response data (Business results)] | | 0 | status | [type:string] [req:Yes] [desc:Current status of the payment process. Represents the progress towards the final goal of 'Success'.] [eg:AUTHORIZED, ACTION_REQUIRED] | | 0 | paymentUrl | [type:string] [req:Optional] [desc:The URL to redirect the user to for additional action. This can be an EBP-provided bridge page or a direct authentication page provided by the PG. Mandatory if `requiresClientAction` is `true`.] | | 0 | orderNo | [type:string] [req:Yes] [desc:Order number] | | 0 | pgTransactionId | [type:string] [req:Yes] [desc:PG transaction ID] | | 0 | paymentContext | [type:string] [req:Yes] [desc:The encrypted payment context value issued by EBP. It is used as a mandatory value when calling the 'Payment Creation API'.] | | 0 | successUrl | [type:string] [req:Yes] [desc:Final URL to redirect after successful payment] | | 0 | failureUrl | [type:string] [req:Yes] [desc:Final URL to redirect after failed payment] | | 0 | pgResponse | [type:object] [req:Yes] [desc:Detailed response information from the PG] | | 1 | resultCode | [type:string] [req:Yes] [desc:PG response result code] | | 1 | pgProvider | [type:string] [req:Yes] [desc:PG(Payment Gateway) code] [eg:WORLDPAY, CHECKOUT, OMISE] | | 1 | data | [type:object] [req:Yes] [desc:Detailed PG response data. Refer to the [**PG-Specific Response Data**](#32-pg-specific-response-data-pgresponsedata) section for specifications.] | | 0 | savedPaymentMethods | [type:array] [req:Optional] [desc:A list of payment methods previously saved by the user. Returned only when `useSavedPaymentMethod` in the request is set to `true`.] | | 1 | paymentMethod | [type:string] [req:Yes] [desc:Payment method code] [eg:CARD, DIRECT_DEBIT] | | 1 | paymentMethodId | [type:string] [req:Yes] [desc:Unique identifier for the payment method managed within EBP] | | 1 | cardNumber | [type:string] [req:Conditional] [desc:Masked card number (for card payment methods)] | | 1 | cardIssuer | [type:string] [req:Conditional] [desc:Card issuer or brand name (for card payment methods)] | | 1 | isBlocked | [type:boolean] [req:Yes] [desc:Whether the payment method is blocked (true if unusable)] | | 1 | pinErrorCount | [type:number] [req:Yes] [desc:Number of PIN entry errors] | | 1 | isPinRegistered | [type:boolean] [req:Yes] [desc:Whether a PIN is registered] | | -1 | instructions | [type:object] [req:Yes] [desc:Instructions for follow-up processing (Process control)] | | 0 | nextStep | [type:string] [req:Yes] [desc:Action instructions that the client must perform immediately to transition states.] [eg:CLIENT_ACTION, CALL_API] | | 0 | completionMethod | [type:string] [req:Yes] [desc:The subject and method by which the payment is finally completed.] [eg:WEBHOOK, API] | | 0 | requiresClientAction | [type:boolean] [req:Yes] [desc:Whether additional client action is required] | | 0 | clientAction | [type:object] [req:Optional] [desc:Information object for additional client actions. Mandatory if `requiresClientAction` is `true`.] | | 1 | type | [type:string] [req:Optional] [desc:Client action type] [eg:TOKENIZE_CARD, CREATE_SOURCE, REDIRECT_TO_HPP] | | 1 | pgProvider | [type:string] [req:Optional] [desc:The PG provider to handle the action] | | 1 | method | [type:string] [req:Optional] [desc:The HTTP Method to be used for redirect] [eg:GET, POST] | | 0 | requiresFollowUpApi | [type:boolean] [req:Yes] [desc:Whether a follow-up API call (e.g., Payment Creation API) is required] | | 0 | followUpApi | [type:object] [req:Optional] [desc:Follow-up API information to be called after client action. Mandatory if `requiresFollowUpApi` is `true`.] | | 1 | method | [type:string] [req:Optional] [desc:HTTP method of the follow-up API] [eg:POST] | | 1 | url | [type:string] [req:Optional] [desc:Call path of the follow-up API] | | 1 | description | [type:string] [req:Optional] [desc:Additional description for the follow-up API] | > **Payment Flow and Field Usage Guide:** > > 1. **status**: Current status of the payment resource. The client checks this value to determine the progress and final success of the payment. > 2. **instructions.nextStep**: Indicates that the control to proceed with the payment belongs to the client when the `status` is `ACTION_REQUIRED`. > 3. **instructions.requiresClientAction and clientAction**: Indicates whether additional client actions are required. If `requiresClientAction` is `true`, the client must perform the specified action (e.g., **Redirect** to the provided `paymentUrl` or **Directly** call the SDK using PG response data) by checking `clientAction.type`. > 4. **data.paymentUrl**: URL provided by EBP by wrapping the PG's payment page. It is used when you want to handle the payment simply through redirection without complex PG integration logic. (Mainly used when `clientAction.type` is `REDIRECT_TO_HPP`) > 5. **instructions.completionMethod**: Specifies the subject and path for final closure of the payment process. > * `WEBHOOK`: After the client action is completed, EBP receives the PG webhook and automatically processes the payment completion. Since a result webhook is subsequently sent to the store, the client moves to the result page and waits for processing. > * `API`: The process finally ends only after the client directly secures authentication information and calls the EBP **Payment Creation API**. > 6. **instructions.requiresFollowUpApi and followUpApi**: Indicates whether a follow-up API call is mandatory after the client action. If `requiresFollowUpApi` is `true`, the client must directly call the final **Payment Creation API**, etc., referring to `followUpApi.method` and `url`. > 7. **data.paymentContext**: A value containing encrypted order and session information. If the `completionMethod` is `API` (or if a follow-up API call is required), this value must be included in both the Header (`X-EBP-Context`) and the Body (`paymentContext`) when calling the subsequent **Payment Creation API**. ... "message": "SUCCESS", "requestId": "06EN1Q1E42FZPN6YT5PF8BZT88", "timestamp": "2026-04-03T01:01:41.987427200Z", "data": { "status": "ACTION_REQUIRED", "paymentUrl": "/pgui/v2/hpp/worldpay/paypal/wrapping?paymentContext=QfAy+og0Pc7OaUKV92YAcF6anMj8wv9uA0Srp+d+YmRDWhV/+sootHKD63BwkLf7nPyrko...", "orderNo": "ORD_7202604037731552", "pgTransactionId": "PGI_7202604037731554", "paymentContext": "QfAy+og0Pc7OaUKV92YAcF6anMj8wv9uA0Srp+d+YmRDWhV/+sootHKD63BwkLf7nPyrko...", "savedPaymentMethods": null, "successUrl": "https://devkic-payapi.nebp.lge.com/pgui/v2/hpp/worldpay/success", ... "pgRefId": "3594289311", "returnUrl": "https://payments-test.worldpay.com/app/hpp/integration/wpg/corporate?OrderKey=LGETEST3%5EPGI_7202604037731554&Ticket=00177561010184602AR5AUHvlnns9OqZOj-c3bAP0hRdc2IKQRPpfRC&source=https%3A%2F%2Fsecure-test.worldpay.com", "referenceUrl": "https://payments-test.worldpay.com/app/hpp/integration/wpg/corporate?OrderKey=LGETEST3%5EPGI_7202604037731554&Ticket=00177561010184602AR5AUHvlnns9OqZOj-c3bAP0hRdc2IKQRPpfRC&source=https%3A%2F%2Fsecure-test.worldpay.com" } } }, "instructions": { "nextStep": "CLIENT_ACTION", "completionMethod": "WEBHOOK", "requiresClientAction": true, "clientAction": { "type": "REDIRECT_TO_HPP", "pgProvider": "WORLDPAY", "method": "POST" }, "requiresFollowUpApi": false, "followUpApi": null } } ``` [tab:Card (Checkout.com)] ... "message": "SUCCESS", "requestId": "06EN4BVGAT0TJTK2EJ8RM21ZE0", "timestamp": "2026-04-03T07:12:16.131035200Z", "data": { "status": "ACTION_REQUIRED", "paymentUrl": "/pgui/v2/hpp/checkoutcom/card/wrapping?paymentContext=QfAy%2Bog0Pc7OaUKV92YAcJpgE%2F5feUx7nKM7nsA2oMRDWhV%2F%2B...", "orderNo": "ORD_7202604037731761", "pgTransactionId": "PGI_7202604037731763", "paymentContext": "QfAy+og0Pc7OaUKV92YAcJpgE/5feUx7nKM7nsA2oMRDWhV/+sootHKD63BwkLf7nPyrkojvOWHLw7QMY1UzpDeVUelxvMpeD4qXU9Wg7OPaOaCtb0HpMsA4J9glrqUBiOsgh+20tugQ0gCA3kgQ/HCVjxUw8i+gSay77vmxUuJD3TZOTI2mwaNHFuf3YtFI5mRnlf0c0KTwZgWH/YZSXuhJdzTYWh5YvSOlFXLUA6S4VQuvXI2Gtu93s0D8lOXh0xoTHX+A0Fn1mKQBAIBYDtMLnSZPCDZMssTtvxtvxWZJxBMY0XCH7bmlwThATvQvdkV+Tj/SxYJxUI1PQv7ojSmw4NEqqavZVoe/6TRAuiSdJYLYCXjX/TCxOYUGP4VF6zo4TihnlhdX4jpxvFmz3+uy5AJRGkmPkvWRd8KzsyvvvLem+AZkCOYm3eRF2I9SOjxZNszSHAxdM77/MIIJSFXM+FPCGttNMsd7YvES+3Khk1MHL5gMRJFNnNPsId2q++yhhLJCf2Q7sHB1DwYCmBvsmLvnW6vk/N4ODTEgtQX2BbX2gH114KKhX1K4cybAIL5zix958KT2QX4Xq33J3jtpjceOzcrreMOEbjxEQfFw9TmBTVRiEX+JY6bKaIPVvvkJE5lf9L/lzUp6jULdbGzmgV9GZgPePoue+wOpKLIbBai6OB0vdKXXcudH6ooqP2HJn9C7mlyUvXUBN1U8JlfQm+W0fNzHoep//Ed+RDR+iK9XZFyUZSu+EAN7PqIdr+OMLLNaPh7pL0ep9HF2JUccbhMli+6mui7ufQ/edlkgm27naagZ153Ahz8/KwybtFuvEHIDWxrgJbH6/XdZTjOE9BoerBs6+9p8SIkPVgEHoF7dAb1f/BxMzE9mFUUpPIpOmtHjD95qoB/eg5ll66tGdVFWlN2HVbc8f8ZW3Mp1m6fTK7q6uxmj6RwdkYTqcajI5C/MY/MToUn0BBxV3VKlwKDAumN6e9MR/9DH5bnby/owsPpDUm9Jb4AVesFvBlRcuoHeJSuYtf/jKxcOffmS73XejlrB1+6qzsMLMDfQnQlTRd6nVMICpmrCRW7dHemautPYFhZgGvYjCciTOgLv9vzSTyJsnT1Zt0Pe1uJAnr2SyGmlyvB5qCXNzzRWrrHFLwUKNYMKAwxDYnP2JQdrjtA0zVwBWW63fYkoQ6KDsyUd7WmdEZcmf0Xs16j6XAS9QEznMWv3QwWtzSAZXZ800Nqf6mrGBlZe+sI3xOtW9G4G04YHMzj8nRftR82Z+beprq6owNGwhX7ZSTWLzhJXH9dViZDaO3FqfS6/p4Cnf3u+niWi7eFEP1fw7ukuXS1yElEozqZVowra704FokZ78Ic4kegT4dY5hxbi3OxEuGC1QyaGMrJh/7Ds538DKRc+HA5LJSMvzAZpgyRoZAJOp6m+vWMoPJCLCkFuU8+kJwc/tbf09ge/dN3b7gSsLUZvV/yLlCs0KqEfoT/XXcPhJu385qwl97A66vsp/bCO/MGt2twFhH0s4zHl+kZsTftYgTzgv/0QyzXIV9o90agzqZTgc6UZP0Dk9nj/nFBYb8tEKeUkp86VbCqd1KBZMk/yVB+uHbWKe+iHHTTKuyHSRpVcZUO7Jeby8jtXCIVE7hhqu9t9RdCInUnmgRH3C0mKq/ARKHOF2+xBP+sCVZJJ4JNkZMZpFu8iOWYa3fZMHeMgCC2QKaG4RJzXlNcmWJmQeDY6TmAsUaWSzUJv6EfgVd9qpw4dHsOzLwmTijw3jYmNdUpE0HLQVFry3JaV6xNx59oTPGgLIqsAEhfqDRBOXAfqTzzxQJSUlVVl95LmowZgI83jISNdWztdExvH43ii0UuuON6Fzn20UXyzzZyCnpfSAMij5jj4fZJoubwspf92cTNSKmqN01hjrFOjfzoADbGR7BB0Uc7qBnuSGa+tKs7vjvs64LZEIKJ1+LJxCFu+7rjcoON2T... [truncated] "savedPaymentMethods": null, "successUrl": "https://devkic-payapi.nebp.lge.com/pgui/v2/hpp/checkoutcom/success", "failureUrl": "https://devkic-payapi.nebp.lge.com/pgui/v2/hpp/checkoutcom/failure", "pgResponse": { "resultCode": "OK", ... } } } } } }, "instructions": { "nextStep": "CLIENT_ACTION", "completionMethod": "WEBHOOK", "requiresClientAction": true, "clientAction": { "type": "REDIRECT_TO_HPP", "pgProvider": "CHECKOUT_COM", "method": "POST" }, "requiresFollowUpApi": false, "followUpApi": null } } ``` [tab:Card (Omise)] ... "message": "SUCCESS", "requestId": "06EN41W5RTTKKDX4HRE5JV7NX4", "timestamp": "2026-04-03T06:28:38.259142300Z", "data": { "status": "ACTION_REQUIRED", "paymentUrl": "/pgui/v2/hpp/omise/card/wrapping?paymentContext=QfAy%2Bog0Pc7OaUKV92YAcOD%2FaZ2IDdOD9sJI9kzUoGtDWhV%2F%2B...", "orderNo": "ORD_7202604037731725", "pgTransactionId": "PGI_7202604037731727", "paymentContext": "QfAy+og0Pc7OaUKV92YAcOD/aZ2IDdOD9sJI9kzUoGtDWhV/...", "savedPaymentMethods": null, "successUrl": "https://devkic-payapi.nebp.lge.com/pgui/v2/hpp/omise/success", ... "orderNo": "ORD_7202604037731725", "authRequestId": "06EN41W5RTTKKDX4HRE5JV7NX4", "authSignature": "Ddr53aFJ/WBOkdFWcjVE6GqmHy4dciOpUbApXBUa+VU=" } } }, "instructions": { "nextStep": "CLIENT_ACTION", "completionMethod": "API", "requiresClientAction": true, "clientAction": { "type": "TOKENIZE_CARD", "pgProvider": "OMISE", "method": "GET" }, "requiresFollowUpApi": true, "followUpApi": { "method": "POST", "url": "/api/v2/payments", "description": "After card tokenization, call this Payment Creation API using the obtained token." } } } ``` [tab:PayPal] ... "message": "SUCCESS", "requestId": "06EJSXACF3167DYF17DCKPV398", "timestamp": "2026-03-27T01:42:48.101231400Z", "data": { "status": "ACTION_REQUIRED", "paymentUrl": "/pgui/v2/hpp/worldpay/card/wrapping?paymentContext=QfAy%2Bog0Pc7OaUKV92YAcF8bIPJ1MnoOmpeUOWd9eYRDWhV%2F...", "orderNo": "ORD_7202603277730925", "pgTransactionId": "PGI_7202603277730929", "paymentContext": "QfAy%2Bog0Pc7OaUKV92YAcF8bIPJ1MnoOmpeUOWd9eYRDWhV%2F...", "savedPaymentMethods": null, "successUrl": "https://devkic-payapi.nebp.lge.com/pgui/v2/hpp/worldpay/success", ... "pgRefId": "3592852189", "returnUrl": "https://hpp-sandbox.worldpay.com/app/hpp/integration/wpg/corporate?OrderKey=LGETEST3%5EPGI_7202603277730929&Ticket=00177500776844702U-c7q9YvTrz7RVzEY-WJvQbS7JfWDoR3BcNo-0&source=https%3A%2F%2Fsecure-test.worldpay.com", "referenceUrl": "https://hpp-sandbox.worldpay.com/app/hpp/integration/wpg/corporate?OrderKey=LGETEST3%5EPGI_7202603277730929&Ticket=00177500776844702U-c7q9YvTrz7RVzEY-WJvQbS7JfWDoR3BcNo-0&source=https%3A%2F%2Fsecure-test.worldpay.com" } } }, "instructions": { "nextStep": "CLIENT_ACTION", "completionMethod": "WEBHOOK", "requiresClientAction": true, "clientAction": { "type": "REDIRECT_TO_HPP", "pgProvider": "WORLDPAY", "method": "POST" }, "requiresFollowUpApi": false, "followUpApi": null } } ``` [tab:Bank Transfer (태국)] ... "message": "SUCCESS", "requestId": "06EJSWXF1S9VSJVR3H832TWEY0", "timestamp": "2026-03-27T01:41:01.060997300Z", "data": { "status": "ACTION_REQUIRED", "paymentUrl": "/pgui/v2/hpp/omise/bank-transfer/wrapping", "orderNo": "ORD_7202603277730917", "pgTransactionId": "PGI_7202603277730920", "paymentContext": "...", "savedPaymentMethods": null, "successUrl": "https://devkic-pgui.nebp.lge.com//pgui/v2/hpp/omise/success", ... "authRequestId": "06EJSWXF1S9VSJVR3H832TWEY0", "authSignature": "552RtzZfrEkiZE/piQ9GQ62UWC8XqkckETlzzBUnxjg=", "paymentContext": "..." } } }, "instructions": { "nextStep": "CLIENT_ACTION", "completionMethod": "API", "requiresClientAction": true, "clientAction": { "type": "CREATE_SOURCE", "provider": "OMISE" }, "requiresFollowUpApi": true, "followUpApi": { "method": "POST", "url": "/api/v2/payments", "description": "After creating the account source, call this Payment Creation API using the obtained source ID." } } } ``` [tab:Installment (태국)] ... "message": "SUCCESS", "requestId": "06EN40N9V7N1PQXAH0GMBN91Z4", "timestamp": "2026-04-03T06:23:19.800137100Z", "data": { "status": "ACTION_REQUIRED", "paymentUrl": "/pgui/v2/hpp/omise/installment/wrapping?paymentContext=QfAy+og0Pc7OaUKV92YAcPQqpKNrGELf9Ty8UQO/rElDWhV/+...", "orderNo": "ORD_7202604037731713", "pgTransactionId": "PGI_7202604037731715", "paymentContext": "QfAy+og0Pc7OaUKV92YAcPQqpKNrGELf9Ty8UQO/rElDWhV/+...", "savedPaymentMethods": null, "successUrl": "http://localhost:8080/pgui/v2/hpp/omise/success", ... "authSignature": "CRMmdgHJpcCiACWY6ZOGiUxOSjqTcv9zQsbVFXI3zD8=", "installmentSource": "installment_kbank", "installmentTerm": 3 } } }, "instructions": { "nextStep": "CLIENT_ACTION", "completionMethod": "API", "requiresClientAction": true, "clientAction": { "type": "CREATE_SOURCE", "provider": "OMISE" }, "requiresFollowUpApi": true, "followUpApi": { "method": "POST", "url": "/api/v2/payments", "description": "After creating the payment source, call this Payment Creation API using the obtained source ID." } } } ``` [tab:Tabby (UAE)] ... "message": "SUCCESS", "requestId": "06EN4HHZ63D5QPZD5FZV9H2ZX4", "timestamp": "2026-04-03T07:37:09.299115500Z", "data": { "status": "ACTION_REQUIRED", "paymentUrl": "/pgui/v2/hpp/checkoutcom/tabby/wrapping?paymentContext=QfAy%2Bog0Pc7OaUKV92YAcGpbC7at%2BRppP%2...", "orderNo": "ORD_8202604037731809", "pgTransactionId": "PGI_8202604037731811", "paymentContext": "QfAy+og0Pc7OaUKV92YAcGpbC7at+RppP/jsdoEbGb1DWhV/+...", "savedPaymentMethods": null, "successUrl": "http://localhost:8080/pgui/v2/hpp/checkoutcom/success", ... } } } } } }, "instructions": { "nextStep": "CLIENT_ACTION", "completionMethod": "WEBHOOK", "requiresClientAction": true, "clientAction": { "type": "REDIRECT_TO_HPP", "pgProvider": "CHECKOUT_COM", "method": "POST" }, "requiresFollowUpApi": false, "followUpApi": null } } ``` [tab:Tamara (UAE)] ... "message": "SUCCESS", "requestId": "06EN4H3C9QMHEAZYS6YQZJC7GC", "timestamp": "2026-04-03T07:35:09.863177500Z", "data": { "status": "ACTION_REQUIRED", "paymentUrl": "/pgui/v2/hpp/checkoutcom/tamara/wrapping?paymentContext=QfAy%2Bog0Pc7OaUKV92YAcF5qAbtkl%2BEuYAbqu5aS5KFDWhV%2F%2...", "orderNo": "ORD_8202604037731801", "pgTransactionId": "PGI_8202604037731803", "paymentContext": "QfAy+og0Pc7OaUKV92YAcF5qAbtkl+EuYAbqu5aS5KFDWhV/...", "savedPaymentMethods": null, "successUrl": "http://localhost:8080/pgui/v2/hpp/checkoutcom/success", ... "type": "CHECKOUT", "publicKey": "pk_sbox_2ewvjanc7xpuduraa7tqquf5mmi", "paymentSession": { "id": "ps_3Bq1IsElSF2ZoM1aZtuTBv4Mfg6", "payment_session_secret": "pss_fc314af0-b0b1-49e7-b2be-469bd6c33d50", "payment_session_token": "YmFzZTY0:eyJpZCI6InBzXzNCcTFJc0VsU0YyWm9NMWFadHVUQnY0TWZnNiIsImVudGl0eV9pZCI6ImVudF8za2ZoaHZ6NXVldXRmajVtNmpkYTRhYnB6YSIsImV4cGVyaW1lbnRzIjp7fSwicHJvY2Vzc2luZ19jaGFubmVsX2lkIjoicGNfa21teXVieWMyNnpldnBrcWx0eXZqdXBvbWUiLCJhbW91bnQiOjI4MjUwMCwibG9jYWxlIjoiZW4tR0IiLCJjdXJyZW5jeSI6IkFFRCIsInBheW1lbnRfbWV0aG9kcyI6W3sidHlwZSI6ImNhcmQiLCJjYXJkX3NjaGVtZXMiOlsiVmlzYSIsIk1hc3RlcmNhcmQiXSwic2NoZW1lX2Nob2ljZV9lbmFibGVkIjpmYWxzZSwic3RvcmVfcGF5bWVudF9kZXRhaWxzIjoiZGlzYWJsZWQiLCJiaWxsaW5nX2FkZHJlc3MiOnsiY291bnRyeSI6IkFFIiwiYWRkcmVzc19saW5lMSI6IkJ1cmogS2hhbGlmYSwgRmxvb3IgMTIyIiwiY2l0eSI6IkR1YmFpIn19LHsidHlwZSI6ImFwcGxlcGF5IiwiZGlzcGxheV9uYW1lIjoiTEcgVUFFIiwiY291bnRyeV9jb2RlIjoiQUUiLCJjdXJyZW5jeV9jb2RlIjoiQUVEIiwibWVyY2hhbnRfY2FwYWJpbGl0aWVzIjpbInN1cHBvcnRzM0RTIl0sInN1cHBvcnRlZF9uZXR3b3JrcyI6WyJ2aXNhIiwibWFzdGVyQ2FyZCJdLCJ0b3RhbCI6eyJsYWJlbCI6IkxHIFVBRSIsInR5cGUiOiJmaW5hbCIsImFtb3VudCI6IjI4MjUifX0seyJ0eXBlIjoiZ29vZ2xlcGF5IiwibWVyY2hhbnQiOnsiaWQiOiIwODExMzA4OTM4NjI2ODg0OTk4MiIsIm5hbWUiOiJMRyBVQUUiLCJvcmlnaW4iOiJodHRwOi8vbG9jYWxob3N0OjgwODAifSwidHJhbnNhY3Rpb25faW5mbyI6eyJ0b3RhbF9wcmljZV9zdGF0dXMiOiJGSU5BTCIsInRvdGFsX3ByaWNlIjoiMjgyNSIsImNvdW50cnlfY29kZSI6IkFFIiwiY3VycmVuY3lfY29kZSI6IkFFRCJ9LCJjYXJkX3BhcmFtZXRlcnMiOnsiYWxsb3dlZF9hdXRoX21ldGhvZHMiOlsiUEFOX09OTFkiLCJDUllQVE9HUkFNXzNEUyJdLCJhbGxvd2VkX2NhcmRfbmV0d29ya3MiOlsiVklTQSIsIk1BU1RFUkNBUkQiXX19LHsidHlwZSI6InRhbWFyYSIsImNvdW50cnlfY2FsbGluZ19jb2RlcyI6WyI5NzEiXX0seyJ0eXBlIjoidGFiYnkiLCJjb3VudHJ5X2NhbGxpbmdfY29kZXMiOlsiOTcxIl0sImVtYWlsIjoiemF5ZWQuYUBleGFtcGxlLmFlIiwibmFtZSI6IlpheWVkIEFobWVkIn1dLCJmZWF0dXJlX2ZsYWdzIjpbImFuYWx5dGljc19vYnNlcnZhYmlsaXR5X2VuYWJsZWQiLCJnZXRfd2l0aF9wdWJsaWNfa2V5X2VuYWJsZWQiLCJsb2dzX29ic2VydmFiaWxpdHlfZW5hYmxlZCIsInJpc2tfanNfZW5hYmxlZCIsInVzZV9iaWxsaW5nX2FkZHJlc3NfZnJvbV9jb25maWdfZm9yX3Rva2VuaXphdGlvbiIsInVzZV9kZXZpY2VfYXBpX2Zvcl9vYnNlcnZhYmlsaXR5IiwidXNlX3Jpc2tqc192MiIsInVzZV91cmxfaGFzaF9mb3JfaWZyYW1lX3Byb3BzIl0sInJpc2siOnsiZW5hYmxlZCI6ZmFsc2V9LCJtZXJjaGFudF9uYW1lIjoiTEcgVUF... [truncated] "_links": { "self": { "href": "https://api.sandbox.checkout.com/payment-sessions/ps_3Bq1IsElSF2ZoM1aZtuTBv4Mfg6" } } } } } }, "instructions": { "nextStep": "CLIENT_ACTION", "completionMethod": "WEBHOOK", "requiresClientAction": true, "clientAction": { "type": "REDIRECT_TO_HPP", "pgProvider": "CHECKOUT_COM", "method": "POST" }, "requiresFollowUpApi": false, "followUpApi": null } } ``` [/tabs] ## 4. Response Post-processing Guide (Next Steps) After calling the Create Payment Intent API, if the response `status` is `ACTION_REQUIRED` and `instructions.nextStep` is `CLIENT_ACTION`, the client must transition the screen or initialize the PG SDK so that the user can proceed with the payment based on the provided data. Depending on the store's environment and requirements, you can choose between the **Redirect Integration (HPP Wrapping)** and **Direct Integration (Direct PG SDK/UI Rendering)** methods. ### 4.1 Redirect Integration (Simple Integration) This is the simplest method where the user is moved to a payment page provided by EBP to process the payment. The store does not need to directly implement complex SDK integration logic for each PG provider. - **Target Field**: `data.paymentUrl` - **Processing Method**: The received `paymentUrl` includes an encrypted context required for payment authentication as a query parameter. The store can simply **redirect to this URL using the GET method**. #### Integration Example (Common) Use the `paymentUrl` received from the Create Payment Intent API response as follows: **1. HTML Setup (Virtual Form for Data Transmission)** ```html
``` **2. Javascript Processing Example** ```javascript // 1. Receive response data from the EBP Create Payment Intent API const { paymentUrl } = response.data; // 2. Set paymentUrl to the form action const form = document.getElementById("ebp-redirect-form"); form.action = paymentUrl; // 3. Submit the form (Redirect to payment page) form.submit(); ``` > **Notes:** > - Since the `paymentUrl` already contains the payment context (`paymentContext`), there's no need to create separate input fields inside the form or manually assemble the data. The browser will maintain the URL's query string while sending the POST request, and EBP will receive it to securely construct the PG provider's payment screen. > - **When using the redirect method via `paymentUrl`**, EBP will directly finalize all authentication and authorization processes, even if the response data contains follow-up API call flags (`requiresFollowUpApi`) or details (`followUpApi`). The store only needs to verify the result through webhooks or the final redirect URL without calling a separate Payment Creation API. ### 4.2 Direct Integration (Custom Integration) This method is used when you want to directly render UI components (Drop-in) provided by the PG provider within the store's existing payment screen. - **Target Field**: Authentication information per PG provider within `data.pgResponse.data` - **Processing Method**: Use the Key, Token values, etc., returned for each PG provider to initialize the PG SDK and proceed with the payment in the frontend environment. #### Worldpay Direct Integration Example Worldpay uses the provided `referenceUrl` to initialize the PG SDK. **1. HTML Setup** ```html
``` **2. Javascript Processing Example** ```javascript const { referenceUrl } = response.data.pgResponse.data; const customOptions = { url: referenceUrl, type: "iframe", inject: "onload", target: "worldpay-container", accessibility: true, language: "en", country: "GB", successURL: response.data.successUrl, cancelURL: response.data.failureUrl, failureURL: response.data.failureUrl, errorURL: response.data.failureUrl }; if (customOptions.url) { const libraryObject = new WPCL.Library(); libraryObject.setup(customOptions); } ``` #### Checkout.com Direct Integration Example Checkout.com uses the provided `publicKey` and `paymentSession` object to mount the **Flow UI** component. **1. HTML Setup (Load SDK and Define Mount Point)** ```html
``` **2. Javascript Processing Example** ```javascript const { publicKey, paymentSession } = response.data.pgResponse.data; // 1. Initialize Checkout Web SDK const checkout = await CheckoutWebComponents({ publicKey: publicKey, environment: 'sandbox', // or 'production' paymentSession: paymentSession, // Pass the entire object onPaymentCompleted: (component, paymentResponse) => { window.location.href = response.data.successUrl; }, onError: (component, error) => { console.error("Checkout Error:", error); } }); // 2. Create and mount the Flow component const flowComponent = checkout.create('flow'); flowComponent.mount('#checkout-container'); ``` #### Omise Card Direct Integration Example For credit card payments, a one-time token is generated using the `publicKey`, and then the EBP Payment Creation API is called with that token information. **1. HTML Setup** ```html ``` **2. Javascript Processing Example** ```javascript const { publicKey, authRequestId, authSignature, paymentHeaderContext, paymentContext, amount, currency } = response.data.pgResponse.data; // Configure Omise SDK OmiseCard.configure({ publicKey: publicKey }); document.getElementById('omise-card-btn').onclick = () => { OmiseCard.open({ amount: amount, currency: currency, onCreateTokenSuccess: async (token) => { const paymentBody = { authRequestId, authSignature, paymentContext, paymentMethod: "CARD", paymentInstrumentId: token, paymentInstrumentType: "ONE_TIME_TOKEN" }; const host = 'https://devkic-payapi.nebp.lge.com/'; // Call EBP Payment Creation API const chargeResponse = await fetch(`${host}/api/v2/payments`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-EBP-Context': paymentHeaderContext }, body: JSON.stringify(paymentBody) }); if (!chargeResponse.ok) throw new Error("Payment API call failed"); const result = await chargeResponse.json(); // Redirect to authorizeUri if 3DS authentication is required const authorizeUri = result.data?.pgResponse?.data?.authorizeUri; if (authorizeUri) { window.location.href = authorizeUri; } else if (result.resultCode === "0") { window.location.href = response.data.successUrl; } } }); }; ``` #### Omise Installment (Source) Direct Integration Example For source-based payments like installments, a one-time source ID is generated via `createSource` before the payment request. **1. HTML Setup** ```html ``` **2. Javascript Processing Example** ```javascript const { publicKey, authRequestId, authSignature, paymentHeaderContext, paymentContext, installmentSource, installmentTerm, amountDecimal, currency } = response.data.pgResponse.data; Omise.setPublicKey(publicKey); document.getElementById('omise-installment-btn').onclick = () => { const sourceParams = { type: installmentSource, amount: Number(amountDecimal), // Use amount with decimals for source creation currency: currency, installment_term: installmentTerm }; Omise.createSource(sourceParams.type, sourceParams, async (statusCode, res) => { if (statusCode === 200) { const paymentBody = { authRequestId, authSignature, paymentContext, paymentMethod: "INSTALLMENT", paymentInstrumentId: res.id, paymentInstrumentType: "ONE_TIME_SOURCE" }; const host = 'https://devkic-payapi.nebp.lge.com/'; // Call EBP Payment Creation API const paymentResponse = await fetch(`${host}/api/v2/payments`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-EBP-Context': paymentHeaderContext }, body: JSON.stringify(paymentBody) }); const result = await paymentResponse.json(); // Redirect to authorizeUri if 3DS authentication is required const authorizeUri = result.data?.pgResponse?.data?.authorizeUri; if (authorizeUri) { window.location.href = authorizeUri; } else if (result.resultCode === "0") { window.location.href = response.data.successUrl; } } }); }; ```