links.arjun.tv/docs/end-user/advanced-link-controls

Advanced Link Controls

Use this guide to configure scheduling, expiry, click caps, password protection, routing rules, and social previews on your short links.

When to use

  • You want a link to go live at a specific date and time.
  • You need a link to automatically expire after a deadline or click threshold.
  • You want to password-protect a link before sharing it publicly.
  • You need to route different audiences to different destinations from a single link.

Scheduling

Schedule a link to become active and/or deactivate at specific times.

FieldTypeEffect
scheduledStartAtISO 8601 timestampLink returns 404 before this time
scheduledEndAtISO 8601 timestampLink returns 410 (Gone) after this time

Both fields are optional. If neither is set, the link is active immediately and indefinitely (subject to the enabled flag).

Behavior at access time:

  • Before scheduledStartAt: visitor sees a 404 (link appears to not exist).
  • After scheduledEndAt: visitor sees a 410 (link has ended).
  • Between the two: normal redirect behavior.

Expiry

Set an absolute expiration time after which the link stops working.

FieldTypeEffect
expiresAtISO 8601 timestampLink returns 410 (Gone) after this time

After expiry:

  • The link record is not deleted — it remains queryable via the API for history and analytics.
  • The redirect returns HTTP 410 (Gone).
  • Analytics collected before expiry are preserved.

Click caps

Limit the total number of clicks a link can receive.

FieldTypeEffect
maxClicksPositive integerLink becomes unavailable after reaching this count

Set maxClicks to null or omit it to disable the cap. The minimum value is 1.

Password protection

Protect a link with a password. Visitors must enter the correct password before being redirected.

FieldTypeEffect
passwordString (max 128 chars)Visitor sees a password bridge page instead of immediate redirect

When a password is set:

  1. Visitor navigates to the short link.
  2. Instead of a redirect, a password entry form is displayed.
  3. Visitor enters the password.
  4. If correct, the visitor is redirected to the destination.
  5. If incorrect, the form re-displays with an error message.

Set password to null or empty string to remove password protection.

Note: The API never returns the plaintext password — it returns a boolean indicating whether a password is set.

Routing rules

Route different visitors to different destinations from a single short link using conditional routing rules.

Each rule has:

PropertyTypeDescription
idStringUnique rule identifier
priority0–9999Lower number = higher priority
weightNumber (optional)Percentage for A/B testing
destinationUrlURLTarget destination for this rule
conditionsObject (optional)When this rule should apply

Condition types

ConditionTypeExample
countryInString[]["US", "GB", "CA"]
deviceInString[]["MOBILE", "TABLET"]
sourceInString[]["email", "social"]
campaignInString[]["spring-launch"]
segmentInString[]["vip", "returning"]

Rules are evaluated in priority order. The first matching rule wins. If no rule matches, the link's default destinationUrl is used.

Tracking policy

Control how click tracking and context tokens work for a link.

FieldTypeDescription
modeDIRECT or BRIDGEWhether to use a tracking bridge page
appendContextParamBooleanAppend ?ctx= to destination URL
templateRefsString[]References to tracking templates (UTM configs)
contextVarsObjectCustom key-value pairs appended to tracking
queryVarAllowlistArrayQuery parameters allowed to pass through to destination

Social preview

Customize the Open Graph metadata shown when the link is shared on social platforms.

FieldTypeDescription
ogTitleStringCustom title for social cards
ogDescriptionStringCustom description for social cards
ogImageURLCustom image for social cards

Additional SEO controls:

FieldTypeDescription
nofollowBooleanAdd rel=nofollow to the redirect
sponsoredBooleanMark link as sponsored content
affiliateDisclosureStringAffiliate disclosure text

Link status

Links use a simple enabled/disabled model combined with scheduling and expiry:

ConditionEffective statusHTTP response
enabled is falseDisabled404 Not Found
Before scheduledStartAtNot yet active404 Not Found
After scheduledEndAtEnded410 Gone
After expiresAtExpired410 Gone
All conditions passActive302/307 Redirect

Version history

The platform keeps up to 3 versions of each link snapshot. Each version records:

  • Version number (auto-incremented)
  • Snapshot timestamp
  • Actor who made the change
  • Complete link state at that version

Use the version history to audit who changed a link and when.

Tags and categories

Organize links with custom metadata:

FieldTypeDescription
tagsString[]Freeform tags for filtering and search
categoriesString[]Predefined categories for grouping

Tags and categories also feed into the platform's link embedding system for personalization.

UI path

  1. Open https://app.{PUBLIC_DOMAIN}.
  2. Navigate to your handle and open Links.
  3. Select a link or create a new one.
  4. Expand the Advanced Settings section.
  5. Configure scheduling, expiry, password, routing rules, or social preview.
  6. Save changes.

Required auth

  • CREATOR-level JWT or above to manage link settings.
  • PAT with links.write scope for automation.

API fallback

Create or update a link

PUT /v2/handles/{handle}/links/{slug}

{
  "destinationUrl": "https://example.com",
  "title": "My Campaign Link",
  "enabled": true,
  "scheduledStartAt": "2026-03-01T00:00:00Z",
  "scheduledEndAt": "2026-03-31T23:59:59Z",
  "expiresAt": null,
  "maxClicks": 1000,
  "password": null,
  "redirectType": "302",
  "routingRules": [
    {
      "id": "rule-mobile",
      "priority": 100,
      "destinationUrl": "https://m.example.com",
      "conditions": { "deviceIn": ["MOBILE"] }
    }
  ],
  "trackingPolicy": {
    "mode": "DIRECT",
    "appendContextParam": true
  },
  "socialPreview": {
    "ogTitle": "Spring Campaign",
    "ogDescription": "Check out our spring deals",
    "ogImage": "https://cdn.example.com/spring.jpg"
  },
  "tags": ["spring", "promo"],
  "categories": ["marketing"],
  "nofollow": false,
  "sponsored": false
}

Preview routing decision

POST /v2/handles/{handle}/links/{slug}/route-preview

{
  "country": "US",
  "device": "mobile",
  "source": "email"
}

Returns which destination URL would be selected for the given conditions.

Common errors

CodeErrorCause
400invalid_slugSlug does not match ^[A-Za-z0-9_-]{4,24}$
400invalid_destination_urlURL is not a valid HTTP(S) URL or is on the blocked domain list
400invalid_routing_rulesRule priority out of range or missing required fields
404not_foundLink does not exist

Related: