links.arjun.tv/docs/end-user/custom-domains

Custom Domains

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

Tip

Supports both apex domains (example: example.com) and subdomains (example: go.example.com).

Warning

Custom-domain mapping does not extend MCP onto your domain. MCP stays on the platform environment hostname: production uses https://{handle}.mcp.10x.in/mcp; staging/test validation uses the staging platform hostname.

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

Warning

verification.txtValue is returned at creation time and should be saved immediately.

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 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)platform edge target shown in Domain Management (copy exact target)

For subdomain-only setups, you can use CNAME to domains.{PUBLIC_DOMAIN} instead of apex alias.

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.

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)platform edge target shown in Domain Management
SubdomainCNAME or A alias (provider-dependent)subdomain (example go.example.com)platform edge target shown in Domain Management

Note

Copy DNS targets exactly as shown in the domain setup screen or API response fields for your environment.

Warning

Legacy CNAME-only setup (for example hardcoded domains.10x.in) is not sufficient for this flow.

Set up a custom domain

  1. Open Domain Management

    Go to https://app.{PUBLIC_DOMAIN} and open the domain management app.

  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.

Verify routing

Domain lookup contract

curl -sS "https://api.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.

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.

Related

Getting Started

Set up your account and first link

Short Links

Create and manage your links

Advanced Link Controls

Scheduling, routing rules, and social previews

Troubleshooting

Debug common issues