Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.
The Loqate commercetools plugin (loqate-commercetools) integrates the commercetools platform with the Loqate API to provide Address Capture, Address Verify, Email Validation and Phone Validation in the Checkout, My Account and Registration flows.The modifications are applied in two areas:
Backend-for-frontend (BFF): commercetools extensions that make the Loqate API calls and handle the responses
Frontend: React components that display the Loqate features to your customers
The plugin is a reference implementation built on the commercetools Frontend B2C template (latest as of 3 June 2024). It is not intended to be cloned and used as-is in production. Copy the relevant parts into your own implementation instead. See Disclaimers for details.
Address Verify evaluates the validity of the address on form submission, using fields like country, city, postal code and street address. Based on the response, the address is scored as Good, Questionable or Invalid using the Address Verification Code:
Good: no issues detected
Questionable: the user is prompted to accept a corrected address suggested by Address Verify. The user can either edit the address manually or proceed with the initial input
Invalid: a suggestion is provided to update the address. The user can either update it or proceed with the original input
Configuration options:
LOQATE_ADDRESS_VERIFICATION_CHECKOUT - toggle for address verification during checkout
LOQATE_ADDRESS_VERIFICATION_MY_ACCOUNT - toggle for address verification on the My Account page
LOQATE_AVC - minimum matchscore threshold for an address to be considered Good
Email Validation verifies the user’s email address during input, ensuring the format is correct and that the address is valid.Configuration options:
LOQATE_EMAIL_VALIDATION_CHECKOUT - toggle for email validation during checkout
LOQATE_EMAIL_VALIDATION_MY_ACCOUNT - toggle for email validation on the My Account page
LOQATE_EMAIL_VALIDATION_REGISTRATION - toggle for email validation during registration
LOQATE_EMAIL_VALIDATION_TIMEOUT_MILLISECONDS - timeout duration for email validation requests
LOQATE_INCLUDE_VALID_CATCHALL_EMAILS - determines whether Valid_CatchAll responses are considered valid (see the ResponseCode response field in the API documentation)
Phone Validation checks the correctness of the phone number the user enters, ensuring it is properly formatted and valid.Configuration options:
LOQATE_PHONE_VALIDATION_CHECKOUT - toggle for phone validation during checkout
LOQATE_PHONE_VALIDATION_MY_ACCOUNT - toggle for phone validation on the My Account page
LOQATE_PHONE_VALIDATION_REGISTRATION - toggle for phone validation during registration
LOQATE_INCLUDE_MAYBE_PHONE_NUMBERS - determines whether the Maybe validation state is treated as valid (see the IsValid response field in the API documentation)
The loqate-commercetools repository demonstrates the integration of Loqate Address Capture, Address Verify, Email Validation and Phone Validation features with commercetools. It is to be used as a reference implementation for your own integration - it is not intended to be used as is in a production environment. Please refer to the Setup Guide for instructions on the changes required to carry over the Loqate commercetools integration into your own project.It uses the commercetools Frontend B2C template as a base, specifically the latest as of 3 June 2024.This plugin:
Does not aim to keep up with the latest changes in the commercetools frontend template, but rather to provide a reference implementation
Should not be cloned and used as is in a production environment. It is recommended to use it as a reference and adapt it to your own needs by copying the relevant parts of the code and applying them to the merchant’s implementation
Does not aim to fix any bugs or issues in the commercetools frontend template. If you encounter any issues related with the B2C Frontend Template, please refer to the commercetools documentation
Is not responsible for any bugs or issues coming from the commercetools B2C Frontend Template, nor any customizations made to it and does not aim to fix them. You should refer to the commercetools documentation for support for any issues related to the specific version of the commercetools B2C Frontend Template that you are using
Does not take an opinion of the flow you should support in your store - it applies changes to the out of the box checkout, my account and registration flows
No. The plugin is a reference implementation. Get the latest version of the commercetools B2C Frontend template and apply the backend-for-frontend and frontend changes described in the setup guide on top of your existing implementation.
What do I need before I start?
Node.js 18.16.0 or higher, Yarn 1.22.19 or higher, a commercetools project, commercetools Frontend Studio, and a Loqate API key.
Which parts of my store does it change?
The plugin modifies the out-of-the-box Checkout, My Account and Registration flows. It doesn’t take an opinion on which flows you should support in your store.
Can I turn individual features on and off?
Yes. Each feature can be toggled per area through the project settings. See Studio settings for the full list.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"GBG Loqate","colors":{"primary":"#4d4dff","light":"#4d4dff","dark":"#4d4dff"},"logo":{"light":"https://mintcdn.com/loqate/odjzme0kbZLAlqBl/logo/loqate-logo-primary.png?fit=max\u0026auto=format\u0026n=odjzme0kbZLAlqBl\u0026q=85\u0026s=f824e561eeb9b4462947163f1d09bc17","dark":"https://mintcdn.com/loqate/odjzme0kbZLAlqBl/logo/loqate-logo-white.png?fit=max\u0026auto=format\u0026n=odjzme0kbZLAlqBl\u0026q=85\u0026s=03d8aa73e036dac0e3f96e7142301631"},"favicon":"https://mintcdn.com/loqate/wZtGSGZ6G8yuShlb/images/favicon.svg?fit=max\u0026auto=format\u0026n=wZtGSGZ6G8yuShlb\u0026q=85\u0026s=5e7c25c17c82890d7a9835708741c9e9","navbar":{"links":[{"href":"https://auth.loqate.com/en/sign-in","label":"Log in"}],"primary":{"type":"button","label":"Get API Keys","href":"https://account.loqate.com"}},"footer":{"socials":{"linkedin":"https://linkedin.com/company/loqate"}},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"ga4":{"measurementId":"G-X56W44RXDP"},"gtm":{"tagId":"GTM-NNH83KZ3"},"segment":{"key":"Yqk0fAXzw9cWEeADQNWrwvmDBQEzg861"}},"banner":{"content":"[Looking for support.loqate.com? Click here to find our on-prem documentation.](https://docs.loqate.com/getting-started/introduction)","dismissible":true},"contextual":{"options":["copy","view","mcp","add-mcp","download-pdf","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"loqate","hasAudioNarration":false,"actualSubdomain":"loqate","customDomains":["docs.loqate.com"],"gitSource":{"type":"github","owner":"gbgplc-internal","repo":"loqate-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae47a1381cc57ac631ec38f","collectionId":"6f50daad-2714-40a4-b165-6179e7521dfb","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae47a1381cc57ac631ec38f"},"feedback":{"thumbs":true,"issues":false,"edits":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae47a1381cc57ac631ec38f","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Documentation","count":120},{"language":"default","tag":"On-Premise","count":77},{"language":"default","tag":"Location Solutions","count":68},{"language":"default","tag":"Address Verify","count":54},{"language":"default","tag":"Integrations","count":44},{"language":"default","tag":"API Reference","count":42},{"language":"default","tag":"Endpoints","count":40},{"language":"default","tag":"Technical Reference","count":31},{"language":"default","tag":"Support","count":26},{"language":"default","tag":"Tutorials","count":22}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"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":[{"filePath":"snippets/home.css","content":".container{max-width:1200px;margin:0 auto;padding:40px 20px}.main-heading,.section-heading{font-size:2.5rem;font-weight:600;text-align:center;margin-bottom:40px}.section-heading{font-size:1.75rem;font-weight:700;margin-bottom:30px}"},{"filePath":"snippets/loqate-vars.css","content":":root{--loqate-primary:#4d4dff;--loqate-secondary:#7878ff;--loqate-dark:#333333;--loqate-light:#ffffff;--loqate-grey:#f5f5f5;--loqate-text:#333333;--loqate-text-light:#666666;--loqate-border:#e0e0e0;--loqate-shadow:rgba(0, 0, 0, 0.1);--loqate-bg-dark:#121212;--loqate-card-dark:#1e1e1e;--loqate-text-dark:#f5f5f5;--loqate-text-secondary-dark:#aaaaaa;--loqate-border-dark:rgba(255, 255, 255, 0.1);--loqate-shadow-dark:rgba(255, 255, 255, 0.1);--loqate-gradient-primary:linear-gradient(135deg, #4d4dff 0%, #7878ff 100%);--loqate-gradient-subtle:linear-gradient(\n 135deg,\n rgba(77, 77, 255, 0.05) 0%,\n rgba(120, 120, 255, 0.05) 100%\n );--loqate-gradient-dark:linear-gradient(\n 135deg,\n rgba(77, 77, 255, 0.1) 0%,\n rgba(120, 120, 255, 0.1) 100%\n );--loqate-radius-sm:0.5rem;--loqate-radius-md:0.75rem;--loqate-radius-lg:1rem;--loqate-radius-xl:1.5rem;--loqate-font-size-xs:0.75rem;--loqate-font-size-sm:0.875rem;--loqate-font-size-base:1rem;--loqate-font-size-lg:1.125rem;--loqate-font-size-xl:1.25rem;--loqate-font-size-2xl:1.5rem;--loqate-font-size-3xl:1.875rem;--loqate-font-size-4xl:2.25rem;--loqate-font-size-5xl:3rem;--loqate-font-size-6xl:3.75rem}"},{"filePath":"public/custom-homepage.css","content":"body[data-path=\"/\"] aside,body[data-path=\"/\"] nav[class*=sidebar],body[data-path=\"/introduction\"] aside,body[data-path=\"/introduction\"] nav[class*=sidebar]{display:none!important}body[data-path=\"/\"] main,body[data-path=\"/introduction\"] main{margin-left:0!important;max-width:100%!important;width:100%!important}body[data-path=\"/\"] article,body[data-path=\"/introduction\"] article{max-width:100%!important;margin:0 auto!important;padding:0!important}.custom-hero{position:relative;width:calc(100% - 120px);max-width:1400px;min-height:550px;background:linear-gradient(135deg,#0a1128 0,#001f54 50%,#0a2463 100%);border-radius:20px;overflow:hidden;padding:100px 60px;margin:40px 60px 80px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.3)}.custom-framework-section::before,.custom-hero::before{content:'';position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.custom-hero::before{background:radial-gradient(circle at 20% 30%,rgba(77,77,255,.3) 0,transparent 40%),radial-gradient(circle at 80% 70%,rgba(102,102,255,.25) 0,transparent 40%);z-index:1}.custom-hero-content{position:relative;z-index:3;max-width:900px}.custom-hero h1{font-size:3.75rem!important;font-weight:800!important;color:#fff!important;margin-bottom:28px!important;line-height:1.15!important;letter-spacing:-.025em!important;text-shadow:0 2px 10px rgba(0,0,0,.3)}.custom-hero p{font-size:1.3rem!important;color:#fff!important;margin-bottom:48px!important;line-height:1.65!important;max-width:750px;margin-left:auto;margin-right:auto;text-shadow:0 1px 6px rgba(0,0,0,.3)}.custom-cta-buttons{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}.custom-btn{padding:16px 32px;border-radius:12px;font-weight:600;font-size:1rem;text-decoration:none;display:inline-flex;align-items:center;gap:8px;transition:all .3s cubic-bezier(.4,0,.2,1);border:2px solid transparent}.custom-btn-primary{background:#4d4dff;color:#fff!important;border-color:#4d4dff}.custom-btn-primary:hover,.custom-btn-secondary:hover{transform:translateY(-3px);text-decoration:none!important}.custom-btn-primary:hover{background:#66f;border-color:#66f;box-shadow:0 14px 28px rgba(77,77,255,.5)}.custom-btn-secondary{background:0 0;color:#fff!important;border-color:rgba(255,255,255,.3)}.custom-btn-secondary:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.6)}.custom-framework-section h2,.custom-section-title{font-weight:700!important;letter-spacing:-.02em!important}.custom-section-title{font-size:2.75rem!important;text-align:center!important;margin:100px 60px 20px!important;color:#f1f5f9!important}.custom-section-subtitle{font-size:1.2rem!important;text-align:center!important;margin-bottom:56px!important;color:#cbd5e1!important;max-width:680px!important;margin-left:auto!important;margin-right:auto!important;line-height:1.6!important;padding-left:60px;padding-right:60px}.custom-cards-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;max-width:1400px;margin:60px}@media (max-width:1024px){.custom-cards-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:768px){.custom-cards-grid{grid-template-columns:1fr!important}}.custom-card{position:relative;background:#fff;border:2px solid #e2e8f0;border-radius:16px;padding:32px 28px;text-decoration:none!important;display:block;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 1px 3px rgba(0,0,0,.04)}.custom-card:hover{border-color:#4d4dff;box-shadow:0 12px 32px rgba(77,77,255,.2);transform:translateY(-8px);text-decoration:none!important}.custom-card:hover .custom-card-icon{transform:translateX(6px);opacity:1}.custom-card-icon{position:absolute;top:24px;right:24px;color:#4d4dff;font-size:24px;opacity:.5;transition:all .3s ease}.custom-card-emoji{font-size:2.5rem;margin-bottom:16px;display:block}.custom-card h3,.custom-step h3{font-weight:600!important;margin-bottom:12px!important}.custom-card h3{font-size:1.375rem!important;color:#0f172a!important;margin-top:0!important}.custom-card p{font-size:.9375rem!important;color:#64748b!important;line-height:1.65!important;margin:0!important}.custom-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin:60px;max-width:1400px}@media (max-width:1024px){.custom-steps{grid-template-columns:1fr}}.custom-step{background:#1e293b;border:2px solid #334155;border-radius:16px;padding:32px 28px;position:relative;overflow:hidden}.custom-step-badge{display:inline-block;background:#4d4dff;color:#fff;padding:6px 16px;border-radius:20px;font-size:.8125rem;font-weight:600;margin-bottom:16px}.custom-step h3{font-size:1.5rem!important;color:#fff!important}.custom-step p{font-size:.9375rem!important;color:#e2e8f0!important;line-height:1.6!important;margin-bottom:20px!important}.custom-step-code{background:#0f172a;border:1px solid #334155;border-radius:8px;padding:16px;margin-top:16px;font-family:'Monaco','Menlo','Courier New',monospace!important;font-size:.8125rem;line-height:1.6;color:#f1f5f9;overflow-x:auto}.custom-step a,.custom-step-code-keyword{color:#c084fc;font-weight:600}.custom-step-code-string{color:#86efac}.custom-step-code-comment{color:#94a3b8;font-style:italic}.custom-step a{color:#b3b3ff!important;text-decoration:none;font-size:.9375rem;display:inline-block;margin-top:12px}.custom-step a:hover{color:#d9d9ff!important;text-decoration:underline}.custom-framework-section{position:relative;background:linear-gradient(135deg,#0a1128 0,#001f54 50%,#0a2463 100%);border-radius:20px;padding:80px 60px;margin:100px 60px;max-width:1400px;text-align:center;overflow:hidden}.custom-framework-section::before{background:radial-gradient(circle at 30% 40%,rgba(77,77,255,.2) 0,transparent 50%),radial-gradient(circle at 70% 60%,rgba(102,102,255,.15) 0,transparent 50%)}.custom-framework-section>*{position:relative;z-index:1}.custom-framework-section h2{font-size:2.5rem!important;color:#fff!important;margin-bottom:20px!important;text-shadow:0 2px 8px rgba(0,0,0,.3)}.custom-framework-section p{font-size:1.125rem!important;color:#fff!important;margin-bottom:48px!important;max-width:680px!important;margin-left:auto!important;margin-right:auto!important;line-height:1.6!important;text-shadow:0 1px 4px rgba(0,0,0,.3)}.custom-framework-icons{display:flex;justify-content:center;gap:32px;flex-wrap:wrap}.custom-framework-icon{width:72px;height:72px;background:rgba(255,255,255,.1);border:2px solid rgba(255,255,255,.2);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:2rem;transition:all .3s ease;backdrop-filter:blur(10px);cursor:pointer}.custom-framework-icon:hover{background:rgba(255,255,255,.18);border-color:#4d4dff;transform:translateY(-6px) scale(1.05)}.custom-faq{margin:100px auto;max-width:900px;padding-left:60px;padding-right:60px}.custom-faq-item{background:0 0;border:2px solid #e2e8f0;border-radius:12px;margin-bottom:16px;overflow:hidden;transition:all .3s ease}.custom-faq-item:hover{border-color:#cbd5e1}.custom-faq-question{padding:24px 28px;font-size:1.125rem!important;font-weight:600!important;color:#0f172a!important;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:all .2s ease;user-select:none}.custom-faq-question span{transition:transform .3s ease;color:#4d4dff;font-size:1.25rem}.custom-faq-item.active .custom-faq-question span{transform:rotate(180deg)}.custom-faq-answer{max-height:0;padding:0 28px;color:#64748b!important;line-height:1.7!important;overflow:hidden;transition:max-height .3s ease,padding .3s ease}.custom-faq-item.active .custom-faq-answer{max-height:500px;padding:0 28px 24px}.custom-integration-card,.integration-logo{display:flex;align-items:center;justify-content:center}.custom-integration-card{background:#fff;border:2px solid #e2e8f0;border-radius:16px;padding:32px 24px;text-align:center;transition:all .3s ease;text-decoration:none!important;flex-direction:column;min-height:140px}.custom-integration-card:hover{border-color:#4d4dff;box-shadow:0 8px 20px rgba(77,77,255,.15);transform:translateY(-4px);text-decoration:none!important}.integration-logo{margin-bottom:0}.integration-logo svg{width:100%;height:auto;max-width:100px}.custom-integration-card h3{font-size:1rem!important;font-weight:600!important;color:#0f172a!important;margin:0!important}.custom-integration-card p{font-size:.875rem!important;color:#64748b!important;margin:8px 0 0!important}@media (max-width:768px){.custom-hero{width:calc(100% - 48px);padding:60px 24px;margin:40px 24px 80px;min-height:450px}.custom-hero h1{font-size:2.5rem!important}.custom-hero p{font-size:1.125rem!important}.custom-section-title{font-size:2rem!important;margin-left:24px!important;margin-right:24px!important}.custom-section-subtitle{margin-left:auto!important;margin-right:auto!important;padding-left:24px;padding-right:24px}.custom-cards-grid{margin-left:24px!important;margin-right:24px!important}.custom-framework-section,.custom-steps{margin-left:24px;margin-right:24px}.custom-framework-section{padding:60px 24px}.custom-framework-section h2{font-size:2rem!important}.custom-faq{margin-left:auto;margin-right:auto;padding-left:24px;padding-right:24px}body[data-path=\"/\"] p[style*=textAlign],body[data-path=\"/introduction\"] p[style*=textAlign]{margin-left:24px!important;margin-right:24px!important;padding-left:0!important;padding-right:0!important}body[data-path=\"/\"] div[style*=maxWidth],body[data-path=\"/introduction\"] div[style*=maxWidth]{padding-left:24px!important;padding-right:24px!important}}"},{"filePath":"public/global.css","content":"body[data-path=\"/\"] aside,body[data-path=\"/\"] nav[class*=sidebar],body[data-path=\"/introduction\"] aside,body[data-path=\"/introduction\"] nav[class*=sidebar]{display:none!important}body:not([data-path=\"/\"]):not([data-path=\"/introduction\"]) aside,body:not([data-path=\"/\"]):not([data-path=\"/introduction\"]) nav[class*=sidebar]{position:sticky!important;top:0!important;height:100vh!important;overflow-y:auto!important;align-self:flex-start!important}body[data-path=\"/\"] main,body[data-path=\"/introduction\"] main{margin-left:0!important;max-width:100%!important;width:100%!important}body[data-path=\"/\"] article,body[data-path=\"/introduction\"] article{max-width:100%!important;margin:0 auto!important;padding:0!important}#breadcrumb,.breadcrumb-container,.breadcrumbs,[class*=Breadcrumb],[class*=breadcrumb],[data-breadcrumb],[id*=breadcrumb],nav[aria-label=Breadcrumb],nav[aria-label=breadcrumb]{display:none!important;visibility:hidden!important;height:0!important;overflow:hidden!important;opacity:0!important}body[data-path=\"/\"],body[data-path=\"/\"] html,body[data-path=\"/introduction\"],body[data-path=\"/introduction\"] html{overflow-x:hidden;max-width:100%}body:not([data-path=\"/\"]):not([data-path=\"/introduction\"]){max-width:100%}body *{box-sizing:border-box}:root{--hero-bg:#0a0e27;--hero-text:#ffffff;--hero-subtext:rgba(255, 255, 255, 0.95);--section-title:#f8fafc;--section-subtitle:#cbd5e1;--step-bg:rgba(15, 23, 42, 0.6);--step-border:rgba(102, 102, 255, 0.3);--step-title:#ffffff;--step-text:#e2e8f0;--link-color:#6666ff;--link-hover:#8080ff;--code-bg:rgba(15, 23, 42, 0.9);--hero-overlay-start:rgba(10, 14, 39, 0.4);--hero-overlay-mid:rgba(10, 14, 39, 0.2);--hero-overlay-end:rgba(10, 14, 39, 0.5)}@media (prefers-color-scheme:light){:root{--hero-bg:#0a0e27;--hero-text:#ffffff;--hero-subtext:rgba(255, 255, 255, 0.95);--hero-overlay-start:rgba(10, 14, 39, 0.4);--hero-overlay-mid:rgba(10, 14, 39, 0.2);--hero-overlay-end:rgba(10, 14, 39, 0.5);--section-title:#0f172a;--section-subtitle:#475569;--step-bg:#ffffff;--step-border:rgba(77, 77, 255, 0.2);--step-title:#4d4dff;--step-text:#1e293b;--link-color:#4d4dff;--link-hover:#3d3dff;--code-bg:#f1f5f9}}html.dark,html.light{--hero-bg:#0a0e27;--hero-text:#ffffff;--hero-subtext:rgba(255, 255, 255, 0.95);--hero-overlay-start:rgba(10, 14, 39, 0.4);--hero-overlay-mid:rgba(10, 14, 39, 0.2);--hero-overlay-end:rgba(10, 14, 39, 0.5)}html.dark{--section-title:#f8fafc;--section-subtitle:#cbd5e1;--step-bg:rgba(15, 23, 42, 0.6);--step-border:rgba(102, 102, 255, 0.3);--step-title:#ffffff;--step-text:#e2e8f0;--link-color:#6666ff;--link-hover:#8080ff;--code-bg:rgba(15, 23, 42, 0.9)}html.light{--section-title:#0f172a;--section-subtitle:#475569;--step-bg:#ffffff;--step-border:rgba(77, 77, 255, 0.2);--step-title:#4d4dff;--step-text:#1e293b;--link-color:#4d4dff;--link-hover:#3d3dff;--code-bg:#f1f5f9}[class*=header] a[href*=\"support.loqate.com\"],[class*=nav] a[href*=\"support.loqate.com\"],[class*=topbar] a[href*=\"support.loqate.com\"],header a[href*=\"support.loqate.com\"]{background:#e5e7eb!important;color:#1f2937!important;padding:8px 16px!important;border-radius:8px!important;font-weight:600!important;transition:all .2s ease!important;text-decoration:none!important;display:inline-flex!important;align-items:center!important;margin-left:8px!important}[class*=header] a[href*=\"support.loqate.com\"]:hover,[class*=nav] a[href*=\"support.loqate.com\"]:hover,[class*=topbar] a[href*=\"support.loqate.com\"]:hover,header a[href*=\"support.loqate.com\"]:hover{background:#d1d5db!important;color:#111827!important}.custom-hero{position:relative;width:calc(100% - 120px);max-width:1400px;height:550px;background-color:var(--hero-bg);border-radius:1.5rem;overflow:hidden;padding:70px 40px;margin:40px auto 60px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;box-sizing:border-box}.custom-hero::after,.custom-hero::before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}.custom-hero::before{background-image:url(/images/hero-globe.jpg);background-size:cover;background-position:center center;background-repeat:no-repeat;opacity:.9;z-index:0}.custom-hero::after{background:linear-gradient(to bottom,var(--hero-overlay-start) 0%,var(--hero-overlay-mid) 40%,var(--hero-overlay-end) 100%);z-index:1}.custom-hero-content{position:relative;z-index:2;max-width:900px}.custom-hero h1{font-size:3.25rem;font-weight:700;color:var(--hero-text);margin-bottom:20px;line-height:1.2;text-shadow:0 2px 20px rgba(0,0,0,.3)}.custom-hero p{font-size:1.25rem;color:var(--hero-subtext);margin-bottom:40px;line-height:1.6;max-width:700px;margin-left:auto;margin-right:auto;text-shadow:0 1px 10px rgba(0,0,0,.2)}.custom-cta-buttons{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}.custom-btn{padding:14px 32px;border-radius:8px;font-weight:600;font-size:1rem;text-decoration:none;display:inline-flex;align-items:center;gap:8px;transition:all .3s ease;cursor:pointer}.custom-btn-primary{background:#4d4dff;color:#fff;border:2px solid #4d4dff}.custom-btn-primary:hover{background:#3d3dff;border-color:#3d3dff;transform:translateY(-2px);box-shadow:0 8px 20px rgba(77,77,255,.4)}.custom-btn-secondary{background:0 0;color:#fff;border:2px solid rgba(255,255,255,.4)}.custom-btn-secondary:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.6);transform:translateY(-2px)}.custom-section-title{font-size:2.25rem;font-weight:700;color:var(--section-title)!important;margin-top:60px;margin-bottom:16px;text-align:center}.custom-section-subtitle{font-size:1.125rem;color:var(--section-subtitle)!important;margin-bottom:40px;text-align:center;max-width:700px;margin-left:auto;margin-right:auto}@media (prefers-color-scheme:dark){.custom-section-title{color:#f8fafc!important}.custom-section-subtitle{color:#cbd5e1!important}}html.dark .custom-section-title{color:#f8fafc!important}html.dark .custom-section-subtitle{color:#cbd5e1!important}@media (prefers-color-scheme:light){.custom-section-title{color:#0f172a!important}.custom-section-subtitle{color:#475569!important}}html.light .custom-section-title{color:#0f172a!important}html.light .custom-section-subtitle{color:#475569!important}.custom-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin:40px auto 80px;padding:20px 0;max-width:1200px}.custom-step{background:var(--step-bg);border:1px solid var(--step-border);border-radius:1.25rem;padding:36px;position:relative;transition:all .3s ease;backdrop-filter:blur(10px)}.custom-step:hover{border-color:rgba(102,102,255,.6);box-shadow:0 8px 24px rgba(77,77,255,.2);transform:translateY(-4px)}@media (prefers-color-scheme:dark){.custom-step{box-shadow:none}.custom-step:hover{box-shadow:0 8px 24px rgba(77,77,255,.2)}}html.dark .custom-step{box-shadow:none}html.dark .custom-step:hover{box-shadow:0 8px 24px rgba(77,77,255,.2)}@media (prefers-color-scheme:light){.custom-step{box-shadow:0 2px 8px rgba(0,0,0,.08)}.custom-step:hover{box-shadow:0 8px 24px rgba(77,77,255,.3)}}html.light .custom-step{box-shadow:0 2px 8px rgba(0,0,0,.08)}html.light .custom-step:hover{box-shadow:0 8px 24px rgba(77,77,255,.3)}.custom-step-badge{display:inline-block;background:#4d4dff;color:#fff;padding:8px 20px;border-radius:24px;font-size:.9rem;font-weight:600;margin-bottom:12px}.custom-step h3,.custom-step-title{font-size:1.75rem;font-weight:600;color:var(--step-title);margin-top:0;margin-bottom:12px}.custom-step-title{font-size:1.5rem;margin-top:4px;margin-bottom:8px}.custom-step p{font-size:1rem;color:var(--step-text);line-height:1.7;margin-bottom:24px}@media (prefers-color-scheme:dark){.custom-step h3,.custom-step-title{color:#fff!important}.custom-step p{color:#e2e8f0!important}}html.dark .custom-step h3,html.dark .custom-step-title{color:#fff!important}html.dark .custom-step p{color:#e2e8f0!important}@media (prefers-color-scheme:light){.custom-step h3,.custom-step-title{color:#4d4dff!important}.custom-step p{color:#1e293b!important}}.custom-step a,html.light .custom-step h3,html.light .custom-step-title{color:#4d4dff!important}html.light .custom-step p{color:#1e293b!important}.custom-step-code{background:rgba(15,23,42,.9);color:#e2e8f0;padding:20px;border-radius:12px;font-family:\"JetBrains Mono\",monospace;font-size:.9rem;margin-bottom:20px;overflow-x:auto;line-height:1.8;border:1px solid rgba(51,65,85,.5)}.custom-step-code-keyword{color:#c792ea}.custom-step-code-string{color:#c3e88d}.custom-step-code-comment{color:#676e95;font-style:italic}.custom-step a{text-decoration:none;font-weight:500;display:inline-flex;align-items:center;gap:6px;transition:all .2s ease}.custom-step a:hover{color:#3d3dff!important;text-decoration:none}.custom-step .custom-btn{display:inline-flex!important;align-items:center!important;justify-content:center!important;width:100%!important}.custom-step .custom-btn-primary{background:#4d4dff!important;color:#fff!important;border:2px solid #4d4dff!important}.custom-step .custom-btn-primary:hover{background:#3d3dff!important;border-color:#3d3dff!important;transform:translateY(-2px)!important;box-shadow:0 8px 20px rgba(77,77,255,.4)!important;color:#fff!important}.custom-step .custom-btn-service-secondary,html.dark .custom-step .custom-btn-service-secondary{background:0 0!important;color:#fff!important;border:2px solid rgba(255,255,255,.4)!important}.custom-step .custom-btn-service-secondary:hover,html.dark .custom-step .custom-btn-service-secondary:hover{background:rgba(255,255,255,.1)!important;border-color:rgba(255,255,255,.6)!important;transform:translateY(-2px)!important;color:#fff!important}@media (prefers-color-scheme:dark){.custom-step .custom-btn-service-secondary{background:0 0!important;color:#fff!important;border:2px solid rgba(255,255,255,.4)!important}.custom-step .custom-btn-service-secondary:hover{background:rgba(255,255,255,.1)!important;border-color:rgba(255,255,255,.6)!important;transform:translateY(-2px)!important;color:#fff!important}}@media (prefers-color-scheme:light){.custom-step .custom-btn-service-secondary{background:#e5e7eb!important;color:#1f2937!important;border:2px solid #9ca3af!important}.custom-step .custom-btn-service-secondary:hover{background:#d1d5db!important;color:#111827!important;border-color:#6b7280!important}}html.light .custom-step .custom-btn-service-secondary{background:#e5e7eb!important;color:#1f2937!important;border:2px solid #9ca3af!important}html.light .custom-step .custom-btn-service-secondary:hover{background:#d1d5db!important;color:#111827!important;border-color:#6b7280!important}.custom-step pre{max-height:250px;overflow-y:auto;overflow-x:auto;margin-bottom:20px;scrollbar-width:thin;scrollbar-color:rgba(102,102,255,.5) rgba(15,23,42,.9)}.custom-step pre::-webkit-scrollbar{width:8px;height:8px}.custom-step pre::-webkit-scrollbar-track{background:rgba(15,23,42,.5);border-radius:4px}.custom-step pre::-webkit-scrollbar-thumb{background:rgba(102,102,255,.5);border-radius:4px}.custom-step pre::-webkit-scrollbar-thumb:hover{background:rgba(102,102,255,.7)}.custom-faq{max-width:1000px;margin:40px auto;padding:40px;background:rgba(15,23,42,.4);border:1px solid rgba(102,102,255,.3);border-radius:1.5rem;backdrop-filter:blur(10px)}.custom-faq-item{background:0 0;border:0;border-bottom:1px solid rgba(51,65,85,.5);margin-bottom:0;overflow:hidden;transition:all .3s ease}.custom-faq-item:last-child{border-bottom:none}.custom-faq-question{padding:24px 0 24px 20px;font-size:1.125rem;font-weight:500;color:#8080ff;cursor:pointer;display:flex;justify-content:space-between;align-items:center;user-select:none;transition:all .3s ease}.custom-faq-question:hover{color:#b3b3ff}.custom-faq-answer,.custom-faq-question span{font-size:1rem;color:#cbd5e1;transition:transform .3s ease}.custom-faq-item.active .custom-faq-question span{transform:rotate(180deg)}.custom-faq-answer{max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease;padding:0;line-height:1.7}.custom-faq-item.active .custom-faq-answer{max-height:500px;padding:0 0 24px 20px}.text-muted{color:var(--section-subtitle)!important}.text-primary{color:var(--link-color)!important}.text-primary:hover{color:var(--link-hover)!important}.text-secondary{color:var(--section-subtitle)!important}@media (prefers-color-scheme:dark){.text-muted,.text-secondary{color:#cbd5e1!important}.text-primary,a.dynamic-link,a.resource-link{color:#66f!important}}html.dark .text-muted,html.dark .text-secondary{color:#cbd5e1!important}html.dark .text-primary,html.dark a.dynamic-link,html.dark a.resource-link{color:#66f!important}@media (prefers-color-scheme:light){.text-muted,.text-secondary{color:#475569!important}.text-primary,a.dynamic-link,a.resource-link{color:#4d4dff!important}}html.light .text-muted,html.light .text-secondary{color:#475569!important}html.light .text-primary,html.light a.dynamic-link,html.light a.resource-link{color:#4d4dff!important}a.dynamic-link{color:var(--link-color)!important;text-decoration:none;font-weight:600}a.dynamic-link:hover,a.resource-link,a.resource-link:hover{color:var(--link-hover)!important;text-decoration:none}a.resource-link{color:var(--link-color)!important;font-weight:500}.custom-btn-service-secondary{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;border-radius:8px;font-weight:600;font-size:1rem;text-decoration:none;transition:all .3s ease;cursor:pointer;background:#e5e7eb;color:#1f2937;border:2px solid #9ca3af}.custom-btn-service-secondary:hover{background:#d1d5db;color:#111827;border-color:#6b7280;transform:translateY(-2px)}@media (prefers-color-scheme:dark){.custom-btn-service-secondary{background:0 0;color:#fff;border:2px solid rgba(255,255,255,.4)}.custom-btn-service-secondary:hover{background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.6);transform:translateY(-2px)}}html.dark .custom-btn-service-secondary{background:0 0;color:#fff;border:2px solid rgba(255,255,255,.4)}html.dark .custom-btn-service-secondary:hover{background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.6);transform:translateY(-2px)}.btn-primary,.btn-primary:hover{text-decoration:none!important;color:#fff!important}.btn-primary{padding:10px 20px!important;border-radius:8px!important;font-weight:600!important;font-size:.9375rem!important;display:inline-flex!important;align-items:center!important;gap:6px!important;background:#4d4dff!important;border:0!important;transition:all .2s ease!important;cursor:pointer!important}.btn-primary:hover{background:#6863f5!important}@media (prefers-color-scheme:light){.btn-primary{background:#4d4dff!important;color:#fff!important}.btn-primary:hover{background:#6863f5!important;color:#fff!important}}html.dark .btn-primary,html.light .btn-primary{background:#4d4dff!important;color:#fff!important}html.light .btn-primary:hover{background:#6863f5!important;color:#fff!important}@media (prefers-color-scheme:dark){.btn-primary{background:#4d4dff!important;color:#fff!important}.btn-primary:hover{background:#504bdd!important;color:#fff!important}}html.dark .btn-primary:hover{background:#504bdd!important;color:#fff!important}.btn-secondary{padding:10px 20px!important;border-radius:8px!important;font-weight:600!important;font-size:.9375rem!important;text-decoration:none!important;display:inline-flex!important;align-items:center!important;gap:6px!important;background:#f7f7f8!important;color:#1f2937!important;border:0!important;transition:all .2s ease!important;cursor:pointer!important}.btn-secondary:hover{background:#e6e6e7!important;color:#111827!important;text-decoration:none!important}@media (prefers-color-scheme:light){.btn-secondary{background:#f7f7f8!important;color:#1f2937!important}.btn-secondary:hover{background:#e6e6e7!important;color:#111827!important}}html.light .btn-secondary{background:#f7f7f8!important;color:#1f2937!important}html.light .btn-secondary:hover{background:#e6e6e7!important;color:#111827!important}@media (prefers-color-scheme:dark){.btn-secondary{background:#121217!important;color:#fff!important}.btn-secondary:hover{background:#232328!important;color:#fff!important}}html.dark .btn-secondary{background:#121217!important;color:#fff!important}html.dark .btn-secondary:hover{background:#232328!important;color:#fff!important}body:has(.integration-overview-page) h1:first-child{font-size:3rem!important;line-height:1.2!important;font-weight:700!important}body:has(.integration-overview-page) article>h1+p:first-of-type,body:has(.integration-overview-page) main>div>h1+p:first-of-type{font-size:2rem!important;line-height:1.5!important}.faq-small-text *,.faq-small-text button,.faq-small-text div,.faq-small-text p,.faq-small-text span,.faq-small-text summary{font-size:.875rem!important}.integration-logo-container{position:relative;width:120px!important;height:120px!important;display:block!important;margin:0 0 16px!important}.integration-logo,.integration-logo-container img,img.integration-logo{object-fit:contain!important;padding:0!important;background:0 0!important}.integration-logo-container img{position:absolute;top:0;left:0;width:120px!important;height:120px!important;margin:0!important}.integration-logo,img.integration-logo{display:block!important}.integration-logo,.integration-logo-placeholder,img.integration-logo,img.integration-logo[src*=reapit]{width:120px!important;height:120px!important;margin:0 0 16px!important}img.integration-logo[src*=reapit]{object-fit:scale-down!important;object-position:left top!important;padding:30px 30px 30px 0!important}.integration-logo-placeholder{display:block!important;padding:0!important}.integration-title{font-size:1rem!important;font-weight:600!important;margin:0 0 8px!important;padding:0!important;line-height:1.3!important}.integration-title a[aria-label*=copy],.integration-title a[aria-label*=link],.integration-title+a,h3.integration-title a,h3.integration-title+a{display:none!important}.integration-icon-placeholder{width:120px!important;height:120px!important;display:flex!important;align-items:center!important;justify-content:center!important;margin:0 0 16px!important;background:#f1f5f9!important;border-radius:12px!important}html.dark .integration-icon-placeholder{background:#1e293b!important}.integration-icon-text{font-size:2.5rem!important}@media (max-width:768px){.custom-hero{width:calc(100% - 40px);padding:50px 20px;height:480px;margin:30px auto 50px}.custom-hero h1{font-size:2rem;line-height:1.2}.custom-hero p{font-size:.95rem}.custom-section-title{font-size:1.75rem;margin-top:40px}.custom-steps{grid-template-columns:1fr;margin:40px 20px}.custom-faq{padding:24px;margin:30px 20px}body:has(.integration-overview-page) h1:first-child{font-size:2rem!important}body:has(.integration-overview-page) article>h1+p:first-of-type,body:has(.integration-overview-page) main>div>h1+p:first-of-type{font-size:1.25rem!important}}.section-divider{border-top:1px solid #e5e7eb!important;margin:60px auto!important;width:100%!important;display:block!important;opacity:1!important;visibility:visible!important;height:0!important}html.dark .section-divider{border-top:1px solid #374151!important}@media (prefers-color-scheme:dark){.section-divider{border-top:1px solid #374151!important}}body[data-path=\"/\"] a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link),body[data-path=\"/\"] article a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link),body[data-path=\"/\"] div a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link),body[data-path=\"/\"] p a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] article a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] div a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] p a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link){color:#4d4dff!important;text-decoration:none!important;font-weight:500!important;transition:all .2s ease!important}body[data-path=\"/\"] [class*=CardGroup] a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/\"] [class*=Card] a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/\"] a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/\"] article a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/\"] div a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/\"] p a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] [class*=CardGroup] a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] [class*=Card] a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] article a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] div a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] p a:not([class*=btn]):not([class*=button]):not(.self-hosting-link):not(.trust-link):hover{color:#3d3dff!important;text-decoration:none!important}@media (prefers-color-scheme:dark){.card-link,a.card-link,body[data-path=\"/\"] a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/\"] article a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/\"] div a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/\"] p a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] article a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] div a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] p a:not(.self-hosting-link):not(.trust-link){color:#4d4dff!important}.card-link:hover,a.card-link:hover,body[data-path=\"/\"] a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/\"] article a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/\"] div a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/\"] p a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] article a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] div a:not(.self-hosting-link):not(.trust-link):hover,body[data-path=\"/introduction\"] p a:not(.self-hosting-link):not(.trust-link):hover{color:#3d3dff!important}}html.dark .card-link,html.dark a.card-link,html.dark body[data-path=\"/\"] a:not(.self-hosting-link):not(.trust-link),html.dark body[data-path=\"/\"] article a:not(.self-hosting-link):not(.trust-link),html.dark body[data-path=\"/\"] div a:not(.self-hosting-link):not(.trust-link),html.dark body[data-path=\"/\"] p a:not(.self-hosting-link):not(.trust-link),html.dark body[data-path=\"/introduction\"] a:not(.self-hosting-link):not(.trust-link),html.dark body[data-path=\"/introduction\"] article a:not(.self-hosting-link):not(.trust-link),html.dark body[data-path=\"/introduction\"] div a:not(.self-hosting-link):not(.trust-link),html.dark body[data-path=\"/introduction\"] p a:not(.self-hosting-link):not(.trust-link){color:#4d4dff!important}html.dark .card-link:hover,html.dark a.card-link:hover,html.dark body[data-path=\"/\"] a:not(.self-hosting-link):not(.trust-link):hover,html.dark body[data-path=\"/\"] article a:not(.self-hosting-link):not(.trust-link):hover,html.dark body[data-path=\"/\"] div a:not(.self-hosting-link):not(.trust-link):hover,html.dark body[data-path=\"/\"] p a:not(.self-hosting-link):not(.trust-link):hover,html.dark body[data-path=\"/introduction\"] a:not(.self-hosting-link):not(.trust-link):hover,html.dark body[data-path=\"/introduction\"] article a:not(.self-hosting-link):not(.trust-link):hover,html.dark body[data-path=\"/introduction\"] div a:not(.self-hosting-link):not(.trust-link):hover,html.dark body[data-path=\"/introduction\"] p a:not(.self-hosting-link):not(.trust-link):hover{color:#3d3dff!important}body[data-path=\"/\"] [class*=CardGroup] a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/\"] [class*=Card] a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] [class*=CardGroup] a:not(.self-hosting-link):not(.trust-link),body[data-path=\"/introduction\"] [class*=Card] a:not(.self-hosting-link):not(.trust-link){color:#4d4dff!important;text-decoration:none!important;font-weight:500!important}body[data-path=\"/\"] article svg[class*=fa-lock],body[data-path=\"/\"] article svg[data-icon=lock],body[data-path=\"/introduction\"] article svg[class*=fa-lock],body[data-path=\"/introduction\"] article svg[data-icon=lock]{width:24px!important;height:24px!important;max-width:24px!important;max-height:24px!important}body[data-path=\"/\"] article svg,body[data-path=\"/introduction\"] article svg{margin-top:12px!important;margin-bottom:12px!important}body[data-path=\"/\"] article>div>div>a>div,body[data-path=\"/\"] article>div>div>div>div,body[data-path=\"/introduction\"] article>div>div>a>div,body[data-path=\"/introduction\"] article>div>div>div>div{padding-top:32px!important;padding-bottom:32px!important}.self-hosting-wrapper{display:flex;flex-direction:row;align-items:flex-start;justify-content:space-between;gap:40px;width:100%}.self-hosting-left{display:flex;flex-direction:column;gap:8px;flex:1}body[data-path=\"/\"] div:has(.self-hosting-wrapper),body[data-path=\"/introduction\"] div:has(.self-hosting-wrapper){display:flex!important;flex-direction:row!important;align-items:flex-start!important;gap:12px!important}.self-hosting-left .self-hosting-title,.self-hosting-title,a h3.self-hosting-title,body[data-path=\"/\"] .self-hosting-title,body[data-path=\"/\"] a h3.self-hosting-title,body[data-path=\"/\"] h3.self-hosting-title,body[data-path=\"/introduction\"] .self-hosting-title,body[data-path=\"/introduction\"] a h3.self-hosting-title,body[data-path=\"/introduction\"] h3.self-hosting-title,h3.self-hosting-title{margin:0!important;font-size:1.125rem!important;font-weight:700!important;color:#000!important;opacity:1!important;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important;display:inline-block!important}.self-hosting-desc{margin:0;font-size:.875rem;color:#6b7280;line-height:1.5}.self-hosting-link{display:inline-block;position:relative;font-size:.875rem;font-weight:500;transition:all .2s ease;margin-top:4px;width:fit-content}.self-hosting-link::after{content:\"\";position:absolute;left:0;bottom:-1px;width:100%;height:1px;background-color:#4d4dff;transition:all .2s ease}.self-hosting-link:hover::after{height:2px;background-color:#3d3dff}.self-hosting-title a[aria-label*=copy],.self-hosting-title a[aria-label*=link],.self-hosting-title+a,h3.self-hosting-title a,h3.self-hosting-title+a{display:none!important}.self-hosting-link,.trust-link,a.trust-link{color:#4d4dff!important;text-decoration:none!important;text-underline-offset:0!important;border-bottom:0!important;background-image:none!important;box-shadow:none!important}.trust-link,a.trust-link{display:inline-block!important;position:relative!important;font-size:.875rem!important;font-weight:500!important;transition:all .2s ease!important;width:fit-content!important}.trust-link::after,a.trust-link::after{content:\"\"!important;position:absolute!important;left:0!important;bottom:-1px!important;width:100%!important;height:1px!important;background-color:#4d4dff!important;transition:all .2s ease!important}.self-hosting-link:hover,.trust-link:hover,a.trust-link:hover{color:#3d3dff!important;text-decoration:none!important}.trust-link:hover::after,a.trust-link:hover::after{height:2px!important;background-color:#3d3dff!important}.keyword-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;flex-shrink:0;align-self:center}.keyword-badge{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:.875rem;font-weight:400;color:#64748b;white-space:nowrap}.keyword-badge svg{flex-shrink:0;color:#94a3b8;opacity:.7}html.dark .self-hosting-title{color:#f1f5f9!important}html.dark .keyword-badge,html.dark .self-hosting-desc{color:#94a3b8}html.dark .keyword-badge svg{color:#64748b;opacity:.8}@media (prefers-color-scheme:dark){.self-hosting-title{color:#f1f5f9!important}.keyword-badge,.self-hosting-desc{color:#94a3b8}.keyword-badge svg{color:#64748b;opacity:.8}}@media (max-width:768px){.self-hosting-wrapper{flex-direction:column;gap:20px}}[data-banner],div[id=Banner i],div[id=banner i]{background:#6366f1!important}[data-banner] a,a.text-primary[href*=\"https://docs.loqate.com/getting-started/introduction\"],div[id=Banner i] a,div[id=Banner i] a.text-primary,div[id=banner i] a,div[id=banner i] a.text-primary{color:#fff!important;text-decoration:underline!important}[data-banner] a:hover,div[id=Banner i] a:hover,div[id=banner i] a:hover{color:#e0e7ff!important}[data-banner] *,div[id=Banner i] *,div[id=banner i] *,html.dark div[id=Banner i] a.text-primary,html.dark div[id=banner i] a.text-primary,html.light div[id=Banner i] a.text-primary,html.light div[id=banner i] a.text-primary{color:#fff!important}table{width:100%!important;max-width:100%!important;table-layout:fixed!important;border-collapse:collapse!important}.gatsby-highlight,.highlight,code,pre,table td,table th{white-space:normal!important;word-break:break-word!important;overflow-wrap:anywhere!important}table embed,table iframe,table img,table object{max-width:100%!important;height:auto!important}.gatsby-highlight,.highlight,code,pre{white-space:pre-wrap!important}"},{"filePath":"snippets/homepage-hero.css","content":".homepage-hero{position:relative;width:100%;min-height:600px;background:linear-gradient(135deg,#0a0e27 0,#1a1f3a 50%,#2a3f5f 100%);border-radius:var(--loqate-radius-xl, 1.5rem);overflow:hidden;padding:80px 60px;margin-bottom:60px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.3)}.homepage-hero::before{background-image:radial-gradient(circle at 20% 50%,rgba(77,77,255,.15) 0,transparent 50%),radial-gradient(circle at 80% 80%,rgba(77,77,255,.1) 0,transparent 50%)}.framework-section::before,.homepage-hero::after,.homepage-hero::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}.homepage-hero::after{background-image:url(/images/hero-globe.svg);background-size:cover;background-position:center bottom;opacity:.6}.hero-content{position:relative;z-index:1;max-width:800px}.hero-title{font-size:var(--loqate-font-size-5xl);font-weight:700;color:#fff;margin-bottom:20px;line-height:1.2}.hero-subtitle{font-size:var(--loqate-font-size-lg);color:rgba(255,255,255,.85);margin-bottom:40px;line-height:1.6;max-width:700px;margin-left:auto;margin-right:auto}.hero-cta-container{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}.hero-cta-primary,.hero-cta-secondary{color:#fff;padding:14px 32px;border-radius:var(--loqate-radius-md);font-weight:600;font-size:var(--loqate-font-size-base);text-decoration:none;display:inline-flex;align-items:center;gap:8px;transition:all .3s ease}.hero-cta-primary{background:var(--loqate-primary);border:2px solid var(--loqate-primary)}.hero-cta-primary:hover{background:var(--loqate-secondary);border-color:var(--loqate-secondary);transform:translateY(-2px);box-shadow:0 8px 16px rgba(77,77,255,.3)}.hero-cta-secondary{background:0 0;border:2px solid rgba(255,255,255,.3)}.hero-cta-secondary:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.5);transform:translateY(-2px)}.product-cards-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px;margin:40px 0}.product-card{position:relative;background:#fff;border:1px solid #e5e7eb;border-radius:var(--loqate-radius-lg, 1rem);padding:28px 24px;transition:all .3s cubic-bezier(.4,0,.2,1);cursor:pointer;text-decoration:none;display:block;box-shadow:0 1px 3px rgba(0,0,0,.05)}.product-card:hover{border-color:var(--loqate-primary, #4d4dff);box-shadow:0 12px 28px rgba(77,77,255,.18),0 4px 8px rgba(77,77,255,.08);transform:translateY(-6px)}.product-card:hover .product-card-icon{transform:translateX(4px);opacity:1}.product-card-icon{position:absolute;top:20px;right:20px;color:var(--loqate-primary, #4d4dff);opacity:.6;font-size:20px;transition:all .3s ease}.product-card-title{font-size:var(--loqate-font-size-xl);font-weight:700;color:var(--loqate-dark);margin-bottom:12px}.product-card-description{font-size:var(--loqate-font-size-sm);color:var(--loqate-text-light);line-height:1.6}.steps-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:32px;margin:40px 0}.step-card{background:#f9fafb;border:1px solid #e5e7eb;border-radius:var(--loqate-radius-lg);padding:32px;position:relative}.step-badge{display:inline-block;background:var(--loqate-primary);color:#fff;padding:6px 16px;border-radius:20px;font-size:var(--loqate-font-size-sm);font-weight:600;margin-bottom:16px}.step-title{font-size:var(--loqate-font-size-xl);font-weight:700;color:var(--loqate-dark);margin-bottom:12px}.step-description{font-size:var(--loqate-font-size-sm);color:var(--loqate-text-light);line-height:1.6;margin-bottom:20px}.framework-section{position:relative;background:linear-gradient(135deg,#0a0e27 0,#1a1f3a 50%,#2a3f5f 100%);border-radius:var(--loqate-radius-xl);padding:60px 40px;margin:60px 0;overflow:hidden}.framework-section::before{background-image:radial-gradient(circle at 30% 40%,rgba(77,77,255,.15) 0,transparent 50%),radial-gradient(circle at 70% 60%,rgba(77,77,255,.1) 0,transparent 50%)}.framework-content{position:relative;z-index:1;text-align:center}.framework-title{font-size:var(--loqate-font-size-3xl);font-weight:700;color:#fff;margin-bottom:16px}.framework-subtitle{font-size:var(--loqate-font-size-base);color:rgba(255,255,255,.85);margin-bottom:40px;max-width:600px;margin-left:auto;margin-right:auto}.framework-icon,.framework-icons{display:flex;align-items:center;justify-content:center}.framework-icons{gap:32px;flex-wrap:wrap;margin-top:32px}.framework-icon{width:60px;height:60px;background:rgba(255,255,255,.1);border:2px solid rgba(255,255,255,.2);border-radius:50%;transition:all .3s ease;backdrop-filter:blur(10px)}.framework-icon:hover{background:rgba(255,255,255,.2);border-color:var(--loqate-primary);transform:translateY(-4px)}.framework-icon img,.framework-icon svg{width:32px;height:32px}.integration-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:24px;margin:40px 0}.integration-card{background:#fff;border:1px solid #e5e7eb;border-radius:var(--loqate-radius-lg);padding:24px;text-align:center;transition:all .3s ease;text-decoration:none;display:block}.integration-card:hover{border-color:var(--loqate-primary);box-shadow:0 4px 12px rgba(77,77,255,.1);transform:translateY(-2px)}.integration-card-title{font-size:var(--loqate-font-size-lg);font-weight:600;color:var(--loqate-dark);margin-top:12px}.integration-card-description{font-size:var(--loqate-font-size-sm);color:var(--loqate-text-light);margin-top:8px}.security-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px;margin:40px 0}.security-card{background:#f9fafb;border:1px solid #e5e7eb;border-radius:var(--loqate-radius-lg);padding:32px;text-align:center}.security-card-icon{font-size:40px;color:var(--loqate-primary);margin-bottom:16px}.security-card-title{font-size:var(--loqate-font-size-xl);font-weight:700;color:var(--loqate-dark);margin-bottom:8px}.security-card-description{font-size:var(--loqate-font-size-sm);color:var(--loqate-text-light)}.section-title{font-size:var(--loqate-font-size-3xl);font-weight:700;color:var(--loqate-dark);margin-bottom:16px;text-align:center}.section-subtitle{font-size:var(--loqate-font-size-base);color:var(--loqate-text-light);margin-bottom:40px;text-align:center;max-width:700px;margin-left:auto;margin-right:auto}@media (max-width:768px){.homepage-hero{padding:60px 30px;min-height:500px}.hero-title{font-size:var(--loqate-font-size-3xl)}.hero-subtitle{font-size:var(--loqate-font-size-base)}.product-cards-grid,.steps-container{grid-template-columns:1fr}.framework-section{padding:40px 24px}.integration-cards{grid-template-columns:1fr}}@media (prefers-color-scheme:dark){.product-card{background:var(--loqate-card-dark);border-color:var(--loqate-border-dark)}.product-card-title{color:var(--loqate-text-dark)}.step-card{background:var(--loqate-card-dark);border-color:var(--loqate-border-dark)}.step-title{color:var(--loqate-text-dark)}.integration-card{background:var(--loqate-card-dark);border-color:var(--loqate-border-dark)}.integration-card-title{color:var(--loqate-text-dark)}.security-card{background:var(--loqate-card-dark);border-color:var(--loqate-border-dark)}.section-title,.security-card-title{color:var(--loqate-text-dark)}}"}],"page":{"pagePath":"integrations/commercetools","slug":"/integrations/commercetools","pageMetadata":{"title":"commercetools Integration","sidebarTitle":"Overview","description":"Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.","mode":"wide","href":"/integrations/commercetools"},"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: \"Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.\"\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];const IntegrationHero=({worksWith,services=[],images=[],highlights=[],imageLayout=`landscape`,ctaLabel=`Integrate in 3 steps`,ctaHref=`#integrate-in-3-steps`})=>{const _components={a:`a`,..._provideComponents()};const CARD_WIDTH=520;const CARD_GAP=32;const[index,setIndex]=useState(0);const[step,setStep]=useState(CARD_WIDTH+CARD_GAP);const trackRef=useRef(null);useEffect(()=>{const track=trackRef.current;if(!track)return undefined;const measure=()=>{const card=track.firstElementChild;if(!card)return;const gap=parseFloat(window.getComputedStyle(track).columnGap)||0;setStep(card.getBoundingClientRect().width+gap)};measure();const observer=new ResizeObserver(measure);observer.observe(track);return()=>observer.disconnect()},[images.length]);const lastIndex=Math.max(images.length-1,0);const styles=`\n .integration-hero {\n display: grid;\n grid-template-columns: 320px minmax(0, 1fr);\n gap: 3rem;\n margin: 2rem 0 4rem 0;\n align-items: start;\n }\n .integration-hero h3 {\n font-size: 1rem;\n font-weight: 700;\n margin: 0 0 0.5rem 0;\n }\n .integration-hero-services {\n list-style-type: disc;\n list-style-position: inside;\n padding-left: 0;\n margin: 0 0 4rem 0;\n }\n .integration-hero-services li {\n margin-bottom: 0.25rem;\n font-size: 0.95rem;\n }\n .integration-hero-services li::before {\n display: none !important;\n content: none !important;\n }\n .integration-hero-cta {\n display: inline-block;\n padding: 0.75rem 1.5rem;\n background-color: #000;\n color: #fff !important;\n text-decoration: none !important;\n border: none !important;\n border-radius: 0.5rem;\n font-weight: 600;\n font-size: 0.95rem;\n text-align: center;\n }\n .integration-hero-cta:hover {\n background-color: #333;\n }\n html.dark .integration-hero-cta {\n background-color: #fff;\n color: #000 !important;\n }\n html.dark .integration-hero-cta:hover {\n background-color: #e0e0e0;\n }\n .integration-hero-media {\n position: relative;\n height: 400px;\n }\n .integration-hero-viewport {\n overflow: hidden;\n height: 100%;\n padding: 10px 15px;\n -webkit-mask-image: linear-gradient(to right, #000 85%, transparent 100%);\n mask-image: linear-gradient(to right, #000 85%, transparent 100%);\n }\n .integration-hero-track {\n display: flex;\n gap: ${CARD_GAP}px;\n height: 100%;\n transition: transform 0.5s ease;\n }\n .integration-hero-card {\n flex: 0 0 ${CARD_WIDTH}px;\n height: 100%;\n border-radius: 20px;\n overflow: hidden;\n background: #fff;\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .integration-hero-card img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n margin: 0 !important;\n border-radius: 0 !important;\n }\n .integration-hero-media.portrait {\n height: 500px;\n }\n .integration-hero-media.portrait .integration-hero-card {\n flex-basis: 380px;\n }\n .integration-hero-media.portrait .integration-hero-card img {\n object-fit: cover;\n }\n .integration-hero-nav {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.1);\n background: rgba(255, 255, 255, 0.95);\n color: #333;\n font-size: 24px;\n line-height: 1;\n cursor: pointer;\n z-index: 10;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: opacity 0.3s ease, box-shadow 0.2s ease;\n }\n .integration-hero-nav:hover {\n background: #fff;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n }\n .integration-hero-nav:disabled {\n opacity: 0.3;\n cursor: default;\n }\n .integration-hero-nav.prev {\n left: calc(1rem + 15px);\n }\n .integration-hero-nav.next {\n right: calc(1rem + 15px);\n }\n .integration-hero-highlights {\n display: grid;\n gap: 1rem;\n }\n .integration-hero-highlight {\n padding: 1.25rem 1.5rem;\n border-radius: 16px;\n border: 1px solid rgba(0, 0, 0, 0.1);\n }\n html.dark .integration-hero-highlight {\n border-color: rgba(255, 255, 255, 0.12);\n }\n .integration-hero-highlight p {\n margin: 0;\n font-size: 0.95rem;\n opacity: 0.85;\n }\n @media (max-width: 1024px) {\n .integration-hero {\n grid-template-columns: minmax(0, 1fr);\n gap: 2rem;\n }\n .integration-hero-services {\n margin-bottom: 2rem;\n }\n .integration-hero-media {\n height: 280px;\n }\n .integration-hero-card {\n flex-basis: min(${CARD_WIDTH}px, 85%);\n }\n .integration-hero-media.portrait {\n height: 440px;\n }\n .integration-hero-media.portrait .integration-hero-card {\n flex-basis: min(380px, 85%);\n }\n }\n `;const go=next=>setIndex(Math.min(Math.max(next,0),lastIndex));return _jsxs(_Fragment,{children:[_jsx(`style`,{children:styles}),_jsx(`div`,{className:`integration-overview-page`}),_jsxs(`div`,{className:`integration-hero`,children:[_jsxs(`div`,{children:[_jsx(`h3`,{children:`Works with:`}),_jsx(`p`,{style:{margin:`0 0 2rem 0`,fontSize:`0.95rem`},children:worksWith}),_jsx(`h3`,{children:`Supported Loqate Services:`}),_jsx(`ul`,{className:`integration-hero-services`,children:services.map(service=>_jsx(`li`,{children:service},service))}),_jsx(_components.a,{href:ctaHref,className:`integration-hero-cta`,children:ctaLabel})]}),images.length>0?_jsxs(`div`,{className:`integration-hero-media ${imageLayout===`portrait`?`portrait`:``}`,children:[_jsx(`div`,{className:`integration-hero-viewport`,children:_jsx(`div`,{className:`integration-hero-track`,ref:trackRef,style:{transform:`translateX(-${index*step}px)`},children:images.map(image=>_jsx(`div`,{className:`integration-hero-card`,children:_jsx(`img`,{src:image.src,alt:image.alt,noZoom:true})},image.src))})}),images.length>1\u0026\u0026_jsxs(_Fragment,{children:[_jsx(`button`,{type:`button`,\"aria-label\":`Previous screenshot`,className:`integration-hero-nav prev`,disabled:index===0,onClick:()=>go(index-1),children:`‹`}),_jsx(`button`,{type:`button`,\"aria-label\":`Next screenshot`,className:`integration-hero-nav next`,disabled:index===lastIndex,onClick:()=>go(index+1),children:`›`})]})]}):_jsx(`div`,{className:`integration-hero-highlights`,children:highlights.map(highlight=>_jsxs(`div`,{className:`integration-hero-highlight`,children:[_jsx(`h3`,{children:highlight.title}),_jsx(`p`,{children:highlight.description})]},highlight.title))})]})]})};function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Heading,Tab,Tabs,Warning,_MdxComponentBoundary}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_MdxComponentBoundary,{name:`IntegrationHero`,children:_jsx(IntegrationHero,{worksWith:`commercetools Frontend (B2C template)`,services:[`Address Capture`,`Address Verify`,`Email Validation`,`Phone Validation`],images:[{src:`/images/commercetools-studio-settings.png`,alt:`Loqate settings in commercetools Frontend Studio`}]})}),`\n`,_jsx(`div`,{className:`section-divider`}),`\n`,_jsx(Heading,{level:`2`,id:`about-this-integration`,children:`About this integration`}),`\n`,_jsxs(_components.p,{children:[`The Loqate commercetools plugin (`,_jsx(_components.a,{href:`https://github.com/loqate/loqate-commercetools`,children:_jsx(_components.code,{children:`loqate-commercetools`})}),`) integrates `,_jsx(_components.a,{href:`https://commercetools.com/`,children:`the commercetools platform`}),` with the Loqate API to provide Address Capture, Address Verify, Email Validation and Phone Validation in the `,_jsx(_components.strong,{children:`Checkout`}),`, `,_jsx(_components.strong,{children:`My Account`}),` and `,_jsx(_components.strong,{children:`Registration`}),` flows.`]}),`\n`,_jsx(_components.p,{children:`The modifications are applied in two areas:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Backend-for-frontend (BFF):`}),` commercetools extensions that make the Loqate API calls and handle the responses`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Frontend:`}),` React components that display the Loqate features to your customers`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The plugin is a `,_jsx(_components.strong,{children:`reference implementation`}),` built on the `,_jsx(_components.a,{href:`https://docs.commercetools.com/frontend-development/b2c-store-launchpad-overview`,children:`commercetools Frontend B2C template`}),` (latest as of 3 June 2024). It is not intended to be cloned and used as-is in production. Copy the relevant parts into your own implementation instead. See `,_jsx(_components.a,{href:`#disclaimers`,children:`Disclaimers`}),` for details.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`supported-loqate-services`,children:`Supported Loqate Services`}),`\n`,_jsx(`div`,{style:{marginBottom:`-1rem`}}),`\n`,_jsxs(_components.p,{children:[`Each service can be toggled on or off through project settings. The configuration options below are set in `,_jsx(_components.a,{href:`/integrations/commercetools-studio-settings`,children:`Studio settings`}),`.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Address Capture`,id:`address-capture`,\"data-child-heading-ids\":`[\"type-ahead-address-lookup\"]`,children:[_jsx(Heading,{level:`3`,id:`type-ahead-address-lookup`,children:`Type-Ahead Address Lookup`}),_jsx(_components.p,{children:`Address Capture suggests possible addresses based on user input.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`How it works:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Calls to the `,_jsx(_components.a,{href:`/api-reference/address-capture/find`,children:`Find`}),` endpoint are made continuously until an address of type `,_jsx(_components.code,{children:`Address`}),` is found`]}),`\n`,_jsxs(_components.li,{children:[`If the type is `,_jsx(_components.code,{children:`Container`}),`, the system continues making calls to the Find endpoint`]}),`\n`,_jsxs(_components.li,{children:[`Once an address of type `,_jsx(_components.code,{children:`Address`}),` is found, the `,_jsx(_components.a,{href:`/api-reference/address-capture/retrieve`,children:`Retrieve`}),` endpoint is called to capture the full address details`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`IP to Country:`}),` determines the user’s country based on their IP address, and auto-populates the country field with the result.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Configuration options:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_IP_TO_COUNTRY_ENABLED`}),` - toggle for IP to Country functionality`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_ADDRESS_LOOKUP_CHECKOUT`}),` - toggle for address lookup during checkout`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_ADDRESS_LOOKUP_MY_ACCOUNT`}),` - toggle for address lookup on the My Account page`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`CHECKOUT_ADDRESS_REQUEST_LIMIT`}),` - debounce time for address capture requests`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`RESTRICTED_COUNTRIES`}),` - list of restricted country ISO2 codes to exclude from address capture suggestions`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Integration areas:`}),` Checkout, My Account`]}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/api-reference/address-capture/apis`,children:`Address Capture API documentation`}),` or `,_jsx(_components.a,{href:`/our-services/address-capture/overview`,children:`learn more about Address Capture`}),`.`]})]}),_jsxs(Tab,{title:`Address Verify`,id:`address-verify`,\"data-child-heading-ids\":`[\"address-verification\"]`,children:[_jsx(Heading,{level:`3`,id:`address-verification`,children:`Address Verification`}),_jsxs(_components.p,{children:[`Address Verify evaluates the validity of the address on form submission, using fields like country, city, postal code and street address. Based on the response, the address is scored as `,_jsx(_components.code,{children:`Good`}),`, `,_jsx(_components.code,{children:`Questionable`}),` or `,_jsx(_components.code,{children:`Invalid`}),` using the `,_jsx(_components.a,{href:`/report-codes/address-verification-code/`,children:`Address Verification Code`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Good:`}),` no issues detected`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Questionable:`}),` the user is prompted to accept a corrected address suggested by Address Verify. The user can either edit the address manually or proceed with the initial input`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Invalid:`}),` a suggestion is provided to update the address. The user can either update it or proceed with the original input`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Configuration options:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_ADDRESS_VERIFICATION_CHECKOUT`}),` - toggle for address verification during checkout`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_ADDRESS_VERIFICATION_MY_ACCOUNT`}),` - toggle for address verification on the My Account page`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_AVC`}),` - minimum matchscore threshold for an address to be considered `,_jsx(_components.code,{children:`Good`})]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Integration areas:`}),` Checkout, My Account`]}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/api-reference/address-verify/international-batch-cleanse`,children:`Address Verify API documentation`}),` or `,_jsx(_components.a,{href:`/our-services/address-verify/overview`,children:`learn more about Address Verify`}),`.`]})]}),_jsxs(Tab,{title:`Email Validation`,id:`email-validation`,\"data-child-heading-ids\":`[\"email-address-validation\"]`,children:[_jsx(Heading,{level:`3`,id:`email-address-validation`,children:`Email Address Validation`}),_jsx(_components.p,{children:`Email Validation verifies the user’s email address during input, ensuring the format is correct and that the address is valid.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Configuration options:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_EMAIL_VALIDATION_CHECKOUT`}),` - toggle for email validation during checkout`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_EMAIL_VALIDATION_MY_ACCOUNT`}),` - toggle for email validation on the My Account page`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_EMAIL_VALIDATION_REGISTRATION`}),` - toggle for email validation during registration`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_EMAIL_VALIDATION_TIMEOUT_MILLISECONDS`}),` - timeout duration for email validation requests`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_INCLUDE_VALID_CATCHALL_EMAILS`}),` - determines whether `,_jsx(_components.code,{children:`Valid_CatchAll`}),` responses are considered valid (see the `,_jsx(_components.code,{children:`ResponseCode`}),` response field in the API documentation)`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Integration areas:`}),` Checkout, My Account, Registration`]}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/api-reference/email-validation/apis`,children:`Email Validation API documentation`}),` to learn more about the service.`]})]}),_jsxs(Tab,{title:`Phone Validation`,id:`phone-validation`,\"data-child-heading-ids\":`[\"phone-number-validation\"]`,children:[_jsx(Heading,{level:`3`,id:`phone-number-validation`,children:`Phone Number Validation`}),_jsx(_components.p,{children:`Phone Validation checks the correctness of the phone number the user enters, ensuring it is properly formatted and valid.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Configuration options:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_PHONE_VALIDATION_CHECKOUT`}),` - toggle for phone validation during checkout`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_PHONE_VALIDATION_MY_ACCOUNT`}),` - toggle for phone validation on the My Account page`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_PHONE_VALIDATION_REGISTRATION`}),` - toggle for phone validation during registration`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LOQATE_INCLUDE_MAYBE_PHONE_NUMBERS`}),` - determines whether the `,_jsx(_components.code,{children:`Maybe`}),` validation state is treated as valid (see the `,_jsx(_components.code,{children:`IsValid`}),` response field in the API documentation)`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Integration areas:`}),` Checkout, My Account, Registration`]}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/api-reference/phone-validation/individual-validate`,children:`Phone Validation API documentation`}),` to learn more about the service.`]})]})]}),`\n`,_jsx(`br`,{}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Setup guide`,href:`/integrations/commercetools-setup-guide`,children:_jsx(_components.p,{children:`Install the plugin and apply the backend-for-frontend and frontend changes`})}),_jsx(Card,{title:`Studio settings`,href:`/integrations/commercetools-studio-settings`,children:_jsx(_components.p,{children:`Configure the plugin in commercetools Frontend Studio`})})]}),`\n`,_jsx(`div`,{className:`section-divider`}),`\n`,_jsx(Heading,{level:`2`,id:`integrate-in-3-steps`,children:`Integrate in 3 steps`}),`\n`,_jsx(`p`,{children:`1) Get your API key 2) Clone the repository 3) Configure and integrate`}),`\n`,_jsx(Card,{children:_jsxs(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`3rem`,flexWrap:`wrap`,padding:`1rem 0.5rem`},children:[_jsxs(`div`,{style:{flex:`1`,minWidth:`280px`},children:[_jsx(`div`,{style:{marginTop:0,marginBottom:`0.75rem`,fontSize:`1.875rem`,lineHeight:`1.2`,fontWeight:`700`},children:_jsx(_components.p,{children:`Get your API key, then start from the reference implementation`})}),_jsx(`p`,{style:{marginBottom:0,fontSize:`1rem`,lineHeight:`1.6`,opacity:`0.85`},children:_jsx(_components.p,{children:`Clone the repository, configure the project in Studio, and carry the changes over to your own project.`})})]}),_jsxs(`div`,{style:{display:`flex`,flexDirection:`column`,gap:`1rem`,minWidth:`220px`,alignItems:`stretch`},children:[_jsx(`a`,{href:`https://account.loqate.com/`,class:`btn-primary`,style:{textAlign:`center`,whiteSpace:`nowrap`},children:_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Get Your API Key`}),`\n`]})}),_jsx(`a`,{href:`https://github.com/loqate/loqate-commercetools`,class:`btn-secondary`,style:{textAlign:`center`,whiteSpace:`nowrap`},children:_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsx(_components.li,{children:`Clone the Repository`}),`\n`]})}),_jsx(_components.a,{href:`/integrations/commercetools-setup-guide`,class:`btn-secondary`,style:{textAlign:`center`,whiteSpace:`nowrap`},children:_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsx(_components.li,{children:`Configure and Integrate`}),`\n`]})})]})]})}),`\n`,_jsx(`div`,{className:`section-divider`}),`\n`,_jsx(Heading,{level:`2`,id:`additional-resources`,children:`Additional Resources`}),`\n`,_jsxs(`div`,{style:{display:`flex`,flexDirection:`column`,gap:`1rem`},children:[_jsx(`div`,{style:{display:`flex`,alignItems:`center`,gap:`0.75rem`},children:_jsx(_components.p,{children:_jsx(_components.a,{href:`https://github.com/loqate/loqate-commercetools`,children:`loqate-commercetools on GitHub`})})}),_jsx(`div`,{style:{display:`flex`,alignItems:`center`,gap:`0.75rem`},children:_jsx(_components.p,{children:_jsx(_components.a,{href:`https://docs.commercetools.com/frontend-development/cli`,children:`commercetools Frontend development docs`})})})]}),`\n`,_jsx(`div`,{className:`section-divider`}),`\n`,_jsx(Heading,{level:`2`,id:`disclaimers`,children:`Disclaimers`}),`\n`,_jsxs(_components.p,{children:[`The loqate-commercetools repository demonstrates the integration of Loqate Address Capture, Address Verify, Email Validation and Phone Validation features with commercetools. It is to be used as a reference implementation for your own integration - it is not intended to be used as is in a production environment. Please refer to the `,_jsx(_components.a,{href:`/integrations/commercetools-setup-guide`,children:`Setup Guide`}),` for instructions on the changes required to carry over the Loqate commercetools integration into your own project.`]}),`\n`,_jsxs(_components.p,{children:[`It uses the `,_jsx(_components.a,{href:`https://docs.commercetools.com/frontend-development/b2c-store-launchpad-overview`,children:`commercetools Frontend B2C template`}),` as a base, specifically the latest as of 3 June 2024.`]}),`\n`,_jsx(_components.p,{children:`This plugin:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Does not aim to keep up with the latest changes in the commercetools frontend template, but rather to provide a reference implementation`}),`\n`,_jsx(_components.li,{children:`Should not be cloned and used as is in a production environment. It is recommended to use it as a reference and adapt it to your own needs by copying the relevant parts of the code and applying them to the merchant’s implementation`}),`\n`,_jsx(_components.li,{children:`Does not aim to fix any bugs or issues in the commercetools frontend template. If you encounter any issues related with the B2C Frontend Template, please refer to the commercetools documentation`}),`\n`,_jsx(_components.li,{children:`Is not responsible for any bugs or issues coming from the commercetools B2C Frontend Template, nor any customizations made to it and does not aim to fix them. You should refer to the commercetools documentation for support for any issues related to the specific version of the commercetools B2C Frontend Template that you are using`}),`\n`,_jsx(_components.li,{children:`Does not take an opinion of the flow you should support in your store - it applies changes to the out of the box checkout, my account and registration flows`}),`\n`]}),`\n`,_jsx(`div`,{className:`section-divider`}),`\n`,_jsx(Heading,{level:`2`,id:`pricing`,children:`Pricing`}),`\n`,_jsx(Card,{title:`View Pricing Plans`,icon:`credit-card`,href:`https://www.loqate.com/pricing`,children:_jsx(_components.p,{children:`Flexible plans starting with a 45-day free trial. Choose the plan that fits your business needs.`})}),`\n`,_jsx(`div`,{className:`section-divider`}),`\n`,_jsx(Heading,{level:`2`,id:`frequently-asked-questions`,children:`Frequently Asked Questions`}),`\n`,_jsx(`br`,{}),`\n`,_jsx(`div`,{className:`faq-small-text`,children:_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Can I use the plugin as-is in production?`,id:`can-i-use-the-plugin-as-is-in-production`,children:_jsx(`span`,{style:{fontSize:`0.875rem`,display:`block`},children:_jsxs(_components.p,{children:[`No. The plugin is a reference implementation. Get the latest version of the commercetools B2C Frontend template and apply the backend-for-frontend and frontend changes described in the `,_jsx(_components.a,{href:`/integrations/commercetools-setup-guide`,children:`setup guide`}),` on top of your existing implementation.`]})})}),_jsx(Accordion,{title:`What do I need before I start?`,id:`what-do-i-need-before-i-start`,children:_jsx(`span`,{style:{fontSize:`0.875rem`,display:`block`},children:_jsxs(_components.p,{children:[`Node.js 18.16.0 or higher, Yarn 1.22.19 or higher, a commercetools project, commercetools Frontend Studio, and a `,_jsx(_components.a,{href:`/loqate-basics/create-an-api-key`,children:`Loqate API key`}),`.`]})})}),_jsx(Accordion,{title:`Which parts of my store does it change?`,id:`which-parts-of-my-store-does-it-change`,children:_jsx(`span`,{style:{fontSize:`0.875rem`,display:`block`},children:_jsx(_components.p,{children:`The plugin modifies the out-of-the-box Checkout, My Account and Registration flows. It doesn’t take an opinion on which flows you should support in your store.`})})}),_jsx(Accordion,{title:`Can I turn individual features on and off?`,id:`can-i-turn-individual-features-on-and-off`,children:_jsx(`span`,{style:{fontSize:`0.875rem`,display:`block`},children:_jsxs(_components.p,{children:[`Yes. Each feature can be toggled per area through the project settings. See `,_jsx(_components.a,{href:`/integrations/commercetools-studio-settings`,children:`Studio settings`}),` for the full list.`]})})})]})}),`\n`,_jsx(`p`,{children:_jsxs(_components.p,{children:[`Still have questions or need support? `,_jsx(`a`,{href:`mailto:LoqateSupport@gbgplc.com`,children:`Send us an email`})]})}),`\n`,_jsx(`div`,{className:`section-divider`}),`\n`,_jsx(Heading,{level:`2`,id:`integration-details`,children:`Integration details`}),`\n`,_jsx(`div`,{style:{marginTop:`2rem`},children:_jsxs(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(auto-fit, minmax(200px, 1fr))`,gap:`2rem`},children:[_jsxs(`div`,{children:[_jsx(Heading,{level:`3`,id:`resources`,style:{fontSize:`0.875rem`,fontWeight:`700`,marginBottom:`0.5rem`,opacity:`0.7`},children:`Resources`}),_jsx(`a`,{href:`https://www.loqate.com/en-us/privacy/`,style:{textDecoration:`none`},children:`Privacy policy`})]}),_jsxs(`div`,{children:[_jsx(Heading,{level:`3`,id:`developer`,style:{fontSize:`0.875rem`,fontWeight:`700`,marginBottom:`0.5rem`,opacity:`0.7`},children:`Developer`}),_jsx(`p`,{style:{marginBottom:`0.25rem`,fontWeight:`600`},children:`GB GROUP PLC`}),_jsx(`a`,{href:`https://www.loqate.com/`,style:{textDecoration:`none`,display:`block`,marginBottom:`0.25rem`},children:`Website`}),_jsx(`p`,{style:{fontSize:`0.875rem`,opacity:`0.8`,margin:0},children:`128 Queen Victoria Street, London, ENG, EC4V 4BJ, GB`})]}),_jsxs(`div`,{children:[_jsx(Heading,{level:`3`,id:`platform`,style:{fontSize:`0.875rem`,fontWeight:`700`,marginBottom:`0.5rem`,opacity:`0.7`},children:`Platform`}),_jsx(`p`,{style:{margin:0},children:`commercetools Composable Commerce`}),_jsx(`a`,{href:`https://github.com/loqate/loqate-commercetools`,style:{fontSize:`0.875rem`,textDecoration:`none`},children:`View on GitHub`})]})]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{IntegrationHero,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":{"config":{},"pageMetadata":{"title":"commercetools Integration","sidebarTitle":"Overview","description":"Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.","mode":"wide","href":"/integrations/commercetools"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[151,6993,")=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"About this integration","slug":"about-this-integration","depth":2,"children":[]},{"title":"Supported Loqate Services","slug":"supported-loqate-services","depth":2,"children":[{"title":"Type-Ahead Address Lookup","slug":"type-ahead-address-lookup","depth":3,"children":[],"tabId":"address-capture"},{"title":"Address Verification","slug":"address-verification","depth":3,"children":[],"tabId":"address-verify"},{"title":"Email Address Validation","slug":"email-address-validation","depth":3,"children":[],"tabId":"email-validation"},{"title":"Phone Number Validation","slug":"phone-number-validation","depth":3,"children":[],"tabId":"phone-validation"}]},{"title":"Integrate in 3 steps","slug":"integrate-in-3-steps","depth":2,"children":[]},{"title":"Additional Resources","slug":"additional-resources","depth":2,"children":[]},{"title":"Disclaimers","slug":"disclaimers","depth":2,"children":[]},{"title":"Pricing","slug":"pricing","depth":2,"children":[]},{"title":"Frequently Asked Questions","slug":"frequently-asked-questions","depth":2,"children":[]},{"title":"Integration details","slug":"integration-details","depth":2,"children":[{"title":"Resources","slug":"resources","depth":3,"children":[]},{"title":"Developer","slug":"developer","depth":3,"children":[]},{"title":"Platform","slug":"platform","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/loqate/907f7769aca1d37b/snippets/onetrust.js"],"subdomain":"loqate","siteName":"GBG Loqate","title":"commercetools Integration - GBG Loqate","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T08:13:32.591Z","originalFileLocation":"integrations/commercetools.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=\"Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.\">\u003cmeta data-mint-head name=\"application-name\" content=\"GBG Loqate\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/loqate/bk4FVGJNjdAJ7tYu/_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/loqate/bk4FVGJNjdAJ7tYu/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/loqate/bk4FVGJNjdAJ7tYu/_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/loqate/bk4FVGJNjdAJ7tYu/_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/loqate/bk4FVGJNjdAJ7tYu/_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/loqate/bk4FVGJNjdAJ7tYu/_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/loqate/bk4FVGJNjdAJ7tYu/_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/loqate/bk4FVGJNjdAJ7tYu/_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/loqate/bk4FVGJNjdAJ7tYu/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"commercetools Integration - GBG Loqate\">\u003cmeta data-mint-head property=\"og:description\" content=\"Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"GBG Loqate\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.loqate.com/integrations/commercetools\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://loqate.mintlify.app/_mintlify/api/og/v2?division=commercetools\u0026amp;title=commercetools+Integration\u0026amp;description=Reference+implementation+for+integrating+Address+Capture%2C+Address+Verify%2C+Email+and+Phone+Validation+with+commercetools+Frontend+checkout%2C+My+Account+and+regist\u0026amp;theme=0842836246d982ad33892e47\u0026amp;signature=83c41aa83caa9c116859c715b68291b2a1f7c24e4e71a9be620ee715f07aedba\">\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=\"commercetools Integration - GBG Loqate\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://loqate.mintlify.app/_mintlify/api/og/v2?division=commercetools\u0026amp;title=commercetools+Integration\u0026amp;description=Reference+implementation+for+integrating+Address+Capture%2C+Address+Verify%2C+Email+and+Phone+Validation+with+commercetools+Frontend+checkout%2C+My+Account+and+regist\u0026amp;theme=0842836246d982ad33892e47\u0026amp;signature=83c41aa83caa9c116859c715b68291b2a1f7c24e4e71a9be620ee715f07aedba\">\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/loqate/bk4FVGJNjdAJ7tYu/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"GBG Loqate\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4d4dff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.loqate.com/integrations/commercetools\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/commercetools.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.loqate.com/#organization\",\"name\":\"GBG Loqate\",\"url\":\"https://docs.loqate.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/loqate/odjzme0kbZLAlqBl/logo/loqate-logo-primary.png?fit=max\u0026auto=format\u0026n=odjzme0kbZLAlqBl\u0026q=85\u0026s=f824e561eeb9b4462947163f1d09bc17\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.loqate.com#website\",\"name\":\"GBG Loqate\",\"url\":\"https://docs.loqate.com\",\"publisher\":{\"@id\":\"https://docs.loqate.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.loqate.com/integrations/commercetools#webpage\",\"url\":\"https://docs.loqate.com/integrations/commercetools\",\"name\":\"commercetools Integration\",\"description\":\"Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.\",\"dateModified\":\"2026-10-19T08:13:32.591Z\",\"isPartOf\":{\"@id\":\"https://docs.loqate.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.loqate.com/integrations/commercetools#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.loqate.com/integrations/commercetools#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://docs.loqate.com/integrations/all-integrations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"commercetools Integration\",\"item\":\"https://docs.loqate.com/integrations/commercetools\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.loqate.com/integrations/commercetools#article\",\"headline\":\"commercetools Integration\",\"name\":\"commercetools Integration\",\"description\":\"Reference implementation for integrating Address Capture, Address Verify, Email and Phone Validation with commercetools Frontend checkout, My Account and registration.\",\"url\":\"https://docs.loqate.com/integrations/commercetools\",\"mainEntityOfPage\":{\"@id\":\"https://docs.loqate.com/integrations/commercetools#webpage\"},\"dateModified\":\"2026-10-19T08:13:32.591Z\",\"publisher\":{\"@id\":\"https://docs.loqate.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.loqate.com#website\"}}]}\u003c/script>","siteName":"GBG Loqate","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Integrations","icon":"plug","groups":[{"group":"Integrations","pages":[{"title":"Loqate Integrations for Commerce and CRM Platforms","sidebarTitle":"All Integrations","mode":"wide","href":"/integrations/all-integrations"},{"group":"Shopify Plus","pages":[{"title":"Shopify Plus Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/shopify-plus"},{"title":"Shopify Plus Setup Guide","sidebarTitle":"Setup Guide","href":"/integrations/shopify-plus-setup-guide"},{"title":"Shopify Plus Custom Field Mappings","sidebarTitle":"Custom Field Mappings","href":"/integrations/shopify-plus-custom-field-mappings"}]},{"group":"Adobe Commerce","pages":[{"title":"Adobe Commerce Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/adobe-commerce"},{"title":"Adobe Commerce Setup Guide","sidebarTitle":"Setup Guide","href":"/integrations/adobe-commerce-setup-guide"}]},{"group":"Salesforce Commerce Cloud","pages":[{"title":"Salesforce Commerce Cloud Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/salesforce-commerce-cloud"},{"title":"Salesforce Commerce Cloud Setup Guide","sidebarTitle":"Setup Guide","href":"/integrations/salesforce-commerce-cloud-setup-guide"}]},{"group":"Salesforce CRM","pages":[{"title":"Salesforce CRM Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/salesforce-crm"},{"title":"Salesforce CRM Setup Guide","sidebarTitle":"Setup Guide","href":"/integrations/salesforce-crm-setup-guide"}]},{"group":"BigCommerce","pages":[{"title":"BigCommerce Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/bigcommerce"},{"title":"BigCommerce Setup Guide","sidebarTitle":"Setup Guide","description":"Generate a Loqate code snippet with BigCommerce field mappings and add it to your store with Script Manager.","href":"/integrations/bigcommerce-setup-guide"}]},{"group":"commercetools","pages":[{"title":"commercetools Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/commercetools"},{"title":"commercetools Setup Guide","sidebarTitle":"Setup Guide","description":"Install Loqate validation in commercetools B2C Frontend. Backend-for-frontend controller setup and React component integration instructions.","href":"/integrations/commercetools-setup-guide"},{"title":"commercetools Studio Settings","sidebarTitle":"Studio Settings","href":"/integrations/commercetools-studio-settings"}]},{"group":"Microsoft Dynamics 365","pages":[{"title":"Microsoft Dynamics 365 Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/microsoft-dynamics-365"},{"title":"Microsoft Dynamics 365 Setup Guide","sidebarTitle":"Setup Guide","href":"/integrations/microsoft-dynamics-365-setup-guide"}]},{"title":"Oracle Cloud Marketplace Integration","sidebarTitle":"Oracle Cloud Marketplace","mode":"wide","href":"/integrations/oracle-cloud-marketplace"},{"group":"Reapit","pages":[{"title":"Reapit Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/reapit"},{"title":"Reapit Setup Guide","sidebarTitle":"Setup Guide","href":"/integrations/reapit-setup-guide"}]},{"group":"Shopware 6","pages":[{"title":"Shopware 6 Integration","sidebarTitle":"Overview","mode":"wide","href":"/integrations/shopware"},{"title":"Shopware 6 Setup Guide","sidebarTitle":"Setup Guide","href":"/integrations/shopware-setup-guide"}]}]}]},{"tab":"On-Premise","icon":"server","pages":[{"title":"On-Premise","href":"/getting-started/introduction"}]},{"tab":"AI Agents","icon":"robot","pages":[{"title":"AI Agents","href":"/ai-agents/introduction"}]},{"tab":"Release Notes","icon":"file-lines","pages":[{"title":"Release Notes","href":"/release-notes/all-loqate"}]}]},"basePath":"","title":"commercetools Integration - GBG Loqate","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["10e4515597"],"chunks":["BannerMarkdown-CX_qQQOL.js","dist-BTZUMDnx.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-xpJZXxdP.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}