10xDotIn Product Docs

Custom Domains

Run your links and pages on your own branded apex or subdomain and configure registrar DNS correctly.

Custom Domains

Run your links and pages on your own domain instead of the default {handle}.10x.in.

What you provide vs what 10x returns

StepYou provide10x returns
Create domaindomain, defaultHandle (optional pathRules)verification.txtName, verification.txtValue
First reconcileDomain already createdhostedZoneId, nameservers[]
Status checksNothing extrastatus, statusReason, ownership.nsDelegated, ownership.txtVerified

How it works

  1. Create domain mapping

    Register your domain in 10x with a default handle.

  2. Save verification values

    Capture verification.txtName and verification.txtValue from the create response.

  3. Run initial reconcile

    Trigger reconcile so 10x provisions hosted-zone metadata and nameservers.

  4. Update DNS at registrar and delegated zone

    Delegate nameservers at your registrar, then add verification/traffic records in DNS.

  5. Reconcile again

    Trigger reconcile after propagation.

  6. Go live

    Domain becomes ACTIVE; public routing and redirects start resolving on your domain.

What custom domains do not cover

Custom domains currently support:

  • public site traffic
  • redirect/link traffic
  • domain lookup and route activation

Custom-domain route actions also support advanced routing rules:

  • proxy_origin.originUrl must start with https:// and cannot include credentials, query strings, or hash fragments.
  • redirect.targetUrl must start with https://; redirect status codes are limited to 301, 302, 307, and 308.
  • fallback can dispatch to a handle or proxy to an origin. Fallback redirects are intentionally excluded so unmatched paths do not unexpectedly redirect an entire domain.

Custom domains do not currently support:

  • MCP endpoints on *.mcp.<your-domain>
  • OAuth protected-resource metadata on your domain for MCP
  • per-handle MCP subdomain routing under your registrar-managed domain

Why MCP is excluded from custom domains

MCP transport depends on platform-managed wildcard DNS, certificates, OAuth discovery metadata, and handle-routing rules on the environment domain. Supporting https://{handle}.mcp.<your-domain> would require extra wildcard delegation, certificate issuance, and environment-specific OAuth metadata hosting for every customer domain. That is not part of the supported custom-domain flow today.

Domain Commerce UI screens

Use these screens in order inside Domain Management:

Screen 1: Create domain result

Immediately save:

  • verification.txtName
  • verification.txtValue (one-time)

Screen 2: Registrar records panel

Add exactly these records:

Record typeHost/NameValue source
NSapex domain (example.com)domain.nameservers[] from GET /v2/account/domains/{domain} after first reconcile
TXTverification.txtNameverification.txtValue from create response
A alias (apex)apex domain (example.com)domain.edgeTarget shown in Domain Management / GET /v2/account/domains/{domain}
CNAME or A alias (subdomain)subdomain (go.example.com)domain.edgeTarget shown in Domain Management / GET /v2/account/domains/{domain}

Screen 3: Status timeline

Expected transition order: PENDING_DELEGATION -> (PENDING_CERT or PENDING_EDGE_DEPLOY) -> ACTIVE

If a status stalls, use statusReason as the fix instruction. Some PENDING_CAPACITY reasons are operator-only infrastructure issues, not customer DNS mistakes.

Operator-only shard status reasons

StatusReasonMeaningRecovery
PENDING_CAPACITYcustom_domain_shard_unconfiguredNo dedicated custom-domain shard distribution is configured yet.Platform admin must configure a dedicated custom-domain shard in Platform settings.
PENDING_CAPACITYcustom_domain_shard_distribution_not_foundThe configured shard distribution id does not resolve to a CloudFront distribution.Platform admin must correct the shard distributionId, then reconcile again.
PENDING_CAPACITYshared_wildcard_distribution_reservedThe configured shard points at the shared 10x.in wildcard distribution, which is reserved for platform traffic.Platform admin must move custom domains onto a dedicated distribution, not the shared wildcard.
PENDING_CAPACITYno_active_shard_capacityAll configured custom-domain shards are full or inactive.Platform admin must add capacity or reactivate a shard.

DNS values you must configure

1) Registrar nameserver delegation

Use the nameservers[] values returned by GET /v2/account/domains/{domain} after reconcile.

Record typeHostValue
NSapex domain (example example.com)all nameservers from nameservers[]

2) Verification TXT record

Use the values returned in the create response:

Record typeNameValue
TXTverification.txtNameverification.txtValue

3) Traffic record in delegated DNS zone

Add a traffic record in the delegated zone so requests route to 10x edge.

Domain typeRecord typeNameTarget
Apex domainA aliasapex (example example.com)domain.edgeTarget shown in Domain Management / GET /v2/account/domains/{domain}
SubdomainCNAME or A alias (provider-dependent)subdomain (example go.example.com)domain.edgeTarget shown in Domain Management / GET /v2/account/domains/{domain}

Set up a custom domain

Dashboard

  1. Open Domain Management

    Go to https://admin.10x.in, open Integrations, then open the custom-domain / account-domains section.

  2. Create domain

    Click Add Domain, enter your domain, select a default handle, and submit.

  3. Copy verification values

    Save the displayed TXT name and TXT value immediately.

  4. Run reconcile

    Trigger reconcile and wait until nameservers are displayed.

  5. Update registrar DNS

    At your registrar, replace nameservers with the returned nameservers[].

  6. Update delegated zone DNS

    Add the TXT verification record and traffic record in the delegated zone.

  7. Reconcile again and verify active

    Trigger reconcile once more and wait for ACTIVE.

API

1) Create domain

``bash Request curl -sS -X POST "https://ai.10x.in/v2/account/domains" \ -H "Authorization: Bearer <owner-jwt>" \ -H "Content-Type: application/json" \ -d '{ "domain": "example.com", "sourceType": "BYOD_HOSTNAME", "defaultHandle": "acme" }' ` `json Response (trimmed) { "domain": { "domain": "example.com", "status": "PENDING_DELEGATION", "statusReason": "awaiting_nameserver_delegation" }, "verification": { "txtName": "_ls-verify.example.com", "txtValue": "lsv1...." } } ``

Save verification.txtName and verification.txtValue.

### 2) Run first reconcile

``bash curl -sS -X POST "https://ai.10x.in/v2/account/domains/example.com/reconcile" \ -H "Authorization: Bearer <owner-jwt>" \ -H "Content-Type: application/json" \ -d '{}' ``

### 3) Poll until nameservers are available

``bash curl -sS "https://ai.10x.in/v2/account/domains/example.com" \ -H "Authorization: Bearer <owner-jwt>" ``

Wait until:

  • domain.hostedZoneId is non-null
  • domain.nameservers is non-empty
  • domain.edgeTarget is non-empty before you publish the traffic record

### 4) Update registrar + DNS records

Use:

  • domain.nameservers[] at registrar (NS delegation)
  • saved verification.txtName + verification.txtValue as TXT
  • traffic record target from domain setup details

### 5) Reconcile again and wait for ACTIVE

``bash curl -sS -X POST "https://ai.10x.in/v2/account/domains/example.com/reconcile" \ -H "Authorization: Bearer <owner-jwt>" \ -H "Content-Type: application/json" \ -d '{}' ``

Poll status:

  • domain.status == "ACTIVE"
  • domain.ownership.nsDelegated == true
  • domain.ownership.txtVerified == true

Verify routing

Domain lookup contract

curl -sS "https://ai.10x.in/v2/public/domain-lookup?domain=example.com"

Expected:

  • 200
  • status: "ACTIVE"
  • handle matches your defaultHandle

Redirect behavior check

Create a known slug on the mapped handle, then request:

https://example.com/<slug>

Expect redirect response (302 or 307) to the configured destination URL.

Route actions and fallback origins

Account domains support ordered route rules for production-domain composition. Each rule matches a path prefix and applies one action:

  • dispatch_handle: serve the path through a 10x handle.
  • proxy_origin: proxy the path to an external HTTPS origin.
  • redirect: send the viewer to a fixed HTTPS URL with status 301, 302, 307, or 308.

If no route rule matches, the domain uses its fallback. A fallback can dispatch to a handle or proxy to an external HTTPS origin. Existing domains that only have defaultHandle and pathRules continue to work; those legacy path rules are treated as handle-dispatch rules.

Example:

{
  "defaultHandle": "main",
  "routeRules": [
    {
      "id": "rule_shop",
      "match": { "type": "prefix", "value": "/shop" },
      "action": { "type": "dispatch_handle", "handle": "shop" },
      "order": 10,
      "enabled": true
    },
    {
      "id": "rule_blog",
      "match": { "type": "prefix", "value": "/blog" },
      "action": {
        "type": "proxy_origin",
        "originUrl": "https://legacy.example-host.com",
        "preserveHostHeader": false
      },
      "order": 20,
      "enabled": true
    }
  ],
  "fallback": {
    "type": "proxy_origin",
    "originUrl": "https://current-site.example.com",
    "preserveHostHeader": false
  }
}

Required auth and access

  • OWNER-level JWT for domain create/reconcile/routes.
  • Registrar access to update nameservers for your domain.
  • DNS access to add TXT and traffic records in the delegated zone.

Status and statusReason guide

StatusstatusReasonMeaningWhat to do
PENDING_DELEGATIONawaiting_nameserver_delegationRegistrar NS not delegated yetUpdate registrar nameservers
PENDING_DELEGATIONawaiting_txt_ownership_verificationTXT challenge missing or wrongFix TXT name/value
PENDING_EDGE_DEPLOYedge_record_not_readyTraffic record missing or mismatchedFix A/alias or CNAME traffic record
PENDING_CERTcertificate_not_ready_for_domainCertificate not ready for this domainWait or contact support
PENDING_CAPACITYno_active_shard_capacityNo active shard capacityContact support/platform admin
ACTIVEhost_route_activeDomain is liveNo action needed
FAILEDcustom_domain_reconcile_errorReconcile failed unexpectedlyRetry and escalate with request IDs/logs

Troubleshooting DNS issues

  • Reconcile still awaiting_nameserver_delegation: check authoritative NS with dig +short NS <domain>.
  • Reconcile still awaiting_txt_ownership_verification: check TXT with dig +short TXT <txtName>.
  • edge_record_not_ready: verify only one canonical traffic record exists for host and points to platform target.
  • FAILED/custom_domain_reconcile_error: re-run reconcile, then escalate with response payload and timestamp.

Updated Jun 19, 2026