Documentation Index
Fetch the complete documentation index at: https://waffo.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
Two checkout modes
Waffo supports two checkout integration modes. Choose the one that fits your needs:
- Waffo-hosted checkout: Waffo provides the complete payment page. Users select a payment method and complete payment on the Waffo side.
- Merchant-built checkout (direct API): The merchant builds their own payment page. Users select a payment method on the merchant side, and the merchant specifies the payment channel via API parameters.
Comparison
| Dimension | Waffo Checkout | Merchant-built checkout |
|---|
| Payment method selection | User selects on the Waffo checkout page | User selects on the merchant page |
| Integration complexity | Low (redirect only) | High (custom UI + specify payment method parameters) |
| Payment method coverage | Automatic full coverage; new methods require no code changes | Must maintain the supported list manually |
| PCI DSS compliance | Handled by Waffo | Merchant is responsible (card payment scenarios) |
| UI customization | Supports theme color, logo, language, etc. | Fully custom |
| Suitable for | Most merchants | Large merchants with their own checkout |
Waffo Checkout: request parameters
When users select a payment method on the Waffo side, the merchant does not need to pass payMethodType or payMethodName. The Waffo checkout automatically displays all available payment methods.
For the following payment methods, passing payMethodType (without payMethodName) is recommended:
| Payment method | Recommended parameter | Reason |
|---|
| Card | payMethodType: "CREDITCARD,DEBITCARD" | Waffo automatically identifies the card type via BIN, reducing the user selection step |
| VA (virtual account) | payMethodType: "VA" | User selects the specific bank on the checkout page |
| Other | Omit | Checkout automatically displays all available methods |
Minimal request (no payment method specified)
{
"paymentRequestId": "REQ_20260420_001",
"merchantOrderId": "ORDER_001",
"orderCurrency": "IDR",
"orderAmount": "50000",
"orderDescription": "Product description",
"orderRequestedAt": "2026-04-20T12:00:00Z",
"notifyUrl": "https://merchant.com/webhook",
"merchantInfo": {
"merchantId": "M000001"
},
"userInfo": {
"userId": "user_001",
"userTerminal": "WEB"
},
"paymentInfo": {
"productName": "ONE_TIME_PAYMENT"
}
}
Card payment recommended request
{
"paymentRequestId": "REQ_20260420_002",
"merchantOrderId": "ORDER_002",
"orderCurrency": "USD",
"orderAmount": "29.99",
"orderDescription": "Premium Plan",
"orderRequestedAt": "2026-04-20T12:00:00Z",
"notifyUrl": "https://merchant.com/webhook",
"merchantInfo": {
"merchantId": "M000001"
},
"userInfo": {
"userId": "user_001",
"userTerminal": "WEB"
},
"paymentInfo": {
"productName": "ONE_TIME_PAYMENT",
"payMethodType": "CREDITCARD,DEBITCARD"
}
}
Merchant-built checkout: request parameters
The user has already selected a specific payment method on the merchant page. Pass parameters to tell Waffo which channel to use.
| Scenario | Parameter approach | Example |
|---|
| User selected DANA | payMethodType + payMethodName | "EWALLET" + "DANA" |
| User selected a credit card | payMethodType only (omit payMethodName) | "CREDITCARD,DEBITCARD" (Waffo identifies via BIN automatically) |
| User selected VA | payMethodType | "VA" (user selects the specific bank on the Waffo side) |
Card payment: Do not pass payMethodName; pass payMethodType only. Waffo automatically identifies Visa / Mastercard / JCB / AMEX via the card BIN.VA: Pass only payMethodType: "VA". The user selects the specific bank on the Waffo side.E-wallet: Pass payMethodName to specify the wallet (e.g., DANA, GCash). This bypasses the Waffo checkout page and sends the user directly to the specified wallet’s payment flow. The Waffo checkout itself supports all payment methods; passing payMethodName is specifically for routing users straight to a given wallet without showing the checkout selection screen.
E-wallet direct (DANA)
{
"paymentRequestId": "REQ_20260420_003",
"merchantOrderId": "ORDER_003",
"orderCurrency": "IDR",
"orderAmount": "50000",
"orderDescription": "Product description",
"orderRequestedAt": "2026-04-20T12:00:00Z",
"notifyUrl": "https://merchant.com/webhook",
"merchantInfo": {
"merchantId": "M000001"
},
"userInfo": {
"userId": "user_001",
"userTerminal": "WEB"
},
"paymentInfo": {
"productName": "ONE_TIME_PAYMENT",
"payMethodType": "EWALLET",
"payMethodName": "DANA"
}
}
Card payment direct
{
"paymentRequestId": "REQ_20260420_004",
"merchantOrderId": "ORDER_004",
"orderCurrency": "USD",
"orderAmount": "29.99",
"orderDescription": "Premium Plan",
"orderRequestedAt": "2026-04-20T12:00:00Z",
"notifyUrl": "https://merchant.com/webhook",
"merchantInfo": {
"merchantId": "M000001"
},
"userInfo": {
"userId": "user_001",
"userTerminal": "WEB"
},
"paymentInfo": {
"productName": "ONE_TIME_PAYMENT",
"payMethodType": "CREDITCARD,DEBITCARD"
}
}
VA direct
{
"paymentRequestId": "REQ_20260420_005",
"merchantOrderId": "ORDER_005",
"orderCurrency": "IDR",
"orderAmount": "100000",
"orderDescription": "Product description",
"orderRequestedAt": "2026-04-20T12:00:00Z",
"notifyUrl": "https://merchant.com/webhook",
"merchantInfo": {
"merchantId": "M000001"
},
"userInfo": {
"userId": "user_001",
"userTerminal": "WEB"
},
"paymentInfo": {
"productName": "ONE_TIME_PAYMENT",
"payMethodType": "VA"
}
}
Embedding options
After receiving orderAction, there are three ways to direct the user to the payment page:
| Method | Suitable for | Notes |
|---|
| Redirect | Default for web | window.location.href = orderAction.webUrl |
| iframe embed | When users should not leave the merchant page | Requires allow="payment" and Referrer Policy configuration |
| App WebView | Mobile apps | Confirm that the WebView supports external launch, download/copy behavior, and URL parameter integrity |
For detailed requirements, see Checkout integration steps and Payment method integration notes.