Overview
Konfirm is a Shopify app that automatically verifies Cash on Delivery (COD) orders before they ship. When a customer places a COD order, Konfirm immediately sends them a confirmation message via SMS, Email, and/or WhatsApp — every channel uses one-tap Confirm/Cancel links, no OTP typing.
The result is tagged in real time on the Shopify order — cod-confirmed or cod-cancelled — so your fulfilment team always knows which orders are safe to ship.
Key benefits
- Reduce Return-to-Origin (RTO) losses from unverified COD orders
- Built-in SMS (Twilio — India only), Email (Resend), and WhatsApp (Meta Cloud API). Optionally bring your own SMS provider for any other country.
- Three customer paths: WhatsApp buttons, SMS/email link, and thank-you page status widget
- Smart channel priority with automatic fallback (Auto: WhatsApp → SMS → Email)
- Message styles & languages for every channel — SMS, Email and WhatsApp (one Meta-approved template per style)
- Embedded dashboard in Shopify admin — no separate login
Installation
Install from Shopify App Store
Click Add app on the Konfirm listing page. You'll be redirected through Shopify's OAuth flow to grant the required permissions (read_orders, write_orders).
You're ready — built-in senders work immediately
Email (Resend) and WhatsApp (Meta Cloud API) work worldwide out of the box. Built-in SMS (Twilio) currently supports India only — valid Indian mobiles (+91). For any other country, connect your own MSG91 or Twilio account in Settings → SMS. See SMS, Email, and WhatsApp.
Choose delivery priority & message language
On Settings → General, set primary channel (Auto or pin WhatsApp / SMS / Email), retry settings, and message style & language. Style and language apply to all channels, including WhatsApp.
Enable the checkout extension
In your Shopify admin, go to Online Store → Customize → Thank you page and add the Konfirm COD Verify block. This shows a status widget that tells the customer where their confirmation was sent and updates automatically when they confirm.
orders/create and app/uninstalled webhooks automatically during installation. You don't need to configure anything in Shopify manually.
Requirements
| Requirement | Details |
|---|---|
| Shopify plan | Any paid Shopify plan (Basic and above) |
| SMS | Built-in Twilio for India only (valid +91 mobiles). For other countries: bring your own MSG91 or Twilio account. |
| None required — Konfirm includes built-in email via Resend. Optional: configure custom SMTP for your own domain. | |
| COD gateway | A Shopify payment method configured for COD / Cash on Delivery |
| Checkout extension | Online Store 2.0 theme (required for the thank-you page status widget) |
| Optional — enable in Settings → WhatsApp. Built-in sender included; any plan can connect their own WABA. |
SMS Providers
By default, Konfirm sends SMS via its own built-in Twilio account for India only. Confirmation SMS go to valid Indian mobile numbers (+91, 10 digits starting with 6–9). No Twilio setup is required for Indian stores.
If you want a custom sender ID, a DLT-approved template (India), or your own Twilio billing, enable Use your own SMS provider in Settings → SMS and enter your credentials below.
MSG91 (optional — India recommended)
Recommended for high-volume SMS in India. Required if you need a DLT-approved sender ID.
| Field | Where to find it |
|---|---|
| API Key | MSG91 dashboard → API → Auth Key |
| Sender ID | Your DLT-approved sender ID (e.g. MYSHOP) |
| Template ID | Your DLT-approved template ID (required for India) |
Twilio (optional — bring your own account)
Required for SMS outside India, or if you want confirmation SMS billed to your own Twilio account / a specific Twilio number.
| Field | Where to find it |
|---|---|
| Account SID | Twilio console → Dashboard → Account Info |
| Auth Token | Twilio console → Dashboard → Account Info |
| From number | Your Twilio phone number or Messaging Service SID |
By default, Konfirm sends confirmation emails via its own built-in Resend mailer (from noreply@konfirm.pacificsoftwares.com). No SMTP setup is required.
To send emails from your own domain (e.g. orders@yourstore.com), enable Use custom SMTP in Settings → Email and fill in the fields below.
| Setting | Description |
|---|---|
| SMTP Host | Your mail server hostname, e.g. smtp.gmail.com |
| SMTP Port | 587 (TLS) or 465 (SSL). Default: 587 |
| Encryption | tls, ssl, or none |
| Username | Your SMTP login (usually your email address) |
| Password | Your SMTP password or app-specific password |
| From address | e.g. orders@yourstore.com |
| From name | e.g. YourStore Orders |
Common provider settings
Message Styles & Languages
On Settings → General, choose a message style (tone) and language. Both apply to every channel: SMS and Email fill the style copy directly, and WhatsApp sends the Meta-approved Utility template for that style (each style + language edition must be Active in Meta).
Message styles (all channels)
Languages
When you connect your own SMS or SMTP provider, you can also edit custom templates on that channel’s tab. Use the variable placeholders below.
Default SMS template (Friendly / English)
Available variables (SMS / Email)
| Variable | Example value | Description |
|---|---|---|
| {name} | Aarav | Customer's first name |
| {store} | Acme Store | Shop / storefront name |
| {order} | #1043 | Shopify order number |
| {amount} | 1,299.00 | Order total, formatted |
| {currency} | INR | Order currency code |
| {items} | Shirt x1, Jeans x2 | Short line-item summary |
| {verify_url} | https://…/verify/t4x… | Confirm/Cancel page (alias of confirmation_link) |
| {confirmation_link} | https://…/verify/t4x… | Same verify URL (used in built-in SMS styles) |
| {cancel_link} | https://…/verify/t4x… | Same verify URL — page has both Confirm and Cancel |
Retry Logic
Konfirm can automatically re-send the confirmation message if the customer hasn't responded after a configurable delay (Settings → General).
| Setting | Default | Range |
|---|---|---|
| Retry count | 1 | 0 – 3 |
| Retry delay | 30 minutes | 15 – 120 minutes |
If all retries are exhausted and the order is still unverified after 24 hours, the order status is set to expired and tagged cod-expired in Shopify.
Auto-cancel on Rejection Pro / Elite
When enabled (Pro or Elite), Konfirm will automatically call the Shopify Cancel Order API the moment a customer taps Cancel on their confirmation link or WhatsApp button. This removes manual work for your team.
- The cancellation reason is set to
customerin Shopify - Shopify's default cancellation email is suppressed — Konfirm has already notified the customer
- A note is added to the order timeline: "Cancelled by customer via Konfirm COD verification"
Order Flow
Here is the complete lifecycle of a COD order through Konfirm:
- Customer places a COD order on your Shopify store.
- Shopify fires an
orders/createwebhook to Konfirm within seconds. - Konfirm validates the order is COD, checks the plan confirmation limit, and queues a background job.
- The job creates a
CodOrderrecord and a unique confirmation token (valid 24 hours). - A second job fires 15 seconds later and sends the confirmation via the first successful channel (SMS, Email, or WhatsApp).
- The customer taps Confirm or Cancel — in WhatsApp, via the SMS/email link, or both.
- On success, the order status is updated atomically and the Shopify order is tagged.
Order status values
| Status | Shopify tag | Meaning |
|---|---|---|
pending | — | Confirmation sent, waiting for customer response |
confirmed | cod-confirmed | Customer tapped Confirm |
cancelled | cod-cancelled | Customer tapped Cancel |
expired | cod-expired | Link expired after 24 hours with no response |
WhatsApp is a third delivery channel alongside SMS and Email. Enable it in Settings → WhatsApp. It is off by default until you opt in.
Konfirm sends the Meta-approved Utility template matching your selected message style — konfirm_otp for Friendly & Simple, plus fast_shipping, premium_brand, limited_stock, short__clean, shipping_confirmation, customer_friendly, and verification.
Template body variables
Variables follow the placeholder order of each style's body copy. For konfirm_otp (Friendly & Simple):
| Meta variable | Value |
|---|---|
{{1}} | Customer name |
{{2}} | Store name |
{{3}} | Order number |
{{4}} | Items summary |
{{5}} | Order total |
Styles without store/items in their body use fewer variables (e.g. fast_shipping: name, order, total).
Plus two dynamic-URL buttons: Confirm Order → /wa/confirm/{token} and Cancel Order → /wa/cancel/{token}.
Languages
Language follows Settings → General → Language (en, hi, ur, ar, fr, bn, es, th). Each language must be an Active edition of the same template name in Meta Business Manager. If a language is still In review, Send Test / live sends for that locale will fail until Meta approves it.
- Built-in sender via Meta Cloud API — no WABA setup required
- Any plan can connect their own WhatsApp Business phone number and access token (same 5-var + button structure)
- Custom WABA: leave template language blank to follow General → Language
- Test send available in Settings before going live
https://your-app.com/wa/confirm/) — do not embed {{1}} in the base URL. Konfirm appends the token automatically. Do not edit an already-Active 3-variable template in place; create/approve a 5-variable Friendly body (or a new template name and set WHATSAPP_TEMPLATE_NAME).
Customer Verification
All channels use one-tap Confirm/Cancel — no OTP typing anywhere.
Path 1 — WhatsApp
The customer taps Confirm Order or Cancel Order directly in the WhatsApp message. Konfirm tags the Shopify order instantly.
Path 2 — SMS or Email link
SMS and email both contain a direct link (/verify/{token}). Tapping it opens a mobile-optimised page with Confirm and Cancel buttons.
Path 3 — Shopify thank-you page
The Konfirm checkout extension shows a status widget on the order confirmation page. It tells the customer which channel their message was sent to (e.g. "Open the link in your WhatsApp") and polls for status. When the customer confirms elsewhere, the widget updates automatically — no buttons or code entry on the thank-you page itself.
Link security
- Each order gets a unique 48-character token, valid for 24 hours and single-use
- Confirmation is atomic — two simultaneous submits cannot both succeed
- Expired or already-used tokens show a friendly "link expired" page
Checkout Extension
Konfirm includes a Shopify checkout extension that renders a status widget on the purchase.thank-you page. No theme code changes are required.
Activating the extension
- In your Shopify admin, go to Online Store → Themes → Customize
- In the page selector, choose Order status / Thank you
- Click Add block and search for Konfirm COD Verify
- Add and position the block, then click Save
How the widget works
After checkout, the extension polls /api/checkout/status every 2 seconds until the background job has sent the confirmation (usually within 15–30 seconds). Once ready, it shows channel-specific instructions (e.g. "Open the link in your WhatsApp"). When the customer confirms via their message, the widget updates to show confirmed or cancelled — automatically, with no input required on the thank-you page.
Free Plan
- 10 COD orders per month, per store
- SMS, Email, and WhatsApp via built-in senders (or your own providers)
- Custom templates when using your own SMS / SMTP
- Message template & language — all styles and languages on every channel
- Real-time order tagging, thank-you page widget, dashboard
- No auto-cancel
The counter resets on the 1st of each calendar month. When the limit is reached, new COD orders are not processed until the counter resets or you upgrade.
Pro Plan — $4.99/mo or $49/yr
- 100 COD confirmations per month
- Everything in Free (including all message styles and languages)
- Auto-cancel on rejection
- Higher Send Test limits
Billing is handled by Shopify's recurring app charge — upgrade and cancel from your Shopify admin at any time.
Elite Plan — $9.99/mo or $99/yr
- Unlimited COD confirmations
- Everything in Pro (styles, languages, auto-cancel)
- Best for high-volume COD stores
Same Shopify billing flow as Pro. Cancel anytime from Shopify admin → Settings → Billing → Subscriptions.
COD Detection
Konfirm identifies COD orders by inspecting the gateway field on the Shopify order payload. Orders are treated as COD if the gateway value matches any of the following:
If you use a custom COD gateway name, contact support to add it to your detection rules.
Webhooks
Konfirm registers the following webhooks automatically on install. All are verified with Shopify's HMAC signature.
| Topic | Purpose |
|---|---|
orders/create | Triggers COD detection and confirmation dispatch |
app/uninstalled | Marks the shop as uninstalled, revokes access token |
customers/data_request | GDPR — emails customer data export to shop owner |
customers/redact | GDPR — anonymises customer PII in Konfirm database |
shop/redact | GDPR — deletes all shop data 48 hours after uninstall |
200 OK immediately and process the payload asynchronously via a background queue. This ensures Shopify never retries due to a slow response.
GDPR Compliance
Konfirm implements all three Shopify-mandatory GDPR webhooks:
customers/data_request
When Shopify sends a data request for a customer, Konfirm emails a summary of all COD order records held for that customer (order number, amount, status, date) to the shop owner's registered email address.
customers/redact
Anonymises customer_phone, customer_email, and sets customer_name to [redacted] for all matching COD orders within that shop. The scope is strictly limited to the requesting shop — no cross-shop data is affected.
shop/redact
Deletes all data for a shop (including COD orders, SMS attempts, tokens, and settings) 48 hours after uninstall. Only triggers if the shop has an uninstalled_at timestamp — active shops are never affected.
FAQ
Does Konfirm work out of the box without any configuration?
Yes for Email and WhatsApp. Built-in SMS currently supports India only (valid +91 mobiles via Twilio). Install the app, optionally enable WhatsApp, add the checkout extension to your theme, and enable COD. For SMS outside India, connect your own MSG91 or Twilio API details in Settings → SMS — no other API keys needed unless you want custom Email/WhatsApp too.
Is built-in SMS available outside India?
No. Built-in Twilio SMS is India-only. For any other country, enable Use your own SMS provider in Settings → SMS and add your MSG91 or Twilio credentials. WhatsApp and Email remain available worldwide via the built-in senders.
What happens if a channel fails to deliver?
Konfirm walks your enabled channels in priority order and only falls back to the next channel if a send fails. Each attempt is logged. If the provider returns an error, the job may retry with backoff; if all channels fail, you'll see it in the Dashboard. Customer-facing retries (re-send if no response) are configured separately under Settings → General.
Does message style change WhatsApp?
Yes. Each message style has its own Meta-approved Utility template (e.g. premium_brand, verification), so WhatsApp copy follows your selected style. Language on General controls which Meta language edition is used. If you bring your own WABA, your own template is used instead.
Does Konfirm work with headless / custom storefronts?
Partially. The webhook-based confirmation dispatch works for any Shopify store regardless of storefront. The checkout extension (thank-you page status widget) requires Shopify's native checkout and Online Store 2.0. For headless storefronts, customers use the link in their SMS, email, or WhatsApp message to confirm.
Will it interfere with my existing order automations?
No. Konfirm only reads orders via the webhook and writes order tags. It does not modify order status, payment status, fulfilment status, or any other Shopify order field beyond tags.
Can I change the verification link domain?
The verification link uses your Konfirm app URL. Custom domain support is on the roadmap.
What's the difference between Pro and Elite?
Pro includes 100 confirmations per month plus auto-cancel and higher Send Test limits. Elite is the same feature set with unlimited confirmations. Message styles and languages are included on every plan, including Free.
Contact & Support
Have a question not covered here? We're happy to help.
- Email: hello@pacificsoftwares.com
- Response time: within 1 business day