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 and opens iDenfy’s hosted UI. It then 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 you can use them 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
Select 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 select 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)
You can only save custom templates while a verified custom identity exists. 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. 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).
Tune document types, liveness, languages, and branding for everything triggered from Shopify.
Webhook Payload Reference
Full payload spec for the verification results the app receives.
Testing & Sandbox
Simulate APPROVED / DENIED / SUSPECTED results before going live.
Other Plugins
WooCommerce, Adobe Commerce, WordPress, Zapier.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"iDenfy Documentation","description":"Integrate identity verification, business verification, AML screening, and fraud prevention into your platform.","colors":{"primary":"#734BFB","light":"#9B7BFC","dark":"#5A2FE0"},"logo":{"light":"https://mintcdn.com/idenfy/aMmsrDpzQlHq3f58/logo/light.svg?fit=max\u0026auto=format\u0026n=aMmsrDpzQlHq3f58\u0026q=85\u0026s=e2c9be61445008ddc363f696904c4607","dark":"https://mintcdn.com/idenfy/aMmsrDpzQlHq3f58/logo/dark.svg?fit=max\u0026auto=format\u0026n=aMmsrDpzQlHq3f58\u0026q=85\u0026s=5649c5028f0d476336c7c409ff09455d"},"favicon":"https://mintcdn.com/idenfy/RiTtnFM9jz4M_Y-0/favicon.ico?fit=max\u0026auto=format\u0026n=RiTtnFM9jz4M_Y-0\u0026q=85\u0026s=7ae1822a59f6abddf043ef7ac3aa640e","api":{"openapi":["openapi/kyc.yaml","openapi/kyb.yaml","openapi/aml.yaml","openapi/bank.yaml","openapi/face-authentication.yaml","openapi/age-estimation.yaml","openapi/bank-card.yaml"],"playground":{"display":"interactive"},"examples":{"languages":["bash","python","javascript","java","php","ruby","csharp","go","kotlin","swift"]}},"appearance":{"default":"system"},"background":{"decoration":"gradient"},"navbar":{"links":[{"href":"https://admin.idenfy.com","label":"Dashboard"},{"href":"https://status.idenfy.com/","label":"Status"}],"primary":{"type":"button","label":"Get Started Free","href":"https://idenfy.com/pricing-plans/"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/idenfy","github":"https://github.com/idenfy","x":"https://x.com/iDenfy"}},"search":{"prompt":"Search iDenfy docs..."},"seo":{"indexing":"navigable"},"fonts":{"family":"Inter"},"styling":{"eyebrows":"breadcrumbs","codeblocks":"system","latex":false},"metadata":{"timestamp":false},"navigation":{"global":{"anchors":[{"anchor":"API Reference","icon":"square-terminal","href":"/api-reference"},{"anchor":"Changelog","icon":"list","href":"/changelog"},{"anchor":"Support","icon":"life-ring","href":"https://idenfy-ivs.atlassian.net/servicedesk/customer/portal/1"},{"anchor":"Postman","icon":"rocket","href":"https://www.postman.com/idenfy-developers/idenfy-public-api/collection/gwjcqp9/idenfy-api-requests"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"idenfy","hasAudioNarration":false,"actualSubdomain":"idenfy","customDomains":["documentation.idenfy.com"],"gitSource":{"type":"github","owner":"domantasc","repo":"idenfy_documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae7fe8dd9508f4d57587cc2","collectionId":"9339c243-2296-42c6-b12b-c047dbde8e10","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae7fe8dd9508f4d57587cc2"},"feedback":{"thumbs":true,"agentFeedback":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae7feea800abb9c4ff8cf46","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Guides","count":137},{"language":"default","tag":"Business Verification","count":102},{"language":"default","tag":"API Reference","count":97},{"language":"default","tag":"API Documentation","count":71},{"language":"default","tag":"AML Screening","count":35},{"language":"default","tag":"ID Verification","count":34},{"language":"default","tag":"Dashboard Settings","count":27},{"language":"default","tag":"Webhooks","count":23},{"language":"default","tag":"SDKs","count":20},{"language":"default","tag":"ID Verification (KYC)","count":16}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@idenfy.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"integrations/shopify","slug":"/integrations/shopify","pageMetadata":{"title":"Shopify","description":"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.","icon":"shopify","last_updated":"2026-10-02","href":"/integrations/shopify"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"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.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Tab,Table,Tabs,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`The iDenfy Shopify app embeds identity verification directly into your store. Decide `,_jsx(_components.strong,{children:`when`}),` customers verify (4 flows), `,_jsx(_components.strong,{children:`who`}),` is asked (conditional triggers), and `,_jsx(_components.strong,{children:`what happens after`}),` (order holds, auto-refunds, emails) — all from the Shopify Admin.`]}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Install from the App Store`,icon:`shopify`,href:`https://apps.shopify.com/idenfy-id-verification`,children:_jsx(_components.p,{children:`One-click install with automatic permission setup.`})}),_jsx(Card,{title:`Pick a Verification Flow`,icon:`route`,href:`#verification-flows`,children:_jsx(_components.p,{children:`Account, cart, checkout, or post-purchase.`})}),_jsx(Card,{title:`Layer Conditional Triggers`,icon:`filter`,href:`#triggering-rules`,children:_jsx(_components.p,{children:`Cart value, region, risk score, products, collections.`})}),_jsx(Card,{title:`Automate Order State`,icon:`gavel`,href:`#order-state-management`,children:_jsx(_components.p,{children:`Hold, release, and refund orders based on KYC.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How It Works`}),`\n`,_jsxs(_components.p,{children:[`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 `,_jsx(_components.code,{children:`authToken`}),` from iDenfy and opens iDenfy’s hosted UI. It then writes the result back onto the Shopify customer and order via metafields, tags, and notes.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`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.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`quick-start`,children:`Quick Start`}),`\n`,_jsxs(Note,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Requirements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Active iDenfy `,_jsx(_components.strong,{children:`production environment`}),` (`,_jsx(_components.a,{href:`https://idenfy.com/pricing-plans-v2/`,children:`see pricing`}),`)`]}),`\n`,_jsxs(_components.li,{children:[`iDenfy `,_jsx(_components.strong,{children:`API key`}),` and `,_jsx(_components.strong,{children:`secret`}),` (`,_jsx(_components.a,{href:`/guides/dashboard/settings/api-keys`,children:`Dashboard → Settings → API Keys`}),`)`]}),`\n`,_jsx(_components.li,{children:`A Shopify store on any plan that supports apps and theme editing`}),`\n`]})]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Install the iDenfy App`,children:[_jsxs(_components.p,{children:[`Install from the `,_jsx(_components.a,{href:`https://apps.shopify.com/idenfy-id-verification`,children:`Shopify App Store`}),` and approve the requested permissions (customers, orders, products, collections, fulfillment).`]}),_jsxs(_components.p,{children:[`On first install the app pulls your existing `,_jsx(_components.strong,{children:`collections, products, and customers`}),` into its database so you can use them in trigger rules.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`iDenfy app installation in Shopify`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/install-app.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=e2ca8ca36f1175f88a21bbfb09df73e3`,\"data-og-width\":`1292`,\"data-og-height\":`838`,\"data-path\":`images/shopify/install-app.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/install-app.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=769375cf4d365cda48b10abd395ba170 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/install-app.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=044004f2ecab05efb52de17c87c6732c 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/install-app.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=24ef8f926b8d74e8686d32cfea85b85a 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/install-app.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=f256e11e1878a545ad5017ffc18dc9d2 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/install-app.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=ef492914112460fa7a3f2102a1dbd76c 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/install-app.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=85ab6405aa26ea1aa161a930f0f3339a 2500w`})})]}),_jsxs(Step,{title:`Connect Your iDenfy Account`,children:[_jsxs(_components.p,{children:[`Open the `,_jsx(_components.strong,{children:`iDenfy Admin`}),` page inside Shopify and connect using one of two methods:`]}),_jsxs(Tabs,{children:[_jsx(Tab,{title:`iDenfy Login (Recommended)`,id:`idenfy-login-recommended`,children:_jsx(_components.p,{children:`Sign in with your iDenfy credentials — the API key is fetched automatically and rotated by iDenfy.`})}),_jsxs(Tab,{title:`Manual API Key`,id:`manual-api-key`,children:[_jsxs(_components.p,{children:[`Paste the `,_jsx(_components.strong,{children:`API Key`}),` and `,_jsx(_components.strong,{children:`API Secret`}),` from `,_jsx(_components.a,{href:`/guides/dashboard/settings/api-keys`,children:`Dashboard → Settings → API Keys`}),`.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`The API secret is encrypted in storage and `,_jsx(_components.strong,{children:`cannot be read back`}),` after saving. Save a copy somewhere safe before pasting.`]})})]})]}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`iDenfy app credential configuration`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/app-config-initial.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=eeb4dfb0387e3f37784b2ab903ecc1c2`,\"data-og-width\":`2690`,\"data-og-height\":`1526`,\"data-path\":`images/shopify/app-config-initial.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/app-config-initial.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=7cf8e1cbacca18bb908a32da779f28a7 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/app-config-initial.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=806124a2d9fb154c399d77a022e7efbc 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/app-config-initial.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=c730f5baeed036d2ef79fabd60d9648c 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/app-config-initial.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=c666049ee907cbbe08fefa9ae35cd540 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/app-config-initial.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=6aa86dddc286921d5506c3f15dd01d05 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/app-config-initial.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=35f5a302aa8e531dacf23c797878b662 2500w`})})]}),_jsx(Step,{title:`Choose a Verification Flow`,children:_jsxs(_components.p,{children:[`Select exactly `,_jsx(_components.strong,{children:`one`}),` flow — see `,_jsx(_components.a,{href:`#verification-flows`,children:`Verification Flows`}),` below for the trade-offs. Your choice is also written to a shop metafield so theme extensions can read it at runtime.`]})}),_jsxs(Step,{title:`Configure the iDenfy Webhook`,children:[_jsxs(_components.p,{children:[`On the `,_jsx(_components.a,{href:`https://admin.idenfy.com/settings/v2/system-notifications`,children:`iDenfy Dashboard → Webhooks`}),`, add an `,_jsx(_components.strong,{children:`ID verification auto finish`}),` webhook.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Receiver:`}),` `,_jsx(_components.code,{children:`https://shopify.idenfy.com/api/sdk/verification/webhook`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Signing key:`}),` the same API key you connected with above`]}),`\n`]}),_jsx(_components.p,{children:`The Shopify app verifies every incoming webhook signature against this key.`}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`iDenfy webhook setup`,width:`450`,src:`https://mintcdn.com/idenfy/GDLrU-93gtre7Ykv/images/shopify/idenfy-webhook-setup.png?fit=max\u0026auto=format\u0026n=GDLrU-93gtre7Ykv\u0026q=85\u0026s=5edf2e664f9d3dccbbb34058d41a8da7`,\"data-og-width\":`2480`,\"data-og-height\":`1104`,\"data-path\":`images/shopify/idenfy-webhook-setup.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/GDLrU-93gtre7Ykv/images/shopify/idenfy-webhook-setup.png?w=280\u0026fit=max\u0026auto=format\u0026n=GDLrU-93gtre7Ykv\u0026q=85\u0026s=53fa959f9be001c795807c9d08d95f8b 280w, https://mintcdn.com/idenfy/GDLrU-93gtre7Ykv/images/shopify/idenfy-webhook-setup.png?w=560\u0026fit=max\u0026auto=format\u0026n=GDLrU-93gtre7Ykv\u0026q=85\u0026s=941b9a9668e873de51755750f5921914 560w, https://mintcdn.com/idenfy/GDLrU-93gtre7Ykv/images/shopify/idenfy-webhook-setup.png?w=840\u0026fit=max\u0026auto=format\u0026n=GDLrU-93gtre7Ykv\u0026q=85\u0026s=bdcb1eba307c508f0249c6432803bc04 840w, https://mintcdn.com/idenfy/GDLrU-93gtre7Ykv/images/shopify/idenfy-webhook-setup.png?w=1100\u0026fit=max\u0026auto=format\u0026n=GDLrU-93gtre7Ykv\u0026q=85\u0026s=d651a154eed15204399b0d6538a6e6cd 1100w, https://mintcdn.com/idenfy/GDLrU-93gtre7Ykv/images/shopify/idenfy-webhook-setup.png?w=1650\u0026fit=max\u0026auto=format\u0026n=GDLrU-93gtre7Ykv\u0026q=85\u0026s=8f65d22e297acc7c4c99f247613b4e96 1650w, https://mintcdn.com/idenfy/GDLrU-93gtre7Ykv/images/shopify/idenfy-webhook-setup.png?w=2500\u0026fit=max\u0026auto=format\u0026n=GDLrU-93gtre7Ykv\u0026q=85\u0026s=63f01ecc0d23578232fe9a871b4f200f 2500w`})}),_jsx(Warning,{children:_jsx(_components.p,{children:`Without the correct signing key, webhooks are rejected and verification results will not appear in your store.`})})]}),_jsx(Step,{title:`Enable the Matching Extension in Your Theme`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Online Store → Themes → Customize`}),` and enable the extension that matches your chosen flow. See `,_jsx(_components.a,{href:`#theme-\u0026-ui-setup`,children:`Theme \u0026 UI Setup`}),`.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`verification-flows`,children:`Verification Flows`}),`\n`,_jsxs(_components.p,{children:[`You select `,_jsx(_components.strong,{children:`one`}),` flow per store. Each flow controls `,_jsx(_components.em,{children:`where`}),` the verify button appears and `,_jsx(_components.em,{children:`when`}),` the customer is asked.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Flow`}),_jsx(_components.th,{children:`Where the button appears`}),_jsx(_components.th,{children:`Best for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Account page`})}),_jsx(_components.td,{children:`Customer account page (Legacy \u0026 new)`}),_jsx(_components.td,{children:`Pre-qualify customers before they can check out`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Before checkout`})}),_jsx(_components.td,{children:`Cart page or cart drawer`}),_jsx(_components.td,{children:`Block checkout until verified`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`During checkout`})}),_jsx(_components.td,{children:`The checkout page itself`}),_jsx(_components.td,{children:`Verify mid-checkout without leaving Shopify`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`After checkout`})}),_jsx(_components.td,{children:`Thank-you \u0026 Order-status pages`}),_jsx(_components.td,{children:`Let purchase complete, then verify (with hold/refund)`})]})]})]}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Account Page Flow`,icon:`user-check`,id:`account-page-flow`,children:[_jsx(_components.p,{children:`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.`}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`Account page verification flow`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-account-sdk.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=7c3cff9dfbc4c3f36e478422c52e1238`,\"data-og-width\":`2686`,\"data-og-height\":`1452`,\"data-path\":`images/shopify/flow-account-sdk.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-account-sdk.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=809ecffdd25231cd44aeadb89c28b5a6 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-account-sdk.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=b2209bbf6abf085beb932d54cdea1148 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-account-sdk.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=7b1711193a9c13ff134a071588973dc3 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-account-sdk.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=91189a83db2cc05de73923580f886ce6 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-account-sdk.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=36f6049da46661ebe7948c06387f47b9 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-account-sdk.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=663d266707d959da4d64818a694a3837 2500w`})})]}),_jsxs(Accordion,{title:`Before Checkout Flow`,icon:`cart-shopping`,id:`before-checkout-flow`,children:[_jsx(_components.p,{children:`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.`}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`Before checkout cart drawer`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-drawer.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=7e84e44cbbb8627d3979997422aee86e`,\"data-og-width\":`2662`,\"data-og-height\":`1498`,\"data-path\":`images/shopify/flow-cart-drawer.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-drawer.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=c55461811d9678b816ca002bb4ea6af0 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-drawer.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=8e7d7470d473e8b4ac117259a88e06b5 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-drawer.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=3639a98450b1c41abeb9c65ec22d7cd1 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-drawer.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=f8f306940a16b514127bc258cacee717 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-drawer.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=12e841fae2e022264c2b93a04d9984ad 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-drawer.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=584bfaabed8ebd3ba170ba7a99d7200f 2500w`})}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`iDenfy verification dialog in cart`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-idenfy-dialog.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=508338f73fa6304f1b35a6671e9d1db0`,\"data-og-width\":`2664`,\"data-og-height\":`1504`,\"data-path\":`images/shopify/flow-cart-idenfy-dialog.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-idenfy-dialog.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=d47a81272e337ba980071ec77d1d210f 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-idenfy-dialog.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=a057c7b98471da032192b35169bf037f 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-idenfy-dialog.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=e02930e13c46f80448465899d171e9fe 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-idenfy-dialog.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=c7f8176d710957d04342378fd94ea9fa 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-idenfy-dialog.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=4ea18c75d98587e872565efd660484dc 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-cart-idenfy-dialog.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=fdaf1b2806aebb2e79ca0cab784f6508 2500w`})})]}),_jsx(Accordion,{title:`During Checkout Flow`,icon:`credit-card`,id:`during-checkout-flow`,children:_jsx(_components.p,{children:`The verification button appears on the checkout page itself via a Checkout UI extension. Checkout progress is blocked until verification succeeds.`})}),_jsxs(Accordion,{title:`After Checkout Flow`,icon:`receipt`,id:`after-checkout-flow`,children:[_jsxs(_components.p,{children:[`The order completes normally; the customer is prompted to verify on the `,_jsx(_components.strong,{children:`Thank-you`}),` and `,_jsx(_components.strong,{children:`Order status`}),` pages. Combined with `,_jsx(_components.a,{href:`#order-state-management`,children:`Order State Management`}),`, this enables hold-and-refund behavior.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`After checkout verification`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-after-checkout-sdk.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=5dd96ba558791f867189c518994c6a23`,\"data-og-width\":`2676`,\"data-og-height\":`1510`,\"data-path\":`images/shopify/flow-after-checkout-sdk.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-after-checkout-sdk.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=dd3ceb8a15dd84c073570a41fe5bbc36 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-after-checkout-sdk.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=f413b921264978862acd1e4f18d04dfc 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-after-checkout-sdk.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=d58f27bb2fad009cf246db7877c55e14 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-after-checkout-sdk.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=480ffa455bf8eb3c14fd2671caef3602 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-after-checkout-sdk.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=fe1b1217c695b0c654351b4d3dea52c8 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/flow-after-checkout-sdk.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=f87bebfe210748176f74b1b328f2adb6 2500w`})})]})]}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Flow-restricted features.`}),` A few features are `,_jsx(_components.em,{children:`only`}),` available in the After-checkout flow because they need the order or shipping address to exist first:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Risk-factor triggering`}),`\n`,_jsx(_components.li,{children:`Regional minimum age limits`}),`\n`,_jsx(_components.li,{children:`Order State Management (hold + auto-refund)`}),`\n`,_jsx(_components.li,{children:`The “Shipping address” geolocation method`}),`\n`]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`theme-and-ui-setup`,children:`Theme and UI Setup`}),`\n`,_jsxs(_components.p,{children:[`Once a flow is picked, enable its matching extension in `,_jsx(_components.strong,{children:`Online Store → Themes → Customize`}),`.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`App Embed Block (Account + Before Checkout)`,id:`app-embed-block-account-%2B-before-checkout`,children:[_jsxs(_components.p,{children:[`The Liquid `,_jsx(_components.strong,{children:`iDenfy ID button`}),` app-embed block is injected at the body level.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`App embed configuration`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/config-embed-theme-app.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=7031f80e32d603df15235ae1915d214f`,\"data-og-width\":`2688`,\"data-og-height\":`1520`,\"data-path\":`images/shopify/config-embed-theme-app.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/config-embed-theme-app.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=b37116f00e250e7316e5a2d23e9f6177 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/config-embed-theme-app.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=f6e41a525d153d8fcfb14292e37af825 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/config-embed-theme-app.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=ecd6f6972dcd100f9367adaaa7f3120e 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/config-embed-theme-app.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=8538dd501d0b11b738f317f01ffc7b8c 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/config-embed-theme-app.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=5d30e7c27f66f6babb4b6ce0c53bad1f 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/config-embed-theme-app.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=fc859631a6a40df7407bd91390469bb3 2500w`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Block settings:`})}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Purpose`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`CTA text`})}),_jsx(_components.td,{children:`Label on the verify button.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Geolocation permission notice / retry text`})}),_jsx(_components.td,{children:`Shown when the browser blocks geolocation.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Checkout button selector`})}),_jsx(_components.td,{children:`CSS selector for the theme’s checkout button, so the app can hide it. Comma-separated for multi-theme support.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Cart alter buttons selector`})}),_jsx(_components.td,{children:`CSS selector for cart add/remove buttons, so KYC is re-evaluated when the cart changes.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Account (Legacy) button selector`})}),_jsx(_components.td,{children:`CSS selector used to anchor the verify button on the legacy account page.`})]})]})]}),_jsxs(Accordion,{title:`Advanced — CSS Variable Styling`,icon:`palette`,id:`advanced-css-variable-styling`,children:[_jsx(_components.p,{children:`The block exposes CSS variables you can override in your theme stylesheet to match your brand.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`27`,language:`css`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`css`,children:_jsxs(_components.code,{language:`css`,numberOfLines:`27`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D7BA7D`},children:`:root`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-modal-desktop-width`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`60`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`vw`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-modal-desktop-height`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`90`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`vh`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-modal-mobile-width`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`100`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`vw`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-modal-mobile-height`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`90`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`vh`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-modal-backdrop`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`rgba`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-min-width`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`160`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-font-size`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`16`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-line-height`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1.5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-padding`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 24`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-border-radius`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-bg-color`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`#28a745`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-text-color`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`white`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-bg-color-hover`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`#218838`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-btn-text-color-hover`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`white`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-error-text-color`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`#c70a24`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-message-font-size`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`14`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-message-padding`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 16`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-message-margin`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`16`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-message-border-radius`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#B5CEA8`},children:`px`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-message-success-bg-color`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`#28a745`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-message-info-bg-color`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`#ffb800`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-message-info-text`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`black`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` --idenfy-message-success-text`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#CE9178`},children:`white`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]})]}),_jsxs(Tab,{title:`Checkout / Account UI Extension (During + After Checkout)`,id:`checkout-%2F-account-ui-extension-during-%2B-after-checkout`,children:[_jsx(_components.p,{children:`A React extension that targets four storefront surfaces.`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Surface`}),_jsx(_components.th,{children:`Where it renders`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`purchase.checkout.block.render`})}),_jsx(_components.td,{children:`Checkout page`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`purchase.thank-you.block.render`})}),_jsx(_components.td,{children:`Thank-you page`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`customer-account.order-status.block.render`})}),_jsx(_components.td,{children:`Order status page`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`customer-account.profile.block.render`})}),_jsx(_components.td,{children:`Customer profile (new accounts)`})]})]})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Setup:`})}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Switch Context`,children:[_jsxs(_components.p,{children:[`In the theme editor, change the dropdown to `,_jsx(_components.strong,{children:`Checkout and customer accounts`}),`.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`Checkout extensions dropdown`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-dropdown.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=610cdba63f1b06e1562d106a4e4a8eee`,\"data-og-width\":`2984`,\"data-og-height\":`1906`,\"data-path\":`images/shopify/extensions-checkout-dropdown.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-dropdown.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=700df908540e5d2f6e95e7d8008d581b 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-dropdown.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=2b080fb638aa3f9851fd3adda10b3063 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-dropdown.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=b1c14c24769726a3885f3dfce9673444 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-dropdown.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=16ddd50615b37acff23164b57411b780 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-dropdown.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=0bf7d4778935aafc7af10e709f8bfc09 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-dropdown.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=6be051fb26a82eaea1c572cd01fde4e5 2500w`})})]}),_jsxs(Step,{title:`Add the iDenfy Extension`,children:[_jsxs(_components.p,{children:[`Add it to the `,_jsx(_components.strong,{children:`Thank you`}),`, `,_jsx(_components.strong,{children:`Profile`}),`, and `,_jsx(_components.strong,{children:`Order status`}),` pages.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`Checkout extensions apps`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=d12062187723830eeda80da239e83e18`,\"data-og-width\":`2878`,\"data-og-height\":`1618`,\"data-path\":`images/shopify/extensions-checkout-apps.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=6c6496cf884d19aa91196655976a1415 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=ce2fc8940179a829784f1cfaa056a0cb 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=ff92c030754bf5247e423aa0c7dc0f63 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=36de105daab640ea4f21b3cfde99bbd3 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=e2c73f9e0faac70895a6b4db20c44bb8 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=6524b9bb9d9123f4fecfe0c77369c151 2500w`})})]}),_jsxs(Step,{title:`Position the Extension`,children:[_jsx(_components.p,{children:`Click each extension instance to pick exactly where on the page it should appear.`}),_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`Checkout extensions position`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps-position.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=b056606adfe8bbd353490ba0be39cf47`,\"data-og-width\":`2968`,\"data-og-height\":`2044`,\"data-path\":`images/shopify/extensions-checkout-apps-position.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps-position.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=48c1fd17e1d1d894c0a5a49736920578 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps-position.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=d6188c4c40e71487a05429ba0d126d4a 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps-position.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=c3cf428bb59a073f4571e1953a7afb6c 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps-position.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=6f37474088bec691a1e82937a75f746f 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps-position.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=36b6907766f0e55189fe270609ef85bc 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/extensions-checkout-apps-position.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=a4b528071e14b3e76bd82a48747753e9 2500w`})})]})]}),_jsxs(_components.p,{children:[`You can also set a “`,_jsx(_components.strong,{children:`Paragraph above button`}),`” message shown directly above the Verify Identity button.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`Styling is limited here — Checkout/Account UI extensions render in a sandboxed React environment that does not support arbitrary CSS overrides.`})})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`triggering-rules`,children:`Triggering Rules`}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`ID Verification flow`}),` card you can layer multiple conditional triggers. The customer is asked to verify only when at least one rule matches.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Rule`}),_jsx(_components.th,{children:`Description`}),_jsx(_components.th,{children:`Flow restriction`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Daily money limit`})}),_jsx(_components.td,{children:`Customer’s total ordered amount today reaches the limit.`}),_jsx(_components.td,{children:`All flows`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Monthly money limit`})}),_jsx(_components.td,{children:`Same, month-to-date.`}),_jsx(_components.td,{children:`All flows`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Daily order count`})}),_jsx(_components.td,{children:`Trigger after N orders today.`}),_jsx(_components.td,{children:`All flows`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Monthly order count`})}),_jsx(_components.td,{children:`Same, month-to-date.`}),_jsx(_components.td,{children:`All flows`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`By region`})}),_jsxs(_components.td,{children:[`Trigger for customers in specific countries or US states. Detected via `,_jsx(_components.strong,{children:`browser geolocation`}),` or `,_jsx(_components.strong,{children:`shipping address`}),`.`]}),_jsxs(_components.td,{children:[`Shipping-address detection is `,_jsx(_components.em,{children:`after-checkout only`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`By risk factor`})}),_jsxs(_components.td,{children:[`Trigger when the order’s Shopify risk score reaches `,_jsx(_components.code,{children:`low`}),` / `,_jsx(_components.code,{children:`medium`}),` / `,_jsx(_components.code,{children:`high`}),`. Optional “trigger when no risk factor yet” checkbox.`]}),_jsx(_components.td,{children:_jsx(_components.em,{children:`After-checkout only`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`By product / collection`})}),_jsxs(_components.td,{children:[`Narrow `,_jsx(_components.em,{children:`all the above`}),` triggers to carts containing specific products or collection items.`]}),_jsx(_components.td,{children:`All flows`})]})]})]}),`\n`,_jsx(Accordion,{title:`How Browser Geolocation Works`,icon:`location-crosshairs`,id:`how-browser-geolocation-works`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The storefront requests the browser’s coordinates via the `,_jsx(_components.a,{href:`https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API`,children:`Geolocation API`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Coordinates are POSTed to `,_jsx(_components.code,{children:`/apps/sdk/geolocation`}),` and stored as customer metafields (`,_jsx(_components.code,{children:`idenfy.geolocation_latitude`}),`, `,_jsx(_components.code,{children:`idenfy.geolocation_longitude`}),`, `,_jsx(_components.code,{children:`idenfy.geolocation_date`}),`).`]}),`\n`,_jsx(_components.li,{children:`Coordinates older than ~5 min on the cart page are refreshed automatically. Coordinates older than 1 hour are flagged in logs but still used.`}),`\n`,_jsx(_components.li,{children:`The server uses PostGIS geometry to check whether the coordinates fall inside any of the configured countries or US states.`}),`\n`]})}),`\n`,_jsx(Heading,{level:`3`,id:`identity-constraints`,children:`Identity Constraints`}),`\n`,_jsxs(_components.p,{children:[`Separate from triggers, the following identity constraints apply to `,_jsx(_components.em,{children:`every`}),` verification:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Constraint`}),_jsx(_components.th,{children:`Description`}),_jsx(_components.th,{children:`Flow restriction`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Name must match identity document`})}),_jsx(_components.td,{children:`iDenfy fails the verification if the Shopify-provided name does not match the document.`}),_jsx(_components.td,{children:`All flows`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Global minimum age`})}),_jsx(_components.td,{children:`Minimum age applied to every verification.`}),_jsx(_components.td,{children:`All flows`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Regional minimum age`})}),_jsx(_components.td,{children:`Per-country and per-state minimum age. Age is computed from the document’s date of birth.`}),_jsx(_components.td,{children:`After-checkout only`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`order-state-management`,children:`Order State Management`}),`\n`,_jsxs(_components.p,{children:[`Available `,_jsx(_components.strong,{children:`only`}),` in the After-checkout flow.`]}),`\n`,_jsxs(_components.p,{children:[`When `,_jsx(_components.strong,{children:`Automatically manage Shopify’s order state`}),` is enabled:`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Order Placed`,children:_jsxs(_components.p,{children:[`If any KYC rule matches the order, the app puts the order’s fulfillment `,_jsx(_components.strong,{children:`on hold`}),` immediately.`]})}),_jsx(Step,{title:`Customer Prompted`,children:_jsx(_components.p,{children:`The customer sees the verify button on the Thank-you and Order-status pages. Optionally, an email is sent.`})}),_jsx(Step,{title:`On Success — Auto-Release`,children:_jsxs(_components.p,{children:[`If KYC returns `,_jsx(_components.code,{children:`APPROVED`}),`, the hold is released and the order proceeds to fulfillment automatically.`]})}),_jsx(Step,{title:`On Timeout — Auto-Cancel \u0026 Refund`,children:_jsxs(_components.p,{children:[`If verification is not completed within the configured `,_jsx(_components.strong,{children:`Order refund timeframe`}),` (1 hour – 4 weeks), a cron job cancels the order and refunds the customer.`]})})]}),`\n`,_jsx(_components.p,{children:`Two optional transactional emails are configurable here:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ask Complete KYC`}),` — sent while the order is on hold.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Order Cancelled`}),` — sent when the order is auto-cancelled.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`email-notifications`,children:`Email Notifications`}),`\n`,_jsx(_components.p,{children:`The app can send up to four transactional emails:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Email`}),_jsx(_components.th,{children:`Sent when`}),_jsx(_components.th,{children:`Available in`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Ask Complete KYC`})}),_jsx(_components.td,{children:`Order placed and held for verification`}),_jsx(_components.td,{children:`After-checkout (Order State Management)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Order Cancelled`})}),_jsx(_components.td,{children:`Order auto-cancelled after timeframe expires`}),_jsx(_components.td,{children:`After-checkout (Order State Management)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Successful KYC verification`})}),_jsxs(_components.td,{children:[`Webhook returns `,_jsx(_components.code,{children:`APPROVED`})]}),_jsx(_components.td,{children:`All flows`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Failed KYC verification`})}),_jsxs(_components.td,{children:[`Webhook returns `,_jsx(_components.code,{children:`DENIED`}),` / `,_jsx(_components.code,{children:`SUSPECTED`}),` / `,_jsx(_components.code,{children:`EXPIRED`})]}),_jsx(_components.td,{children:`All flows`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`custom-sender-identity`,children:`Custom Sender Identity`}),`\n`,_jsxs(_components.p,{children:[`By default, emails are sent from iDenfy’s shared address. You can configure a custom domain via `,_jsx(_components.a,{href:`https://resend.com/`,children:`Resend`}),`:`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Configure Identity`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Configure custom email sender identity`}),`. Enter a username (e.g. `,_jsx(_components.code,{children:`noreply`}),`), domain, and AWS region (`,_jsx(_components.code,{children:`us-east-1`}),`, `,_jsx(_components.code,{children:`eu-west-1`}),`, `,_jsx(_components.code,{children:`sa-east-1`}),`, or `,_jsx(_components.code,{children:`ap-northeast-1`}),`).`]})}),_jsx(Step,{title:`Verify Domain`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Verify custom email sender identity`}),`. Add the DNS records shown to your domain registrar. Resend verifies the records on its side.`]})}),_jsx(Step,{title:`Edit Templates`,children:_jsxs(_components.p,{children:[`Once verified, an `,_jsx(_components.strong,{children:`Edit email template`}),` button appears for each email type. You can customize both the text and HTML bodies.`]})})]}),`\n`,_jsxs(Accordion,{title:`Available Template Variables`,icon:`code`,id:`available-template-variables`,children:[_jsx(_components.p,{children:`Variable availability depends on the email type:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Available in`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`{firstName}`}),`, `,_jsx(_components.code,{children:`{lastName}`})]}),_jsx(_components.td,{children:`All emails`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{orderNumber}`})}),_jsx(_components.td,{children:`All order-bound emails`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{orderStatusPageUrl}`})}),_jsx(_components.td,{children:`Ask Complete KYC`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{timeframe}`})}),_jsx(_components.td,{children:`Ask Complete KYC`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{reason}`})}),_jsx(_components.td,{children:`Failed KYC`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{manageOrderState}`})}),_jsx(_components.td,{children:`Successful KYC (inserted when Order State Management is on)`})]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`You can only `,_jsx(_components.strong,{children:`save`}),` custom templates while a verified custom identity exists. They are `,_jsx(_components.strong,{children:`kept in the database`}),` if you later reset the identity, so re-verifying won’t lose your work.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`customer-and-order-records`,children:`Customer and Order Records`}),`\n`,_jsx(_components.p,{children:`After every verification, the app writes the result onto Shopify.`}),`\n`,_jsx(Heading,{level:`3`,id:`customer-record`,children:`Customer Record`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idenfy.is_verified`})}),_jsx(_components.td,{children:`metafield (boolean)`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),` if `,_jsx(_components.code,{children:`APPROVED`}),`. The source of truth across the app.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idenfy.verification_status`})}),_jsx(_components.td,{children:`metafield (text)`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`APPROVED`}),` / `,_jsx(_components.code,{children:`DENIED`}),` / `,_jsx(_components.code,{children:`SUSPECTED`}),` / `,_jsx(_components.code,{children:`EXPIRED`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idenfy.scan_ref`})}),_jsx(_components.td,{children:`metafield (text)`}),_jsx(_components.td,{children:`iDenfy verification reference`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idenfy.fraud_tags`})}),_jsx(_components.td,{children:`metafield (text)`}),_jsx(_components.td,{children:`Comma-separated fraud flags from iDenfy`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idenfy.mismatch_tags`})}),_jsx(_components.td,{children:`metafield (text)`}),_jsx(_components.td,{children:`Comma-separated mismatch flags`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idenfy.geolocation_*`})}),_jsx(_components.td,{children:`metafield (number/datetime)`}),_jsx(_components.td,{children:`Last submitted geolocation (when geolocation triggering is on)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Tag`}),_jsx(_components.td,{children:`string`}),_jsxs(_components.td,{children:[`Exactly one of `,_jsx(_components.code,{children:`idv-approved`}),`, `,_jsx(_components.code,{children:`idv-denied`}),`, `,_jsx(_components.code,{children:`idv-suspected`}),`, `,_jsx(_components.code,{children:`idv-failed`}),`, `,_jsx(_components.code,{children:`idv-expired`}),`, `,_jsx(_components.code,{children:`idv-unverified`})]})]})]})]}),`\n`,_jsx(_components.p,{children:`Captured email or phone from the verification is also saved into the customer record when available.`}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`Verified customer record`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/customer-acc-verified.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=3a3e499235abe7a81ed70dcaca49c9a7`,\"data-og-width\":`3228`,\"data-og-height\":`2236`,\"data-path\":`images/shopify/customer-acc-verified.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/customer-acc-verified.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=96062c47a2c7ffbba3541352065d6412 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/customer-acc-verified.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=8589d946029cb1a16222b709c5501691 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/customer-acc-verified.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=9c4615992afce41c70974a8b5713ff39 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/customer-acc-verified.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=7f82029b289f53370b1908cd6cfa2dbb 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/customer-acc-verified.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=601bbd4f5ec6aa0ba43909b59b8e0f9e 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/customer-acc-verified.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=57eb17cafb8b9be11ba3910f4b18e7d0 2500w`})}),`\n`,_jsx(Heading,{level:`3`,id:`order-record`,children:`Order Record`}),`\n`,_jsx(_components.p,{children:`When verification is tied to an order (Before checkout with a logged-in customer, During checkout, or After checkout):`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Order Notes`}),` — the app appends a line summarizing status, scan reference, and any fraud / mismatch tags.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Order Tags`}),` — the same `,_jsx(_components.code,{children:`idv-\u003cstatus>`}),` tag is added.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Fulfillment hold / release`}),` — automatic, under Order State Management.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Order cancellation \u0026 refund`}),` — automatic, if the order remains unverified past the configured timeframe.`]}),`\n`]}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{alt:`Approved order details`,width:`450`,src:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/order-details-approved.png?fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=fac8e971dc63cf6548096c448421a9a7`,\"data-og-width\":`3222`,\"data-og-height\":`2260`,\"data-path\":`images/shopify/order-details-approved.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/order-details-approved.png?w=280\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=d1e561e1990ff29f1a2ab413c8a79bfe 280w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/order-details-approved.png?w=560\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=9a43e0a25d442c2d840307802d3c25c0 560w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/order-details-approved.png?w=840\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=b2de81d238577f80597b6170079ccf34 840w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/order-details-approved.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=48cfb47896ee8352f83eec6ad1667fb5 1100w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/order-details-approved.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=74dbc08c7e368949179938254ef94b32 1650w, https://mintcdn.com/idenfy/DOV0bfUXhnltF6lA/images/shopify/order-details-approved.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DOV0bfUXhnltF6lA\u0026q=85\u0026s=82fa9c3909b76912874325568330ce89 2500w`})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`If the customer was `,_jsx(_components.strong,{children:`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.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`additional-settings`,children:`Additional Settings`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Automatically delete customer scan references`}),` — when a customer is deleted in Shopify, their iDenfy scan reference is also deleted via the iDenfy API.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Customer scan-ref removal table`}),` — a searchable, paginated list of customers with an `,_jsx(_components.code,{children:`idenfy.scan_ref`}),` metafield. You can manually delete a scan reference; the metafield is then replaced with `,_jsx(_components.code,{children:`\"Deleted on iDenfy Dashboard\"`}),` so the action is visible in the customer record.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`reference`,children:`Reference`}),`\n`,_jsx(Heading,{level:`3`,id:`verification-statuses`,children:`Verification Statuses`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`iDenfy status`}),_jsx(_components.th,{children:`Customer/order tag`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`APPROVED`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`idv-approved`})}),_jsx(_components.td,{children:`Verified successfully`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`DENIED`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`idv-denied`})}),_jsx(_components.td,{children:`Failed verification`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`SUSPECTED`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`idv-suspected`})}),_jsx(_components.td,{children:`Verified but flagged for manual review`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`EXPIRED`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`idv-expired`})}),_jsx(_components.td,{children:`Verification session expired without completion`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`FAILED`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`idv-failed`})}),_jsx(_components.td,{children:`Internal/system failure`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.em,{children:`(none yet)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`idv-unverified`})}),_jsx(_components.td,{children:`Session started, no result yet`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`SUSPECTED`}),` result returned during checkout triggers a banner asking the customer to retry.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Webhook Signature Errors`,icon:`triangle-exclamation`,id:`webhook-signature-errors`,children:_jsxs(_components.p,{children:[`The signing key on the iDenfy Dashboard webhook `,_jsx(_components.strong,{children:`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.`]})}),_jsx(Accordion,{title:`Geolocation Permission Missing`,icon:`location-dot`,id:`geolocation-permission-missing`,children:_jsxs(_components.p,{children:[`Verification triggered by `,_jsx(_components.strong,{children:`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.`]})}),_jsx(Accordion,{title:`“Order Not Ready” / Retry`,icon:`clock-rotate-left`,id:`order-not-ready-retry`,children:_jsx(_components.p,{children:`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.`})}),_jsx(Accordion,{title:`SUSPECTED Verifications`,icon:`circle-question`,id:`suspected-verifications`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SUSPECTED`}),` means iDenfy verified the identity but flagged the result for human review. By default these customers are `,_jsx(_components.em,{children:`not`}),` treated as verified — they appear with the `,_jsx(_components.code,{children:`idv-suspected`}),` tag. Order State Management keeps the order on hold until the status is changed on the iDenfy Dashboard.`]})}),_jsx(Accordion,{title:`Custom Themes — Buttons Not Hidden`,icon:`paintbrush`,id:`custom-themes-buttons-not-hidden`,children:_jsxs(_components.p,{children:[`If your theme uses non-standard CSS classes for the checkout or cart buttons, the default selectors will miss them. Update the `,_jsx(_components.strong,{children:`Checkout button selector`}),` and `,_jsx(_components.strong,{children:`Cart alter buttons selector`}),` in the app-embed block settings (comma-separated CSS selectors are supported).`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what’s-next`,children:`What’s Next?`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`iDenfy Dashboard — KYC Settings`,icon:`sliders`,href:`/guides/dashboard/settings/configuration`,children:_jsx(_components.p,{children:`Tune document types, liveness, languages, and branding for everything triggered from Shopify.`})}),_jsx(Card,{title:`Webhook Payload Reference`,icon:`bell`,href:`/kyc/webhooks`,children:_jsx(_components.p,{children:`Full payload spec for the verification results the app receives.`})}),_jsx(Card,{title:`Testing \u0026 Sandbox`,icon:`flask`,href:`/guides/testing-sandbox`,children:_jsx(_components.p,{children:`Simulate APPROVED / DENIED / SUSPECTED results before going live.`})}),_jsx(Card,{title:`Other Plugins`,icon:`puzzle-piece`,href:`/integrations/overview`,children:_jsx(_components.p,{children:`WooCommerce, Adobe Commerce, WordPress, Zapier.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Shopify","description":"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.","icon":"shopify","last_updated":"2026-10-02","href":"/integrations/shopify"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"How It Works","slug":"how-it-works","depth":2,"children":[]},{"title":"Quick Start","slug":"quick-start","depth":2,"children":[]},{"title":"Verification Flows","slug":"verification-flows","depth":2,"children":[]},{"title":"Theme and UI Setup","slug":"theme-and-ui-setup","depth":2,"children":[]},{"title":"Triggering Rules","slug":"triggering-rules","depth":2,"children":[{"title":"Identity Constraints","slug":"identity-constraints","depth":3,"children":[]}]},{"title":"Order State Management","slug":"order-state-management","depth":2,"children":[]},{"title":"Email Notifications","slug":"email-notifications","depth":2,"children":[{"title":"Custom Sender Identity","slug":"custom-sender-identity","depth":3,"children":[]}]},{"title":"Customer and Order Records","slug":"customer-and-order-records","depth":2,"children":[{"title":"Customer Record","slug":"customer-record","depth":3,"children":[]},{"title":"Order Record","slug":"order-record","depth":3,"children":[]}]},{"title":"Additional Settings","slug":"additional-settings","depth":2,"children":[]},{"title":"Reference","slug":"reference","depth":2,"children":[{"title":"Verification Statuses","slug":"verification-statuses","depth":3,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":3,"children":[]}]},{"title":"What’s Next?","slug":"what’s-next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/idenfy/ba72bcb4163466c3/feedback-widget.js"],"subdomain":"idenfy","siteName":"iDenfy Documentation","title":"Shopify - iDenfy Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-02T13:54:29.025Z","originalFileLocation":"integrations/shopify.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"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.\">\u003cmeta data-mint-head name=\"application-name\" content=\"iDenfy Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Shopify - iDenfy Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"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.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"iDenfy Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://documentation.idenfy.com/integrations/shopify\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://idenfy.mintlify.app/_mintlify/api/og/v2?division=No-Code+Integrations\u0026amp;title=Shopify\u0026amp;description=Add+identity+verification+to+your+Shopify+store.+Choose+when+to+verify%2C+who+to+verify%2C+and+what+happens+after+%E2%80%94+all+from+the+Shopify+Admin%2C+no+code+required.\u0026amp;theme=010a455f13e463755e9c7867\u0026amp;signature=e2ba1ef97e76004baca37816ba0dfa7df69362f01a5f7606c450c1bd987b0be3\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Shopify - iDenfy Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"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.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://idenfy.mintlify.app/_mintlify/api/og/v2?division=No-Code+Integrations\u0026amp;title=Shopify\u0026amp;description=Add+identity+verification+to+your+Shopify+store.+Choose+when+to+verify%2C+who+to+verify%2C+and+what+happens+after+%E2%80%94+all+from+the+Shopify+Admin%2C+no+code+required.\u0026amp;theme=010a455f13e463755e9c7867\u0026amp;signature=e2ba1ef97e76004baca37816ba0dfa7df69362f01a5f7606c450c1bd987b0be3\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/idenfy/v3kxyxus7demIOg3/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"iDenfy Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#734BFB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://documentation.idenfy.com/integrations/shopify\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/shopify.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://documentation.idenfy.com/#organization\",\"name\":\"iDenfy Documentation\",\"url\":\"https://documentation.idenfy.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/idenfy/aMmsrDpzQlHq3f58/logo/light.svg?fit=max\u0026auto=format\u0026n=aMmsrDpzQlHq3f58\u0026q=85\u0026s=e2c9be61445008ddc363f696904c4607\"}},{\"@type\":\"WebSite\",\"@id\":\"https://documentation.idenfy.com#website\",\"name\":\"iDenfy Documentation\",\"url\":\"https://documentation.idenfy.com\",\"publisher\":{\"@id\":\"https://documentation.idenfy.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://documentation.idenfy.com/integrations/shopify#webpage\",\"url\":\"https://documentation.idenfy.com/integrations/shopify\",\"name\":\"Shopify\",\"description\":\"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.\",\"dateModified\":\"2026-10-02T13:54:29.025Z\",\"isPartOf\":{\"@id\":\"https://documentation.idenfy.com#website\"},\"breadcrumb\":{\"@id\":\"https://documentation.idenfy.com/integrations/shopify#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://documentation.idenfy.com/integrations/shopify#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"No-Code Integrations\",\"item\":\"https://documentation.idenfy.com/integrations/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Shopify\",\"item\":\"https://documentation.idenfy.com/integrations/shopify\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://documentation.idenfy.com/integrations/shopify#article\",\"headline\":\"Shopify\",\"name\":\"Shopify\",\"description\":\"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.\",\"url\":\"https://documentation.idenfy.com/integrations/shopify\",\"mainEntityOfPage\":{\"@id\":\"https://documentation.idenfy.com/integrations/shopify#webpage\"},\"dateModified\":\"2026-10-02T13:54:29.025Z\",\"publisher\":{\"@id\":\"https://documentation.idenfy.com/#organization\"},\"isPartOf\":{\"@id\":\"https://documentation.idenfy.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"iDenfy Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"iDenfy Documentation","nav":{"global":{"anchors":[{"anchor":"API Reference","icon":"square-terminal","href":"/api-reference"},{"anchor":"Changelog","icon":"list","href":"/changelog"},{"anchor":"Support","icon":"life-ring","href":"https://idenfy-ivs.atlassian.net/servicedesk/customer/portal/1"},{"anchor":"Postman","icon":"rocket","href":"https://www.postman.com/idenfy-developers/idenfy-public-api/collection/gwjcqp9/idenfy-api-requests"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/resources/supported-documents"}]},{"tab":"API Documentation","pages":[{"title":"API Documentation","href":"/quickstart"}]},{"tab":"Compliance","pages":[{"title":"Compliance","href":"/guides/compliance/overview"}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks/overview"}]},{"tab":"Integrations","groups":[{"group":"No-Code Integrations","icon":"puzzle-piece","pages":[{"title":"No-Code Integrations","icon":"puzzle-piece","href":"/integrations/overview"},{"title":"Magic Link","description":"Send verification links to customers via email or SMS using iDenfy Magic Link for identity verification without any code integration.","icon":"link","href":"/integrations/magic-link"},{"title":"Shopify","icon":"shopify","href":"/integrations/shopify"},{"title":"WordPress","description":"Add iDenfy identity verification to your WordPress site with the official plugin including step-by-step installation and configuration.","icon":"wordpress","href":"/integrations/wordpress"},{"title":"WooCommerce","icon":"cart-shopping","href":"/integrations/woocommerce"},{"title":"Adobe Commerce","icon":"store","href":"/integrations/adobe-commerce"}]},{"group":"Automation","icon":"robot","pages":[{"title":"Zapier Integration","icon":"bolt","href":"/integrations/zapier"},{"title":"Zapier Webhooks","icon":"bell","href":"/integrations/zapier-webhooks"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/overview"}]}]},"basePath":"","title":"Shopify - iDenfy Documentation","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DXXFP6nH.js","DynamicMarkdown-B54_zNBF.js","zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js"]}