Skip to main content

Cash on Delivery

Cash on Delivery (COD) is the dominant payment method across most of the MENA region, and it behaves differently from every online gateway: the order is created the moment the shopper checks out, before any money exists.

There are no credentials to enter. Enable it and it appears at checkout.


Enabling COD

Settings → Payments → Cash on Delivery → Activate.

The shopper sees it at checkout as "Cash on Delivery" (Arabic: الدفع عند الاستلام, French: Paiement à la livraison).


Settings

SettingDefaultWhat it does
COD handling fee0Fixed amount added to every COD order. Shown to the shopper as a separate line before they confirm.
Maximum COD order amountnoneBlocks COD checkout above this total. Leave empty for no limit.
Send order confirmation emailonEmails the customer when the COD order is placed.
Require phone verificationoffNot currently enforced. The setting saves, but no verification step runs at checkout.

The maximum is compared against items + shipping + tax, before the handling fee. A shopper over the limit cannot complete checkout with COD — they get an error and must choose another method, so set the ceiling where you actually want to stop taking cash risk.

Use the maximum as a risk control

A COD ceiling is the cheapest anti-RTO lever you have. Orders above it are pushed toward prepaid methods, which is exactly the behaviour you want on high-value baskets.


The COD order lifecycle

  1. Shopper checks out. The order is created with payment status Unpaid and fulfillment status Unfulfilled.
  2. You fulfill and ship it. See Fulfillment.
  3. The courier collects the cash.
  4. You mark the order paid in the dashboard.

Marking paid sets the payment to Paid, stamps the collecting method onto the payment record, and writes a manual_payment_marked_as_paid entry to the order timeline. If the order contains digital products, their download links are issued at this moment.

You can record the collection against a different method than COD — useful when the customer ended up paying by bank transfer or wallet on delivery. Choose other to keep the original method as recorded.

An order that is already Paid cannot be marked paid again (PAYMENT_ALREADY_PAID).


COD and returns

A COD order that is never paid has nothing to refund. The return flow requires a payment in Paid or Partially paid state, so a refused delivery on an unpaid COD order is handled by cancelling the order, not by refunding it — see Cancellations.

Cancel with restock items ticked to return the unshipped units to inventory.


What COD does not do yet

Being explicit so you don't plan around features that aren't live:

  • Phone/OTP verification — the setting exists but no verification runs.
  • Deposits or partial prepayment — not supported; COD is all-or-nothing.
  • Automatic hold on risky COD orders — order risk is scored, but nothing acts on the score automatically.