Console
Taqlyn Docs/REST APIs/Deferred Link Resolution API
API v1.44 min read

Deferred Link Resolution API

Mobile client endpoints for resolving deferred link tickets and tracking app opens.

LIVE SPECIMEN
Universal & Deferred Link Simulator
URLhttps://taqlyn.com/shop/checkout?cartId=cart_9841&promo=WELCOME20&aff=partner_8
Route: /shop/checkoutMode: Deferred Install

The Resolution API powers deferred deep linking on iOS and Android. When a user taps a Taqlyn link without the app installed, they are directed to the App Store or Google Play. Upon the app's first launch, the mobile SDK calls POST /v1/resolve to match and restore the intended destination.

POST /v1/resolve

Resolves an incoming deferred ticket. This endpoint uses public authentication (clientId + publicKeyId) and never requires a private key.

#Priority Matching Cascade

Taqlyn evaluates tokens in priority order. The first non-empty valid token wins:

  1. iOS App Clip Token (appClip): High-fidelity shared container ephemeral ticket.
  2. System Clipboard Ticket (clipboard): Encrypted ephemeral click_id=clk_... ticket.
  3. Web-to-App Claim Token (claim): Short-lived claim cookie from Safari / Chrome Custom Tabs.
  4. Google Play Install Referrer (referrer): utm_content or click_id delivered by Play Store API.
  5. Opt-in fingerprint (fingerprint: true) — Android only. When no token is present, match the newest unconsumed click for this app×env by hashed request IP. Off unless the SDK sends the flag (enableProbabilisticMatch). Never the iOS default.

#Request Body

JSON
{
  "clientId": "app_live_8f92ab140cd3",
  "publicKeyId": "pk_live_7294bbca",
  "clipboard": "click_id=clk_82f10ca981beef",
  "referrer": "utm_source=taqlyn&utm_content=clk_82f10ca981beef",
  "env": "production"
}

#Request Parameters

FieldTypeRequiredDescription
clientIdstringYesPublic client ID registered for your application.
publicKeyIdstringYesActive public key ID associated with clientId.
clipboardstringNoClipboard string captured on iOS first launch.
referrerstringNoInstall referrer payload retrieved from Google Play Install Referrer API.
claimstringNoWeb claim ticket passed via custom URL scheme or WebAuthn handoff.
appClipstringNoShared App Group token passed from an iOS App Clip.
envstringNo"sandbox" or "production". Inferred from clientId prefix if omitted.
fingerprintbooleanNoAndroid opt-in probabilistic IP-hash match when all tokens are empty.

When an unconsumed, non-expired click ticket is found:

JSON
{
  "deferredLink": {
    "linkId": "sl_9128abef",
    "destinationPath": "/products/491",
    "params": {
      "sku": "491",
      "promo": "SUMMER",
      "referrer": "influencer_mike"
    },
    "matchedVia": "clipboard",
    "clickTimestamp": 1725537600
  }
}

#Response (200 OK) — No Match / Expired / Already Consumed

When no valid ticket is found or the ticket has already been claimed (preventing replay exploitation):

JSON
{
  "deferredLink": null
}

Single-Use Guarantee: Once a ticket is resolved, it is marked as consumed in the cache and database. Subsequent calls return deferredLink: null.


#Track Open Event

POST /v1/events/open

Mobile SDKs invoke this endpoint to record successful deep link routing events and app activations for funnel attribution analytics.

#Request Body

JSON
{
  "clientId": "app_live_8f92ab140cd3",
  "publicKeyId": "pk_live_7294bbca",
  "linkId": "sl_9128abef",
  "openId": "opn_18920abce812",
  "anonymousId": "anon_8f7b2c019a"
}

#Request Parameters

FieldTypeDescription
clientIdstringPublic app identifier.
publicKeyIdstringActive public key ID.
linkIdstringThe ID of the short link opened or resolved.
openIdstringClient-generated UUID for deduplication.
anonymousIdstringRandom anonymous device salt (no IDFA, no hardware ID).

#Response (202 Accepted)

An empty HTTP 202 Accepted response acknowledging telemetry receipt.


#Custom SDK event

POST /v1/events/sdk

Detour-style logEvent(name, data?) from Android, iOS, React Native, and Flutter. Public credentials only. Returns 202 Accepted after auth (no durable custom-event store on Day-1).

JSON
{
  "clientId": "app_test_…",
  "publicKeyId": "pk_test_…",
  "name": "view_item",
  "data": { "sku": "42" },
  "env": "sandbox"
}

Warm short-code opens use a different endpoint: Expand API.