Skip to Content
Elido is in closed beta — APIs are stable but rate-limits and quotas may change before GA. Request access →
GuidesDeep links

Deep links

A deep link does two things at once: open the destination directly in a native app when it’s installed, fall back to the App Store or Play Store otherwise. Elido implements this on top of two existing features:

  1. Smart links for OS-based routing.
  2. Universal Links / App Links files served from your custom domain so iOS and Android trust the redirect to bypass the browser.

You don’t need a special “deep link” object — any short link with the right rules and the right .well-known files is one.

Step 1 — OS-targeted rules

Add targeting_rules that pick the store URL by OS, leaving the destination_url as a desktop fallback:

curl -X PATCH \ https://api.elido.app/v1/workspaces/1/links/42 \ -H "Authorization: Bearer $ELIDO_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "destination_url": "https://example.com/get-the-app", "targeting_rules": [ { "label": "iOS", "match": { "os": ["ios"] }, "destination_url": "https://apps.apple.com/app/id1234567890" }, { "label": "Android", "match": { "os": ["android"] }, "destination_url": "https://play.google.com/store/apps/details?id=com.example.app" } ] }'

That alone gets you store fallback. To open the installed app directly without a browser hop, ship the OS association files.

Host an apple-app-site-association JSON document at the root of your custom domain. Elido serves it for you when you upload it via the domains API:

curl -X PATCH \ https://api.elido.app/v1/workspaces/1/domains/42/app-links \ -H "Authorization: Bearer $ELIDO_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "apple_app_site_association": { "applinks": { "apps": [], "details": [ { "appID": "TEAMID.com.example.app", "paths": ["/*"] } ] } } }'

The file then resolves at:

https://go.example.com/.well-known/apple-app-site-association

iOS fetches it on first install (and re-validates periodically) — once verified, taps on https://go.example.com/... open your app instead of Safari.

Same idea, with the Android assetlinks format:

curl -X PATCH \ https://api.elido.app/v1/workspaces/1/domains/42/app-links \ -H "Authorization: Bearer $ELIDO_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "android_assetlinks": [ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["AB:CD:EF:..."] } } ] }'

Served at:

https://go.example.com/.well-known/assetlinks.json

Android picks this up on app install. Verify with adb shell pm get-app-links com.example.app.

Step 4 — Custom URL schemes (optional)

If your app registers a myapp:// scheme as well, you can route to it directly via the Universal Link / App Link target — most native SDKs (Branch, Adjust, AppsFlyer) accept either.

A common shape

{ "destination_url": "https://example.com/web-fallback", "targeting_rules": [ { "match": { "os": ["ios"] }, "destination_url": "https://apps.apple.com/app/id123" }, { "match": { "os": ["android"] }, "destination_url": "https://play.google.com/store/apps/details?id=com.example.app" } ] }
  • App installed → OS opens the app via Universal/App Links.
  • App not installed → store URL via the smart-link rule.
  • Desktop / other → web fallback via destination_url.

Testing

  • iOS: xcrun simctl openurl booted https://go.example.com/Ab3xQ in a simulator with your app installed.
  • Android: adb shell am start -a android.intent.action.VIEW -d "https://go.example.com/Ab3xQ".
  • Desktop: open the link in Chrome — should land on the web fallback.