Add identity verification to your Shopify store. Choose when to verify, who to verify, and what happens after — all from the Shopify Admin, no code required.
The iDenfy Shopify app embeds identity verification directly into your store. Decide when customers verify (4 flows), who is asked (conditional triggers), and what happens after (order holds, auto-refunds, emails) — all from the Shopify Admin.
Install from the App Store
One-click install with automatic permission setup.
The Shopify app combines a Shopify Admin app (built on Remix + Polaris), a Theme App Extension (Liquid), and a Checkout/Customer Account UI extension (React). When a verification trigger fires, the storefront fetches a one-time authToken from iDenfy, opens iDenfy’s hosted UI, and writes the result back onto the Shopify customer and order via metafields, tags, and notes.
You don’t need to manage any of the moving parts — the app handles tokens, webhooks, geolocation, holds, and refunds. This section is here so you know what to look for when something doesn’t behave as expected.
A Shopify store on any plan that supports apps and theme editing
1
Install the iDenfy app
Install from the Shopify App Store and approve the requested permissions (customers, orders, products, collections, fulfillment).On first install the app pulls your existing collections, products, and customers into its database so they can be used in trigger rules.
2
Connect your iDenfy account
Open the iDenfy Admin page inside Shopify and connect using one of two methods:
iDenfy login (recommended)
Manual API key
Sign in with your iDenfy credentials — the API key is fetched automatically and rotated by iDenfy.
The API secret is encrypted in storage and cannot be read back after saving. Save a copy somewhere safe before pasting.
3
Choose a verification flow
Pick exactly one flow — see Verification Flows below for the trade-offs. Your choice is also written to a shop metafield so theme extensions can read it at runtime.
You pick one flow per store. Each flow controls where the verify button appears and when the customer is asked.
Flow
Where the button appears
Best for
Account page
Customer account page (Legacy & new)
Pre-qualify customers before they can check out
Before checkout
Cart page or cart drawer
Block checkout until verified
During checkout
The checkout page itself
Verify mid-checkout without leaving Shopify
After checkout
Thank-you & Order-status pages
Let purchase complete, then verify (with hold/refund)
Account page flow
The verification button is shown on the customer account page. The checkout button is hidden site-wide until the customer is verified. If they are already verified, a success badge is shown.
Before checkout flow
The verification button replaces the cart and checkout buttons whenever the cart matches a trigger rule. The check re-runs whenever the cart contents change.
During checkout flow
The verification button appears on the checkout page itself via a Checkout UI extension. Checkout progress is blocked until verification succeeds.
After checkout flow
The order completes normally; the customer is prompted to verify on the Thank-you and Order status pages. Combined with Order State Management, this enables hold-and-refund behavior.
Flow-restricted features. A few features are only available in the After-checkout flow because they need the order or shipping address to exist first:
In the ID Verification flow card you can layer multiple conditional triggers. The customer is asked to verify only when at least one rule matches.
Rule
Description
Flow restriction
Daily money limit
Customer’s total ordered amount today reaches the limit.
All flows
Monthly money limit
Same, month-to-date.
All flows
Daily order count
Trigger after N orders today.
All flows
Monthly order count
Same, month-to-date.
All flows
By region
Trigger for customers in specific countries or US states. Detected via browser geolocation or shipping address.
Shipping-address detection is after-checkout only
By risk factor
Trigger when the order’s Shopify risk score reaches low / medium / high. Optional “trigger when no risk factor yet” checkbox.
After-checkout only
By product / collection
Narrow all the above triggers to carts containing specific products or collection items.
All flows
How browser geolocation works
The storefront requests the browser’s coordinates via the Geolocation API.
Coordinates are POSTed to /apps/sdk/geolocation and stored as customer metafields (idenfy.geolocation_latitude, idenfy.geolocation_longitude, idenfy.geolocation_date).
Coordinates older than ~5 min on the cart page are refreshed automatically. Coordinates older than 1 hour are flagged in logs but still used.
The server uses PostGIS geometry to check whether the coordinates fall inside any of the configured countries or US states.
Available only in the After-checkout flow.When Automatically manage Shopify’s order state is enabled:
1
Order placed
If any KYC rule matches the order, the app puts the order’s fulfillment on hold immediately.
2
Customer prompted
The customer sees the verify button on the Thank-you and Order-status pages. Optionally, an email is sent.
3
On success — auto-release
If KYC returns APPROVED, the hold is released and the order proceeds to fulfillment automatically.
4
On timeout — auto-cancel & refund
If verification is not completed within the configured Order refund timeframe (1 hour – 4 weeks), a cron job cancels the order and refunds the customer.
Two optional transactional emails are configurable here:
Ask Complete KYC — sent while the order is on hold.
Order Cancelled — sent when the order is auto-cancelled.
By default, emails are sent from iDenfy’s shared address. You can configure a custom domain via Resend:
1
Configure identity
Open Configure custom email sender identity. Enter a username (e.g. noreply), domain, and AWS region (us-east-1, eu-west-1, sa-east-1, or ap-northeast-1).
2
Verify domain
Open Verify custom email sender identity. Add the DNS records shown to your domain registrar. Resend verifies the records on its side.
3
Edit templates
Once verified, an Edit email template button appears for each email type. You can customize both the text and HTML bodies.
Available template variables
Variable availability depends on the email type:
Variable
Available in
{firstName}, {lastName}
All emails
{orderNumber}
All order-bound emails
{orderStatusPageUrl}
Ask Complete KYC
{timeframe}
Ask Complete KYC
{reason}
Failed KYC
{manageOrderState}
Successful KYC (inserted when Order State Management is on)
Custom templates can only be saved while a verified custom identity exists, but they are kept in the database if you later reset the identity — so re-verifying won’t lose your work.
When verification is tied to an order (Before checkout with a logged-in customer, During checkout, or After checkout):
Order Notes — the app appends a line summarizing status, scan reference, and any fraud / mismatch tags.
Order Tags — the same idv-<status> tag is added.
Fulfillment hold / release — automatic, under Order State Management.
Order cancellation & refund — automatic, if the order remains unverified past the configured timeframe.
If the customer was not logged in during verification (guest checkout in the Before-checkout flow), only the order is updated. The app has no Shopify customer record to write to.
Automatically delete customer scan references — when a customer is deleted in Shopify, their iDenfy scan reference is also deleted via the iDenfy API.
Customer scan-ref removal table — a searchable, paginated list of customers with an idenfy.scan_ref metafield. You can manually delete a scan reference; the metafield is then replaced with "Deleted on iDenfy Dashboard" so the action is visible in the customer record.
The signing key on the iDenfy Dashboard webhook must be identical to the API key the Shopify app is connected with. Mismatch causes every webhook to be rejected and no verifications will appear in the store. Re-paste the key on the iDenfy Dashboard if results stop appearing.
Geolocation permission missing
Verification triggered by By region with browser geolocation requires the customer to grant location permission. The block has configurable “geolocation permission notice” and “retry” copy — make sure those are translated and visible. If the customer denies permission, no coordinates are submitted and the region rule cannot fire.
“Order not ready” / retry
On the Thank-you page the app may briefly show an “order not ready” message while Shopify finishes writing the order. The page polls automatically; no action is required.
SUSPECTED verifications
SUSPECTED means iDenfy verified the identity but flagged the result for human review. By default these customers are not treated as verified — they appear with the idv-suspected tag and Order State Management keeps the order on hold until the status is changed on the iDenfy Dashboard.
Custom themes — buttons not hidden
If your theme uses non-standard CSS classes for the checkout or cart buttons, the default selectors will miss them. Update the Checkout button selector and Cart alter buttons selector in the app-embed block settings (comma-separated CSS selectors are supported).