Skip to main content

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

DimensionWaffo CheckoutMerchant-built checkout
Payment method selectionUser selects on the Waffo checkout pageUser selects on the merchant page
Integration complexityLow (redirect only)High (custom UI + specify payment method parameters)
Payment method coverageAutomatic full coverage; new methods require no code changesMust maintain the supported list manually
PCI DSS complianceHandled by WaffoMerchant is responsible (card payment scenarios)
UI customizationSupports theme color, logo, language, etc.Fully custom
Suitable forMost merchantsLarge 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 methodRecommended parameterReason
CardpayMethodType: "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
OtherOmitCheckout 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"
  }
}
{
  "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.
ScenarioParameter approachExample
User selected DANApayMethodType + payMethodName"EWALLET" + "DANA"
User selected a credit cardpayMethodType only (omit payMethodName)"CREDITCARD,DEBITCARD" (Waffo identifies via BIN automatically)
User selected VApayMethodType"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:
MethodSuitable forNotes
RedirectDefault for webwindow.location.href = orderAction.webUrl
iframe embedWhen users should not leave the merchant pageRequires allow="payment" and Referrer Policy configuration
App WebViewMobile appsConfirm 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.