10xDotIn Product Docs

Smart Link Personalization

Route different visitors to different destinations from the same short link, based on location, device, traffic source, or behavior.

Smart Link Personalization

Route different visitors to different destinations from the same short link, based on location, device, traffic source, or behavioral segment.

Key concepts

ConceptWhat it means
Personalization ruleA named set of conditions and a variant destination. When conditions match, the visitor goes to the variant instead of the default
Routing ruleLink-level rules set directly on a link (see Advanced Link Controls). Personalization rules operate at the handle level
ConditionWhat the platform checks: country, device, source, campaign, or segment
VariantThe alternative destination URL served when conditions match
Route previewA dry-run endpoint that shows which destination would be chosen for a given set of conditions
SegmentA visitor classification (e.g., returning, vip, engaged_prospect) derived from signals or assigned manually

How personalization works

The platform evaluates rules in this order:

  1. Link-level routing rules

    Rules set via routingRules on the link are checked first, in priority order.

  2. Handle-level personalization rules

    Checked next if no link-level rule matched.

  3. Default destination

    The link's base destinationUrl is used if no rules match.

Available conditions

ConditionTypeExampleWhat it checks
countryInString[]["US", "GB", "CA"]Visitor's country (from IP geolocation)
deviceInString[]["MOBILE", "TABLET"]Visitor's device type
sourceInString[]["email", "social"]Traffic source / referrer category
campaignInString[]["spring-launch"]Active campaign context
segmentInString[]["vip", "returning"]Visitor segment membership

Create personalization rules

Dashboard

  1. Open personalization

    Go to https://app.10x.in, navigate to your handle, and open Personalization (or Campaigns).

  2. Create a rule

    Click Create Rule and give it a name (e.g., us-mobile-variant).

  3. Set conditions

    Choose the conditions: country, device, source, campaign, or segment.

  4. Set the variant

    Enter the variant destination URL.

  5. Save and preview

    Save and enable the rule. Use Route Preview to verify the rule fires correctly with sample inputs.

  6. Monitor

    Check Analytics with groupBy=segment to see how each segment performs.

API

Create or update a personalization rule

``bash Request curl -sS -X PUT "https://ai.10x.in/v2/handles/{handle}/personalization-rules/{ruleId}" \ -H "Authorization: Bearer <access-token>" \ -H "Content-Type: application/json" \ -d '{"enabled": true, "when": {"countryIn": ["US"], "deviceIn": ["MOBILE"]}, "variant": {"id": "us_mobile_variant", "destinationUrl": "https://example.com/us-mobile"}}' ` `json Body { "enabled": true, "when": { "countryIn": ["US"], "deviceIn": ["MOBILE"] }, "variant": { "id": "us_mobile_variant", "destinationUrl": "https://example.com/us-mobile" } } ``

Returns 200 with the full rule object.

### Preview a routing decision

Test which destination would be chosen for a visitor with specific attributes:

``bash Request curl -sS -X POST "https://ai.10x.in/v2/handles/{handle}/links/{slug}/route-preview" \ -H "Authorization: Bearer <access-token>" \ -H "Content-Type: application/json" \ -d '{"country": "US", "device": "MOBILE", "source": "email", "campaign": "spring-launch"}' ` `json Body { "country": "US", "device": "MOBILE", "source": "email", "campaign": "spring-launch" } ``

Returns the matched rule, the destination URL that would be used, and the evaluation path.

### View segment analytics

``bash curl -sS "https://ai.10x.in/v2/handles/{handle}/analytics?groupBy=segment" \ -H "Authorization: Bearer <access-token>" ``

Returns click and conversion metrics broken down by visitor segment.

### Filter by campaign

``bash curl -sS "https://ai.10x.in/v2/handles/{handle}/analytics?groupBy=segment&campaignId=spring-launch" \ -H "Authorization: Bearer <access-token>" ``

Required auth

Auth modeUse case
CREATOR-level JWT or aboveCreate and manage personalization rules
PAT with personalization.* scopeAutomation
None (visitor-side)Edge personalization uses cookies and IP-based geolocation

Example: geo-targeting workflow

Goal: Route US visitors to a US landing page and everyone else to a global page.

  1. Create the link

    Create a link with the global page as the default destination:

    ``bash Request curl -sS -X PUT "https://ai.10x.in/v2/handles/{handle}/links/product" \ -H "Authorization: Bearer <access-token>" \ -H "Content-Type: application/json" \ -d '{"destinationUrl": "https://example.com/global", "title": "Product Page"}' ` `json Body { "destinationUrl": "https://example.com/global", "title": "Product Page" } `` </li><li><h4>Add the US variant</h4><p>Create a personalization rule for US visitors:</p>

    ``bash Request curl -sS -X PUT "https://ai.10x.in/v2/handles/{handle}/personalization-rules/us-variant" \ -H "Authorization: Bearer <access-token>" \ -H "Content-Type: application/json" \ -d '{"enabled": true, "when": {"countryIn": ["US"]}, "variant": {"id": "us_variant", "destinationUrl": "https://example.com/us"}}' ` `json Body { "enabled": true, "when": { "countryIn": ["US"] }, "variant": { "id": "us_variant", "destinationUrl": "https://example.com/us" } } `` </li><li><h4>Verify with route preview</h4><p>Test with a US visitor — expected destination: <code>https://example.com/us</code>.</p>

    Test with a non-US visitor ("country": "DE") — expected destination: https://example.com/global (default).

Common errors
CodeErrorCause
400invalid_rule_conditionsCondition uses an unsupported field or empty array
400invalid_destination_urlVariant destination is not a valid HTTP(S) URL
404not_foundRule or link does not exist
403insufficient_roleCaller does not have CREATOR or higher role

Personalization layers at a glance

LayerWhere to configureScopeGuide
Link routing rulesroutingRules on each linkPer-linkAdvanced Link Controls
Handle personalization rulespersonalization-rules/{ruleId}Per-handleThis guide
Campaign targetingCampaign with segment conditionsPer-campaignCampaign Funnel Workflow
Chain signal rulesSignal-driven rules with behavioral triggersCross-sessionChain Signals and Prefetch
Vector embeddingsContent-aware auto-rerankingPer-handle, automaticVector Embedding Targeting

Updated Jun 19, 2026