There are several reasons why it can be useful to use a custom domain (e.g. https://licensing.your-domain.com) instead of calling Devolens Web API directly. A common reason is if your clients require that the IP must originate from a specific geographical location, for example, if you sell software to government buyers or other companies with strict firewalls.
If you have customers who are behind a firewall (e.g. a US customer that does not allow requests to be sent outside of US), you can either use our endpoint that is proxied through Cloudflare or add an A record in your DNS that is proxied through Cloudflare.
The endpoint above is proxied through Cloudflare. In tests by us and our customers, it has resolved to an IP address classified as US-based when called from the US, and to a European IP address when called from Europe. Results may vary by network and location, so we recommend testing from the affected customer’s network. If a specific IP address or location is required, consider the reverse-proxy approach described below.
If you need to ensure that requests are sent to a specific IP adress that you control, you can use a reverse proxy instead. One way to accomplish this is by creating a VM that runs nginx, as described in this article. This would require more maintenance, and we do not recommend it as a first option.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Devolens (formerly Cryptolens) Documentation","colors":{"primary":"#220999","light":"#4A5AFF","dark":"#4A5AFF"},"logo":{"light":"https://mintcdn.com/cryptolensab/nFzAQWAQ7VFiqFf7/images/DEVOLENS-formerly-cryptolens-tight.svg?fit=max\u0026auto=format\u0026n=nFzAQWAQ7VFiqFf7\u0026q=85\u0026s=15bb4ad2214d0c8201f59582439e5a8f","dark":"https://mintcdn.com/cryptolensab/nFzAQWAQ7VFiqFf7/images/DEVOLENS-formerly-cryptolens-tight.svg?fit=max\u0026auto=format\u0026n=nFzAQWAQ7VFiqFf7\u0026q=85\u0026s=15bb4ad2214d0c8201f59582439e5a8f","href":"https://devolens.com/"},"favicon":{"light":"https://mintcdn.com/cryptolensab/W09lpa-yg5vOj8Uc/images/DevolensCircle.png?fit=max\u0026auto=format\u0026n=W09lpa-yg5vOj8Uc\u0026q=85\u0026s=f57eaf1cb9a5136f9b2e8d1b42cf5e36","dark":"https://mintcdn.com/cryptolensab/UggnyNDOQ_2RBPGh/logo512.svg?fit=max\u0026auto=format\u0026n=UggnyNDOQ_2RBPGh\u0026q=85\u0026s=0bfcdff9cc17f4eff6ffc7f27a39f7f8"},"navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.cryptolens.io"}},"footer":{"socials":{"x":"https://x.com/cryptolens","github":"https://github.com/cryptolens","linkedin":"https://linkedin.com/company/cryptolens"}},"integrations":{"gtm":{"tagId":"GTM-N67G87DK"},"intercom":{"appId":"uyf5hx0o"}},"contextual":{"options":["copy","assistant",{"title":"Request feature","description":"Email us to suggest a new feature","icon":"envelope","href":"mailto:[email protected]"}],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://devolens.com/blog"},{"anchor":"Status page","icon":"signal","href":"https://status.cryptolens.io"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cryptolensab","hasAudioNarration":false,"actualSubdomain":"cryptolensab","customDomains":["help.cryptolens.io"],"gitSource":{"type":"github","owner":"cryptolens","repo":"support","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af5d78e319ac6c743b6bd47","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"Libraries","count":167},{"language":"default","tag":".NET SDK Reference","count":132},{"language":"default","tag":"API Reference","count":107},{"language":"default","tag":"Guides","count":106},{"language":"default","tag":"Generated Web API reference","count":106},{"language":"default","tag":"Features","count":29},{"language":"default","tag":"Python SDK Reference","count":24},{"language":"default","tag":"Get Started","count":22},{"language":"default","tag":"Web UI","count":20},{"language":"default","tag":"Payments","count":17}]},"assistantConfig":{"enableStarterQuestions":true,"deflection":{"enabled":true,"email":"[email protected]"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"rbac-expansion","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":"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":"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":"editor-metadata","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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"6984e43b76d1c03101c334bf","deploymentId":"68515385c30e2a6392095912","questionText":"How to verify a license","status":"active","generatedBy":"manual","createdAt":"2026-02-05T18:40:59.618Z","updatedAt":"2026-02-05T18:40:59.618Z","__v":0}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"custom-domains-and-regional-connectivity","slug":"/custom-domains-and-regional-connectivity","pageMetadata":{"title":"Custom domains and regional connectivity","description":"A custom domain can be useful if the IP must originate from a specific geographical location or for white-labeling.","href":"/custom-domains-and-regional-connectivity"},"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: \"A custom domain can be useful if the IP must originate from a specific geographical location or for white-labeling.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`idea`,children:`Idea`}),`\n`,_jsxs(_components.p,{children:[`There are several reasons why it can be useful to use a custom domain (e.g. `,_jsx(_components.em,{children:_jsx(_components.a,{href:`https://licensing.your-domain.com`,children:`https://licensing.your-domain.com`})}),`) instead of calling Devolens Web API directly. A common reason is if your clients require that the IP must originate from a specific geographical location, for example, if you sell software to government buyers or other companies with strict firewalls.`]}),`\n`,_jsx(Heading,{level:`2`,id:`getting-started`,children:`Getting started`}),`\n`,_jsx(_components.p,{children:`Depending on the reason why a custom domain is needed, there are several approaches we can recommend.`}),`\n`,_jsx(Heading,{level:`3`,id:`approach-1-solving-geo-restrictions`,children:`Approach 1: solving geo restrictions`}),`\n`,_jsx(_components.p,{children:`If you have customers who are behind a firewall (e.g. a US customer that does not allow requests to be sent outside of US), you can either use our endpoint that is proxied through Cloudflare or add an A record in your DNS that is proxied through Cloudflare.`}),`\n`,_jsx(Heading,{level:`4`,id:`using-our-own-endpoint`,children:`Using our own endpoint`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://api.devolens.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`The endpoint above is proxied through Cloudflare. In tests by us and our customers, it has resolved to an IP address classified as US-based when called from the US, and to a European IP address when called from Europe. Results may vary by network and location, so we recommend testing from the affected customer’s network. If a specific IP address or location is required, consider the reverse-proxy approach described below.`}),`\n`,_jsx(Heading,{level:`4`,id:`using-your-own-domain`,children:`Using your own domain`}),`\n`,_jsxs(_components.p,{children:[`If you are using Cloudflare, you can add an A record that points to `,_jsx(_components.strong,{children:`20.82.170.150.`}),` The record should be proxied (i.e. yellow icon in Cloudflare).`]}),`\n`,_jsx(Heading,{level:`3`,id:`approach-2-setting-a-specific-ip`,children:`Approach 2: setting a specific IP`}),`\n`,_jsxs(_components.p,{children:[`If you need to ensure that requests are sent to a specific IP adress that you control, you can use a `,_jsx(_components.a,{href:`/examples/reverse-proxy`,children:`reverse proxy`}),` instead. One way to accomplish this is by creating a VM that runs nginx, as described in `,_jsx(_components.a,{href:`/examples/reverse-proxy`,children:`this article`}),`. This would require more maintenance, and we do not recommend it as a first option.`]}),`\n`,_jsx(`br`,{})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Custom domains and regional connectivity","description":"A custom domain can be useful if the IP must originate from a specific geographical location or for white-labeling.","href":"/custom-domains-and-regional-connectivity"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Idea","slug":"idea","depth":2,"children":[]},{"title":"Getting started","slug":"getting-started","depth":2,"children":[{"title":"Approach 1: solving geo restrictions","slug":"approach-1-solving-geo-restrictions","depth":3,"children":[]},{"title":"Using our own endpoint","slug":"using-our-own-endpoint","depth":4,"children":[]},{"title":"Using your own domain","slug":"using-your-own-domain","depth":4,"children":[]},{"title":"Approach 2: setting a specific IP","slug":"approach-2-setting-a-specific-ip","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/cryptolensab/af38b9cc1445fe94/jscode.js"],"subdomain":"cryptolensab","siteName":"Devolens (formerly Cryptolens) Documentation","title":"Custom domains and regional connectivity - Devolens (formerly Cryptolens) Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T15:13:23.737Z","originalFileLocation":"custom-domains-and-regional-connectivity.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=\"A custom domain can be useful if the IP must originate from a specific geographical location or for white-labeling.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Devolens (formerly Cryptolens) Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cryptolensab/k3TwgdDK5B2nhhRD/_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/cryptolensab/k3TwgdDK5B2nhhRD/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cryptolensab/k3TwgdDK5B2nhhRD/_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/cryptolensab/k3TwgdDK5B2nhhRD/_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/cryptolensab/k3TwgdDK5B2nhhRD/_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/cryptolensab/k3TwgdDK5B2nhhRD/_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/cryptolensab/k3TwgdDK5B2nhhRD/_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/cryptolensab/k3TwgdDK5B2nhhRD/_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/cryptolensab/k3TwgdDK5B2nhhRD/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Custom domains and regional connectivity - Devolens (formerly Cryptolens) Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"A custom domain can be useful if the IP must originate from a specific geographical location or for white-labeling.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Devolens (formerly Cryptolens) Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.cryptolens.io/custom-domains-and-regional-connectivity\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cryptolensab.mintlify.site/_mintlify/api/og/v2?division=Enterprise+tools\u0026amp;title=Custom+domains+and+regional+connectivity\u0026amp;description=A+custom+domain+can+be+useful+if+the+IP+must+originate+from+a+specific+geographical+location+or+for+white-labeling.\u0026amp;theme=fa19ded7e62da99e42aced3c\u0026amp;signature=9ae989a201d0e7ce32d44193af7c655294062bdd7d9d9fda57162b9a6d7c70ae\">\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=\"Custom domains and regional connectivity - Devolens (formerly Cryptolens) Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A custom domain can be useful if the IP must originate from a specific geographical location or for white-labeling.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cryptolensab.mintlify.site/_mintlify/api/og/v2?division=Enterprise+tools\u0026amp;title=Custom+domains+and+regional+connectivity\u0026amp;description=A+custom+domain+can+be+useful+if+the+IP+must+originate+from+a+specific+geographical+location+or+for+white-labeling.\u0026amp;theme=fa19ded7e62da99e42aced3c\u0026amp;signature=9ae989a201d0e7ce32d44193af7c655294062bdd7d9d9fda57162b9a6d7c70ae\">\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/cryptolensab/k3TwgdDK5B2nhhRD/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Devolens (formerly Cryptolens) Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#220999\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.cryptolens.io/custom-domains-and-regional-connectivity\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/custom-domains-and-regional-connectivity.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.cryptolens.io/#organization\",\"name\":\"Devolens (formerly Cryptolens) Documentation\",\"url\":\"https://help.cryptolens.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cryptolensab/nFzAQWAQ7VFiqFf7/images/DEVOLENS-formerly-cryptolens-tight.svg?fit=max\u0026auto=format\u0026n=nFzAQWAQ7VFiqFf7\u0026q=85\u0026s=15bb4ad2214d0c8201f59582439e5a8f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.cryptolens.io#website\",\"name\":\"Devolens (formerly Cryptolens) Documentation\",\"url\":\"https://help.cryptolens.io\",\"publisher\":{\"@id\":\"https://help.cryptolens.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.cryptolens.io/custom-domains-and-regional-connectivity#webpage\",\"url\":\"https://help.cryptolens.io/custom-domains-and-regional-connectivity\",\"name\":\"Custom domains and regional connectivity\",\"description\":\"A custom domain can be useful if the IP must originate from a specific geographical location or for white-labeling.\",\"dateModified\":\"2026-11-12T15:13:23.737Z\",\"isPartOf\":{\"@id\":\"https://help.cryptolens.io#website\"},\"breadcrumb\":{\"@id\":\"https://help.cryptolens.io/custom-domains-and-regional-connectivity#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.cryptolens.io/custom-domains-and-regional-connectivity#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Examples\",\"item\":\"https://help.cryptolens.io/examples\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enterprise tools\",\"item\":\"https://help.cryptolens.io/feature/license-server\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Custom domains and regional connectivity\",\"item\":\"https://help.cryptolens.io/custom-domains-and-regional-connectivity\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://help.cryptolens.io/custom-domains-and-regional-connectivity#article\",\"headline\":\"Custom domains and regional connectivity\",\"name\":\"Custom domains and regional connectivity\",\"description\":\"A custom domain can be useful if the IP must originate from a specific geographical location or for white-labeling.\",\"url\":\"https://help.cryptolens.io/custom-domains-and-regional-connectivity\",\"mainEntityOfPage\":{\"@id\":\"https://help.cryptolens.io/custom-domains-and-regional-connectivity#webpage\"},\"dateModified\":\"2026-11-12T15:13:23.737Z\",\"publisher\":{\"@id\":\"https://help.cryptolens.io/#organization\"},\"isPartOf\":{\"@id\":\"https://help.cryptolens.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Devolens (formerly Cryptolens) Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Devolens (formerly Cryptolens) Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/custom-domains-and-regional-connectivity.md","siteName":"Devolens (formerly Cryptolens) Documentation","nav":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://devolens.com/blog"},{"anchor":"Status page","icon":"signal","href":"https://status.cryptolens.io"}]},"tabs":[{"tab":"Guides","groups":[{"group":"Get Started","icon":"flag-checkered","pages":[{"title":"Introduction","href":""},{"group":"Basics","icon":"graduation-cap","pages":[{"title":"Basics of Devolens","href":"/basics/index"},{"title":"Products, keys, customers, and activations","href":"/basics/product-and-keys"},{"title":"Web API","href":"/basics/webapi"}]},{"title":"Getting started guide","icon":"flag-checkered","href":"/getting-started/getting-started-guide"},{"title":"AI-assisted integration","icon":"microchip-ai","href":"/getting-started/build-with-ai"},{"title":"MCP server","icon":"plug","href":"/getting-started/mcp"},{"title":"Troubleshooting guide for licensing","icon":"stethoscope","href":"/getting-started/troubleshooting-guide"},{"group":"Platform specifics","icon":"laptop-mobile","pages":[{"title":"Platforms","href":"/getting-started/platform-overview"},{"title":".NET desktop application","href":"/getting-started/net-intro"},{"title":"Unity 3D / Mono","href":"/getting-started/unity"},{"title":"Android and iOS","href":"/getting-started/ios-android"},{"title":"Rhino 3D / Grashopper","href":"/getting-started/rhino-ceros-3d-grashopper"},{"title":"Python/Autodesk Maya","href":"/getting-started/python-autodesk-maya"},{"title":"Go","href":"/getting-started/go"},{"title":"Node Js","href":"/getting-started/node"},{"title":"Java","href":"/getting-started/java"},{"title":"C/C++","href":"/getting-started/cpp"},{"title":"AutoCAD","href":"/getting-started/autocad"},{"title":"Excel Addins","href":"/getting-started/excel"}]},{"title":"Checklist before publishing","icon":"ballot-check","href":"/getting-started/checklist-before-publishing"},{"title":"FAQ","icon":"messages-question","href":"/faq"}]},{"group":"Reference details","hidden":true,"searchable":true,"pages":[{"title":"Your Devolens account and billing","href":"/account/billing"},{"title":"Access tokens and RSA public key","icon":"key","href":"/getting-started/access-token"}]},{"group":"Licensing models","icon":"file-certificate","pages":[{"title":"Introduction","href":"/licensing-models/index"},{"group":"Models","pages":[{"title":"Perpetual licensing (try/buy)","href":"/licensing-models/perpetual"},{"title":"Subscription licensing (SaaS)","href":"/licensing-models/subscription"},{"title":"Usage-based licensing (pay per use)","href":"/licensing-models/usage-based"},{"title":"Node locked licenses","href":"/licensing-models/node-locked"},{"title":"Floating licenses","href":"/licensing-models/floating"},{"title":"SDK licensing","href":"/licensing-models/sdk-licensing"},{"title":"User authentication","href":"/licensing-models/user-credentials"},{"title":"Per-user seats using activations","href":"/licensing-models/user-based-activations"},{"title":"Containerized Environments","href":"/licensing-models/containers"},{"title":"Site license","href":"/licensing-models/site-license"},{"title":"Pre-determined activations","href":"/licensing-models/pre-determined-activations"},{"title":"Subscription vs usage-based pricing","href":"/licensing-models/subscription-vs-usage-based"}]}]},{"group":"Examples","icon":"code","pages":[{"title":"Introduction","href":"/examples/index"},{"group":"Inside the app","pages":[{"title":"Key verification","href":"/examples/key-verification"},{"title":"Offline verification","href":"/examples/offline-verification"},{"title":"Trial keys","href":"/examples/verified-trials"},{"title":"User verifications","href":"/examples/user-verification"},{"title":"Data collection","href":"/examples/data-collection"}]},{"group":"Integration with external services","pages":[{"title":"Integrate with Zapier","href":"/examples/zapier"},{"title":"Integration with n8n","href":"/examples/integration-with-n8n"},{"title":"Key Generation","href":"/examples/key-generation"}]},{"group":"Enterprise tools","pages":[{"title":"License server","href":"/feature/license-server/index"},{"title":"Data analysis and reports","href":"/examples/data-analysis"},{"title":"Manual activation of a large number of machines","href":"/examples/manual-activation"},{"title":"Migrate to Cryptolens from a third party licensing system","description":"How to migrate to Cryptolens from a third party licensing system","href":"/examples/migrate"},{"title":"Custom domains and regional connectivity","href":"/custom-domains-and-regional-connectivity"},{"title":"Reverse proxy","description":"Explains how you can connect to the Cryptolens API using your own domain","href":"/examples/reverse-proxy"}]}]},{"group":"Payments","icon":"credit-card","pages":[{"title":"Overview","href":"/payments/index"},{"group":"Payment Forms","pages":[{"title":"Introduction","href":"/payments/forms/intro"},{"title":"Example","href":"/payments/forms/example"},{"title":"Request Items","href":"/payments/forms/request-items"},{"title":"Custom field","href":"/payments/forms/custom-field"},{"title":"Sessions","href":"/payments/forms/sessions"},{"title":"(Example) Automating customer and license creation","href":"/payments/forms/automating-customer-and-license-creation"}]},{"group":"Recurring Payments","pages":[{"title":"Recurring payments","href":"/payments/recurring/index"},{"title":"Setting things up","href":"/payments/recurring/setup"},{"title":"Managing customers","href":"/payments/recurring/managing-customers"},{"title":"Metered usage","href":"/payments/recurring/metered-usage"},{"title":"(Example) Stripe products and plans","href":"/payments/recurring/stripe-product-example"},{"title":"Troubleshooting guide","href":"/payments/recurring/troubleshooting"}]},{"group":"Third party","pages":[{"title":"Recurring payments with Stripe without Cryptolens GUI","href":"/payments/thirdparty/custom-interface"},{"title":"Integrating with external payment providers","href":"/payments/thirdparty/external-providers"},{"title":"Integration with FastSpring","href":"/payments/thirdparty/fastspring"},{"title":"Zapier and n8n","href":"/payments/thirdparty/zapier-and-n8n"}]}]},{"group":"Features","pages":[{"group":"Web UI","pages":[{"title":"Control Panel and Web UI","href":"/feature/web-ui/index"},{"group":"Product","pages":[{"title":"SKGL vs. SKM15","href":"/feature/web-ui/skgl-vs-skm15"},{"title":"Searching for Licenses using Linq Queries","href":"/feature/web-ui/linq-search-product"},{"title":"Customize which licenses are shown first","href":"/feature/web-ui/order-by-product"},{"title":"Delete keys","href":"/feature/web-ui/delete-keys"},{"title":"Feature Definitions","href":"/feature/web-ui/feature-definitions"},{"title":"Feature Templates","href":"/feature/web-ui/feature-templates"},{"title":"License Templates","href":"/feature/web-ui/license-templates"},{"title":"Maximum number of machines","href":"/feature/web-ui/maximum-number-of-machines"},{"title":"Start countdown upon activation (aka trial activation)","href":"/feature/web-ui/trial-activation"},{"title":"Keys that don’t expire","href":"/feature/web-ui/keys-that-dont-expire"},{"title":"Export Keys To Spreadsheet","href":"/feature/web-ui/export-keys-to-spreadsheet"},{"title":"Automatic expiration notice","href":"/feature/web-ui/automatic-expiration-notice"},{"title":"Product configuration","href":"/feature/web-ui/product-configuration"}]},{"group":"Customer","pages":[{"title":"Customer secret","href":"/feature/web-ui/customer-secret"}]},{"group":"Account","pages":[{"title":"Add additional admins","href":"/feature/web-ui/multiple-admins"},{"title":"Restricted accounts","href":"/feature/web-ui/restricted-accounts"},{"title":"Company SSO and SCIM","href":"/feature/web-ui/sso-and-scim"}]},{"group":"Analytics","pages":[{"title":"Anomaly detection","href":"/feature/web-ui/anomaly-detection"},{"title":"License Insights","href":"/feature/web-ui/kpi-dashboards"}]}]},{"group":"Reseller portal","pages":[{"title":"Introduction","href":"/feature/reseller-portal/index"},{"title":"Reseller portal for resellers","href":"/feature/reseller-portal/reseller"},{"title":"Reseller portal for vendors","href":"/feature/reseller-portal/vendor"}]},{"group":"License server","pages":[{"title":"License server","href":"/feature/license-server/index"}]},{"group":"Messaging API","pages":[{"title":"Messaging API","href":"/feature/messaging/index"},{"title":"Updates tracking","href":"/feature/messaging/updates-tracking"},{"title":"Notifications","href":"/feature/messaging/notifications"}]},{"group":"Customer portal","pages":[{"title":"Customer portal","href":"/feature/customer-portal/index"}]},{"group":"Activation forms","pages":[{"title":"Activation Forms","href":"/feature/activation-form/index"}]}]},{"group":"Security","icon":"lock","pages":[{"title":"Introduction","href":"/security/index"},{"group":"Privacy and GDPR","pages":[{"title":"GDPR","href":"/security/gdpr"},{"title":"Data processor agreement","href":"/security/dpa"},{"title":"Data protection policy","href":"/security/data-policy"},{"title":"Ask Devolens privacy","sidebarTitle":"Ask Devolens privacy","href":"/security/ask-devolens-privacy"}]},{"group":"Security","pages":[{"title":"Safeguarding measures","href":"/security/safeguarding-measures"},{"title":"Technical and Organizational Measures implemented by Cryptolens","href":"/security/tech-and-org-measures"}]},{"group":"Other","pages":[{"title":"IPs used by the API","href":"/security/api-ips"},{"title":"Devolens Standard Service Level Agreement","href":"/security/sla"}]}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Libraries","pages":[{"title":"Libraries","href":"/libraries"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Custom domains and regional connectivity - Devolens (formerly Cryptolens) Documentation","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":[],"chunks":[]}