Skip to content

Documentation

API Reference

All SDK-facing endpoints. Authenticate with Authorization: Bearer <apiKey>.

SDK endpoints

POST/api/v1/sdk/deferred-link/resolve

Resolve a deferred link after app install or first launch. Returns the click-time route payload if a deterministic match exists.

Request
{
  "appID": "app_abc123",
  "platform": "ios",
  "device": {
    "deviceId": "sdk-generated-device-id",
    "locale": "en-MY",
    "timezone": "Asia/Kuala_Lumpur",
    "os": "iOS",
    "osVersion": "18.2",
    "model": "iPhone"
  },
  "firstLaunch": true
}
Response
{
  "processed": true,
  "link": {
    "type": "deferred",
    "url": "https://go.customer.com/raya2026",
    "pathname": "/promo/raya2026",
    "params": { "campaign": "raya2026" },
    "metadata": { "linkId": "link_123" }
  }
}
POST/api/v1/sdk/short-link/resolve

Resolve a single-segment short link URL already received by the SDK into a full route payload.

Request
{
  "appID": "app_abc123",
  "url": "https://go.customer.com/raya2026"
}
Response
{
  "ok": true,
  "link": {
    "type": "verified",
    "url": "https://go.customer.com/raya2026",
    "pathname": "/promo/raya2026",
    "params": { "campaign": "raya2026" },
    "metadata": { "linkId": "link_123" }
  }
}
POST/api/v1/sdk/analytics/events

Send custom analytics events. Non-blocking; returns immediately after queue acceptance.

Request
{
  "appID": "app_abc123",
  "deviceId": "dev_123",
  "sessionId": "sess_456",
  "eventName": "purchase_completed",
  "data": { "bookingId": "104971", "amount": 199.0 },
  "linkContext": { "linkId": "link_123" },
  "timestamp": "2026-05-07T06:30:00.000Z"
}
Response
{ "ok": true }
POST/api/v1/sdk/analytics/retention

Send retention/lifecycle events (e.g., app_open). Same envelope as analytics events with event_kind set to retention.

Request
{
  "appID": "app_abc123",
  "deviceId": "dev_123",
  "eventName": "app_open",
  "timestamp": "2026-05-07T06:30:00.000Z"
}
Response
{ "ok": true }

Association files

GET/.well-known/apple-app-site-association

Returns the AASA payload for the requesting domain. Generated from enabled iOS App Platforms. No .json extension, no redirects, HTTPS only.

Response
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "9W4L5453R9.com.yourapp.ios",
        "paths": ["/home", "/offers/*", "/booking"]
      }
    ]
  }
}
GET/.well-known/assetlinks.json

Returns the Android asset links payload for the requesting domain. Generated from enabled Android App Platforms.

Response
[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.yourapp.android",
      "sha256_cert_fingerprints": [
        "DB:4F:DF:87:41:80:A4:6B:..."
      ]
    }
  }
]

Public link routes

GET/:appHash/:slug

Detour-compatible public link route. Resolves tenant, domain, link, and applies fallback policy based on request context.

GET/:slug

Branded simple route. Same resolution as appHash route but addressed by domain + slug only.

Public routes create Click Contexts when the Link has mobile targets eligible for deferred resolution. Web-only links do not create Click Contexts.