Konfirm

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
WhatsApp is live. Enable it in Settings → WhatsApp. It uses the Meta-approved Utility template matching your message style and works alongside SMS and Email with waterfall fallback.

Installation

1

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).

2

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.

3

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.

4

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.

Webhook registration is automatic. Konfirm registers the orders/create and app/uninstalled webhooks automatically during installation. You don't need to configure anything in Shopify manually.

Requirements

RequirementDetails
Shopify planAny paid Shopify plan (Basic and above)
SMSBuilt-in Twilio for India only (valid +91 mobiles). For other countries: bring your own MSG91 or Twilio account.
EmailNone required — Konfirm includes built-in email via Resend. Optional: configure custom SMTP for your own domain.
COD gatewayA Shopify payment method configured for COD / Cash on Delivery
Checkout extensionOnline Store 2.0 theme (required for the thank-you page status widget)
WhatsAppOptional — 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.

India only (built-in SMS). Built-in Twilio SMS is not available for other countries. To send SMS outside India — or to use your own sender ID / DLT template — enable Use your own SMS provider in Settings → SMS and enter your MSG91 or Twilio API details.

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.

FieldWhere to find it
API KeyMSG91 dashboard → API → Auth Key
Sender IDYour DLT-approved sender ID (e.g. MYSHOP)
Template IDYour DLT-approved template ID (required for India)
India DLT compliance. If you are sending SMS to Indian phone numbers, your MSG91 sender ID and message template must be registered and approved under India's DLT (Distributed Ledger Technology) system via the MSG91 portal. Approval typically takes 1–3 business days. This is a regulatory requirement — not a Konfirm limitation.

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.

FieldWhere to find it
Account SIDTwilio console → Dashboard → Account Info
Auth TokenTwilio console → Dashboard → Account Info
From numberYour Twilio phone number or Messaging Service SID
Only one SMS provider is active at a time. Switch providers from Settings → SMS Provider at any time without losing any order data.

Email

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.

SettingDescription
SMTP HostYour mail server hostname, e.g. smtp.gmail.com
SMTP Port587 (TLS) or 465 (SSL). Default: 587
Encryptiontls, ssl, or none
UsernameYour SMTP login (usually your email address)
PasswordYour SMTP password or app-specific password
From addresse.g. orders@yourstore.com
From namee.g. YourStore Orders

Common provider settings

# Gmail (use an App Password if 2FA is enabled) SMTP Host: smtp.gmail.com Port: 587 Encryption: tls Username: you@gmail.com # SendGrid SMTP Host: smtp.sendgrid.net Port: 587 Username: apikey Password: SG.xxxxxxxxxxxxxxxx (your API key) # Mailgun SMTP Host: smtp.mailgun.org Port: 587 Username: postmaster@mg.yourdomain.com
Use the Send test email button in Settings to verify your SMTP configuration before going live.

Message Styles & Languages

8 styles × 8 languages for SMS, Email & WhatsApp on Settings → General. Available on every plan, including Free — save any style and language combination.

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)

Friendly & Simple Fast Shipping Focus Premium Brand Style Limited Stock Urgency Short & Clean Shipping Confirmation Customer-Friendly Verification Style

Languages

English हिन्दी Hindi اردو Urdu العربية Arabic Français বাংলা Bangla Español ไทย Thai

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)

Hi {name}, thanks for shopping at {store}! We've received your COD order {order} ({currency} {amount}). Confirm: {confirmation_link} Cancel: {cancel_link}

Available variables (SMS / Email)

VariableExample valueDescription
{name}AaravCustomer's first name
{store}Acme StoreShop / storefront name
{order}#1043Shopify order number
{amount}1,299.00Order total, formatted
{currency}INROrder currency code
{items}Shirt x1, Jeans x2Short 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
SMS length. Keep custom SMS templates under 160 characters when possible to avoid carrier splitting. Built-in styles vary in length — Short & Clean is best for tight limits.

Retry Logic

Konfirm can automatically re-send the confirmation message if the customer hasn't responded after a configurable delay (Settings → General).

SettingDefaultRange
Retry count10 – 3
Retry delay30 minutes15 – 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 customer in 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"
This setting is irreversible for the order. Enable it only if your fulfilment workflow supports automatic cancellations.

Order Flow

Here is the complete lifecycle of a COD order through Konfirm:

  1. Customer places a COD order on your Shopify store.
  2. Shopify fires an orders/create webhook to Konfirm within seconds.
  3. Konfirm validates the order is COD, checks the plan confirmation limit, and queues a background job.
  4. The job creates a CodOrder record and a unique confirmation token (valid 24 hours).
  5. A second job fires 15 seconds later and sends the confirmation via the first successful channel (SMS, Email, or WhatsApp).
  6. The customer taps Confirm or Cancel — in WhatsApp, via the SMS/email link, or both.
  7. On success, the order status is updated atomically and the Shopify order is tagged.

Order status values

StatusShopify tagMeaning
pendingConfirmation sent, waiting for customer response
confirmedcod-confirmedCustomer tapped Confirm
cancelledcod-cancelledCustomer tapped Cancel
expiredcod-expiredLink expired after 24 hours with no response

WhatsApp

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 stylekonfirm_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 variableValue
{{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
Meta template setup. Button base URLs in your Meta template must end with a trailing slash (e.g. 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

  1. In your Shopify admin, go to Online Store → Themes → Customize
  2. In the page selector, choose Order status / Thank you
  3. Click Add block and search for Konfirm COD Verify
  4. Add and position the block, then click Save
The extension only shows for COD orders. For non-COD orders it renders nothing, so it is safe to add to all pages.

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.

Order Tags

Konfirm writes tags directly to the Shopify order via the Admin API. You can use these tags to filter orders, trigger automations in Shopify Flow, or drive your fulfilment logic.

TagWhen applied
cod-confirmedCustomer confirmed their order
cod-cancelledCustomer cancelled their order
cod-expiredConfirmation link expired after 24 hours with no response

Using tags in Shopify Flow

Example automation: When order tag contains cod-confirmed → assign to fulfilment queue.

Example automation: When order tag contains cod-cancelled → notify fulfilment team, skip picking.

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:

cash on delivery cod manual (empty string) or any gateway that contains the substring "cod"

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.

TopicPurpose
orders/createTriggers COD detection and confirmation dispatch
app/uninstalledMarks the shop as uninstalled, revokes access token
customers/data_requestGDPR — emails customer data export to shop owner
customers/redactGDPR — anonymises customer PII in Konfirm database
shop/redactGDPR — deletes all shop data 48 hours after uninstall
Webhook endpoints always respond with 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.

When contacting support, include your Shopify store domain and the order number(s) you're having trouble with. This helps us resolve issues much faster.