Deferred Link Resolution API
Mobile client endpoints for resolving deferred link tickets and tracking app opens.
https://taqlyn.com/shop/checkout?cartId=cart_9841&promo=WELCOME20&aff=partner_8The 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.
#Resolve Deferred Link
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:
- iOS App Clip Token (
appClip): High-fidelity shared container ephemeral ticket. - System Clipboard Ticket (
clipboard): Encrypted ephemeralclick_id=clk_...ticket. - Web-to-App Claim Token (
claim): Short-lived claim cookie from Safari / Chrome Custom Tabs. - Google Play Install Referrer (
referrer):utm_contentorclick_iddelivered by Play Store API. - 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
{
"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
| Field | Type | Required | Description |
|---|---|---|---|
clientId | string | Yes | Public client ID registered for your application. |
publicKeyId | string | Yes | Active public key ID associated with clientId. |
clipboard | string | No | Clipboard string captured on iOS first launch. |
referrer | string | No | Install referrer payload retrieved from Google Play Install Referrer API. |
claim | string | No | Web claim ticket passed via custom URL scheme or WebAuthn handoff. |
appClip | string | No | Shared App Group token passed from an iOS App Clip. |
env | string | No | "sandbox" or "production". Inferred from clientId prefix if omitted. |
fingerprint | boolean | No | Android opt-in probabilistic IP-hash match when all tokens are empty. |
#Response (200 OK) — Matched Link
When an unconsumed, non-expired click ticket is found:
{
"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):
{
"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
{
"clientId": "app_live_8f92ab140cd3",
"publicKeyId": "pk_live_7294bbca",
"linkId": "sl_9128abef",
"openId": "opn_18920abce812",
"anonymousId": "anon_8f7b2c019a"
}#Request Parameters
| Field | Type | Description |
|---|---|---|
clientId | string | Public app identifier. |
publicKeyId | string | Active public key ID. |
linkId | string | The ID of the short link opened or resolved. |
openId | string | Client-generated UUID for deduplication. |
anonymousId | string | Random 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).
{
"clientId": "app_test_…",
"publicKeyId": "pk_test_…",
"name": "view_item",
"data": { "sku": "42" },
"env": "sandbox"
}Warm short-code opens use a different endpoint: Expand API.