Skip to main content
Convenience Store (C-Store) payments let customers generate a payment code online and complete their purchase by paying cash or electronically at a participating convenience store chain. This method is widely used in markets such as Indonesia, Japan, and the Philippines, where offline-to-online (O2O) flows are common.

Capabilities & Constraints

  • Flow type: Deferred offline payment (generate code → pay at store → confirm via webhook).
  • Capture model: Direct capture only once customer pays at the store.
  • Customer experience: Customer receives a store code or payment slip → pays at cashier or kiosk → provider posts success.
  • Settlement: According to the local store provider/bank aggregator rules.
  • Refunds/Reversals: Not supported (once customer has paid cash at store, no reversal is possible). Refunds, if needed, must be handled outside Monxa.
  • Expiry: Each store payment code has an expiry time (e.g., 24–48 hours). If not paid, the charge expires automatically.

1. Create a Charge

Create a charge with virtual account channel code. Monxa requests a VA from the provider.

2. Present Payment Instructions

Show the customer the bank name, VA number, and expiry along with transfer instructions.

3. Customer Pays at Store

The customer transfers the exact (or open) amount to the VA via mobile banking or ATM.

4. Handle Webhooks

Monxa confirms via webhook when funds are received and updates your system.

Supported Channels

Payment Flow

Status Lifecycle

Step 1: Create a Charge

Create a charge with a C-Store channel_code. Specify amount, currency, and reference_id. The provider will return store-specific instructions and an expiry.
Endpoint: POST v1/charges

Step 2: Presents Payment Instructions

Show the display_code and store instructions to the customer. Example UX:
  • Online checkout: Display code + barcode/QR for scanning at store.
  • Email/SMS: Send code and expiry details so the customer can pay offline.

Step 3: Customer Pays at Store

Customer visits the selected convenience store, presents the code to cashier or self-service kiosk, and pays the required amount in cash or supported digital methods.

Step 4: Handle Webhooks & Confirm Status

Webhook events:
  • charge.succeeded — Payment confirmed (safe to fulfill).
  • charge.failed — Store rejected or technical error.
  • charge.expired — Customer did not pay before expiry.
Always verify with GET /v1/charges/{id} before updating your order state.

Refunds

❗Not supported.
Once the customer pays cash at a store, funds are final. Any refund must be arranged directly with the customer outside Monxa.

Error Handling