For the complete documentation index, see llms.txt. This page is also available as Markdown.

Recover Abandoned Cart

Recover Abandoned Cart is a feature on the DOKU Checkout Page that lets customers reopen and complete an expired order without the merchant having to recreate it. When an order expires, DOKU can automatically send the customer an "Expired Order" email containing a link back to the original Checkout Page, where they can resume and finish the payment.

Availability: 🇮🇩 Indonesian Business Account only.


How It Works

  1. A customer initiates checkout and the order is generated (ORDER_GENERATED).

  2. The customer does not complete payment within the payment_due_date, so the order expires (ORDER_EXPIRED).

  3. If Recover Abandoned Cart is active, DOKU sends the customer an Expired Order email containing a direct link back to the same Checkout Page.

  4. The customer opens the link and resumes payment on the original order — no new order/invoice is created.

  5. If the customer completes the payment within the recovery period you configured, the order is marked as recovered (ORDER_RECOVERED).

The customer can reopen the same expired order up to 3 times via the recovery email, within the recovery period you set (for example, 7 days after expiration).


1. Enable via DOKU Dashboard

The simplest way to turn on Recover Abandoned Cart is from the DOKU Dashboard, which sets the merchant-level default applied to all Checkout orders. (If you need to control this per order, or override the default for specific transactions, see API Reference below.)

Step 1 — Enable the Expired Order email notification (prerequisite)

The Expired Order email is the entry point for customers to return to their cart, so it must be turned on first.

  1. Log in to your DOKU Dashboard

  2. Go to Settings > Checkout Page Notification (Checkout Email Notifications)

  3. Activate the Expired Order status notification

Step 2 — Activate Recover Abandoned Cart

  1. Log in to your DOKU Dashboard

  2. Go to Settings > Checkout Appearance > Expired Settings

  3. Switch on Activate Recover Abandoned Cart

  4. Set your preferred recovery period — the number of days after expiration during which the order can still be recovered (for example, 7 days)

  5. Click Save


2. API Reference

In addition to the Dashboard toggle, Recover Abandoned Cart can be controlled per transaction via the Initiate Order request (POST /checkout/v1/payment). This lets you turn recovery on/off, or set a different recovery window, for specific orders instead of relying on the merchant-level Dashboard default.

Request parameters

Body parameter
Type
Mandatory
Description

order.recover_abandoned_cart

boolean

Conditional — VA, O2O, and Credit Card only

If sent as true, the customer can recover this order after it expires, as long as expired_recovered_cart has not lapsed.

order.expired_recovered_cart

number

Conditional — VA, O2O, and Credit Card only

The expiry window (in minutes) for the recovered order — i.e. how long the customer has to complete payment after clicking the recovery link. Max value: 44640 minutes (31 days).

expired_recovered_cart is separate from payment.payment_due_date. payment_due_date controls how long the original order stays open before it expires; expired_recovered_cart controls how long the recovered order stays open after the customer reopens it.

Response parameters

DOKU echoes both fields back in the Initiate Order response so you can confirm what was applied to the order:

Body parameter
Type
Mandatory
Description

response.order.recover_abandoned_cart

boolean

Conditional

Same as the request.

response.order.expired_recovered_cart

number

Conditional

Same as the request.

Dashboard vs API

This follows the same override pattern used elsewhere in Checkout Settings (e.g. payment_method_types, payment_due_date): the Dashboard setting defines the merchant-level default, while the API request parameters let you override that default on a per-order basis.

Configuration source
Scope
Behavior

Dashboard (Settings > Checkout Appearance > Expired Settings)

Merchant-level default

Applies to all Checkout orders unless overridden by the API request. Recovery period is set in days.

API request (order.recover_abandoned_cart, order.expired_recovered_cart)

Per-order

Overrides the Dashboard default for that specific order. Recovery period is set in minutes, and only applies to VA, O2O, and Credit Card.

If you don't send recover_abandoned_cart in the request, the order falls back to whatever is configured in the Dashboard.

Order status: ORDER_RECOVERED

To let merchants track recovery programmatically, the Check Status API returns a new order.status value once a previously expired order is successfully recovered and paid.

Value
Description

ORDER_GENERATED

Order has been created and is awaiting payment.

ORDER_EXPIRED

Order was not paid within payment_due_date and has expired.

ORDER_RECOVERED

An expired order was reopened by the customer via the recovery link and the payment was completed.

Sample Check Status API response

Body parameter
Type
Mandatory
Description

order.status

string

optional

Possible values: ORDER_GENERATED, ORDER_EXPIRED, ORDER_RECOVERED

Notification behavior

  • The Expired Order notification (configured under Settings > Checkout Page Notification) is sent when an order transitions to ORDER_EXPIRED.

  • No separate "recovered" webhook event is sent — once the customer completes payment through the recovery link, your standard payment/paid notification callback fires as usual, and the corresponding order will report order.status: ORDER_RECOVERED on subsequent Check Status API calls.


Monitoring Recovered Orders

  • Dashboard: Go to Report > Checkout Orders, open an order's Details, then check the Transaction History tab to see the full status trail — including expiry and recovery events.

  • API: Call the Check Status API with the order's invoice_number and read order.status.


Use Cases

  • Campaign / promo periods — recover carts abandoned due to urgency-driven traffic spikes.

  • B2B transactions — give business buyers more time to finalize payment without restarting the order.

  • Subscription renewals — automatically follow up on incomplete renewal payments.


Notes & Limitations

  • Available for Indonesian Business Accounts only.

  • Customers can reopen an expired order via the recovery email up to 3 times.

  • Per-order API control (order.recover_abandoned_cart / order.expired_recovered_cart)

  • Only applies to Virtual Account, Convenience Store/O2O, and Credit Card payment methods. Other channels rely solely on the Dashboard-level default.

  • Requires the Expired Order email notification to be active; without it, customers have no recovery entry point regardless of how the feature was enabled.

Last updated