Hide COD, COD fee, partial COD or OTP: which fits your store
Each method fixes a different problem, so start from the problem you have:
- Hide COD for the orders most likely to be refused, such as big carts, first orders or repeat refusers. Everyone else keeps COD.
- Charge a COD fee if collecting cash costs you money on orders that arrive. It does little against refusals, because the fee is collected at the door with the rest.
- Take a deposit (partial COD) when you won't ship without some money in hand.
- Verify the phone number with a one-time code (OTP) when fake numbers and prank orders are the problem. It can't stop a real shopper who changes their mind.
Hiding COD for risky orders
How it works on Shopify. Apps change the payment step with a payment customization Function, which can hide, rename or reorder payment methods at checkout. Shopify says stores on any plan can use public App Store apps that contain Functions. Only custom apps with Functions need Shopify Plus. The app's rules decide which checkouts lose COD: carts above an amount, first orders, customers you've tagged, certain products or certain areas.
What the shopper sees. Low-risk shoppers see COD as usual. A risky checkout shows only your online methods. There's no extra step.
What it costs. The app's price, if any. The bigger cost is shoppers who wanted to pay cash and leave instead. You can't know that number in advance, so start with a narrow rule and watch your sales.
- Pros: the risky order is never placed as COD, so no parcel goes out and comes back. Low-risk shoppers notice nothing.
- Cons: some shoppers without a card or wallet will leave. A rule only catches what it describes, so a small order from a fake number still gets COD. Shopify doesn't run payment customizations in the admin, in POS, or on orders created through its order API.
Khaleeji COD uses this method. It hides or renames COD by rule, and it doesn't charge fees, take deposits or send codes. See how to hide COD above a cart total and how to block COD for specific customers with tags.
Charging a COD fee
How it works on Shopify. Shoppers who choose COD pay an extra charge. Shopify has no setting for this. A manual payment method has a name, additional details and payment instructions, and Shopify's help page lists no fee option. Payment customization Functions can hide, reorder and rename methods, but adding a charge isn't one of their operations. So COD fees come from an app, a fee product added to the cart, or a charge built into a shipping rate. Test that the fee appears only when COD is chosen.
What the shopper sees. A higher total for paying cash. Show it clearly before the order is placed: a surprise amount at the door is one more reason to refuse.
What it costs. Nothing per order, because the shopper pays. But a refused parcel brings in nothing, fee included, and you still pay shipping both ways.
- Pros: delivered COD orders pay their own cash-handling cost. Some shoppers switch to paying online to avoid the fee. COD stays open to everyone.
- Cons: it doesn't stop refusals, some shoppers will leave at checkout, and on Shopify it needs an app or a workaround.
Partial COD: a deposit online, the rest in cash
How it works on Shopify. The shopper pays part of the order online before you ship, for example the shipping cost or a share of the total, and the rest in cash at the door. Manual payment methods have no deposit option either, so partial COD needs an app or a manual process, such as a separate payment link for the deposit. Check how your tool records the order: the courier must know the right amount to collect, and the order in Shopify should show what's paid and what's still due.
What the shopper sees. Two payments for one order. They need a card or wallet for the deposit, so a shopper who can't pay online at all is turned away, much as if COD were hidden.
What it costs. The tool's price, plus the usual online payment fees on the deposit. If a parcel is refused, you keep the deposit or refund it, depending on your policy. Say which in your COD policy.
- Pros: a refusal costs the shopper something, which puts off impulse and prank orders. It suits custom-made and high-value items.
- Cons: it has the most friction of the four, adds work (two payments per order, refunds when you cancel), and shuts out shoppers with no online payment method.
OTP or phone verification
How it works on Shopify. The shopper gets a one-time code by SMS or WhatsApp and types it in before the order is placed. Adding your own step inside Shopify's information, shipping or payment pages uses checkout UI extensions, which Shopify makes available only to Plus stores. On other plans, OTP usually runs outside Shopify's checkout, in a COD order form on the product or cart page.
If you also hide COD, check how the two fit together. Shopify lists orders created through its order API, and draft orders created in the admin, among the places payment customizations don't run. If a COD form creates orders that way, checkout rules such as hiding COD won't apply to them.
What the shopper sees. One more step, and a short wait for the code. If the code doesn't arrive, the sale is lost.
What it costs. You pay per message. SMS prices depend on your provider and the country. For WhatsApp, codes go out as template messages, and Meta charges per delivered template message, with rates that depend on the message category and the recipient's country (checked 26 October 2026). Verification codes fit the "authentication" category, which Meta describes as messages for identity verification.
- Pros: it catches typos, fake numbers and prank orders before anything ships, and everyone who verifies keeps COD.
- Cons: a verified shopper can still refuse, you pay for messages on orders that would have been fine, and below Plus it usually means using a form instead of Shopify's standard checkout.
For confirmation after the order, read confirming COD orders by phone, SMS or WhatsApp.
Which one fits your store?
| Your main problem | Start with |
|---|---|
| Fake numbers and prank orders | OTP or a confirmation message |
| Big orders get refused | Hide COD above a cart total |
| The same customers keep refusing | Hide COD for customers you've tagged |
| Collecting cash eats your margin on delivered orders | A COD fee |
| Custom-made or high-value items get refused | A deposit, or hide COD for those products |
Side by side:
| Method | Protects you from a refused parcel? | Extra step for the shopper | Who pays |
|---|---|---|---|
| Hide COD | Yes, for the orders your rules catch | None | You, in some lost sales |
| COD fee | No | None, but a higher total | The shopper |
| Deposit | Partly: you can keep the deposit | A second payment | You, in tool and payment fees |
| OTP | Only against fake or wrong numbers | Typing a code | You, per message |
Can you combine them?
Yes, because they cover different problems. For example, hide COD for big carts and repeat refusers and confirm phone numbers on the rest, or charge a fee and hide COD for customers who refused before.
Whatever you choose, compare your refusal rate before and after. To put a money figure on each refusal, read what one refused COD order really costs.
Sources
- Shopify.dev: Payment customization Function API
- Shopify.dev: About Shopify Functions
- Shopify Help Center: Manual payment methods
- Shopify.dev: Checkout UI extensions
- Meta for Developers: WhatsApp Business Platform pricing
Checked on the date above. Shopify and courier settings change, so check the source if something looks different.