LinkSense
FeaturesPricingDocs
Sign InGet Started
LinkSense

Smart dynamic mobile links for the modern web

Product

  • Features
  • Pricing
  • Documentation

Company

  • About
  • Contact
  • Privacy
  • Terms
  • Refund Policy

Support

  • Help Center

© 2026 Informacijske storitve BACK2PIXELS, Jan Kokalj s.p. All rights reserved.

Getting Started

Introduction

Core Features

ProjectsDynamic LinksSocial PreviewsAnalytics

Deep Linking

iOS Deep LinkingAndroid Deep Linking

Account & Billing

Plans & Billing

Migration

Firebase Migration

API Reference

API OverviewAPI Endpoints
DocsAPI Endpoints

API Endpoints

Complete reference for all available REST API endpoints.

Projects

Projects are the top-level containers for your dynamic links. Each project has a unique subdomain that forms the base of every link URL within it.

GET /api/v1/projects

Returns a paginated list of all projects belonging to the authenticated account.

FieldTypeRequiredDescription
pagenumberNoPage number (default: 1).
limitnumberNoResults per page, max 100 (default: 10).
searchstringNoFilter projects by name or subdomain.
sortBystringNoField to sort by: name | subdomain | created_at | updated_at (default: created_at).
sortOrderstringNoSort direction: asc or desc (default: desc).
Requestbash
curl -H "Authorization: Bearer ls_live_..." \
  "https://linksense.net/api/v1/projects?page=1&limit=10"
Responsejson
{
  "data": {
    "data": [
      {
        "id": "proj_abc123",
        "name": "My Project",
        "subdomain": "my-project",
        "created_at": "2024-01-01T00:00:00Z",
        "updated_at": "2024-01-01T00:00:00Z",
        "_count": { "dynamic_links": 5 }
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 10,
      "total": 1,
      "totalPages": 1,
      "hasNextPage": false,
      "hasPreviousPage": false
    }
  }
}

POST /api/v1/projects

Creates a new project. The subdomain must be globally unique.

FieldTypeRequiredDescription
namestringYesDisplay name for the project.
subdomainstringYesUnique subdomain (lowercase letters, numbers, hyphens only).
Requestbash
curl -X POST \
  -H "Authorization: Bearer ls_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"My Project","subdomain":"my-project"}' \
  https://linksense.net/api/v1/projects
Response — 201 Createdjson
{
  "data": {
    "id": "proj_abc123",
    "name": "My Project",
    "subdomain": "my-project",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z",
    "user_id": "user_123"
  }
}

GET /api/v1/projects/:id

Retrieves a single project by its ID.

Requestbash
curl -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123
Responsejson
{
  "data": {
    "id": "proj_abc123",
    "name": "My Project",
    "subdomain": "my-project",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z",
    "user_id": "user_123"
  }
}

PUT /api/v1/projects/:id

Updates an existing project. Both the name and subdomain can be changed. When the subdomain is updated, all dynamic link URLs within the project are automatically regenerated.

FieldTypeRequiredDescription
namestringNoNew display name for the project.
subdomainstringNoNew subdomain. When changed, all dynamic link URLs in this project are updated automatically.
Requestbash
curl -X PUT \
  -H "Authorization: Bearer ls_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"Updated Project Name"}' \
  https://linksense.net/api/v1/projects/proj_abc123
Responsejson
{
  "data": {
    "id": "proj_abc123",
    "name": "Updated Project Name",
    "subdomain": "my-project",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-02T00:00:00Z",
    "user_id": "user_123"
  }
}

DELETE /api/v1/projects/:id

Permanently deletes a project and all of its dynamic links, app registrations, and analytics data. This action cannot be undone.

Requestbash
curl -X DELETE \
  -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123
Responsejson
{
  "data": { "message": "Project deleted successfully" }
}

Dynamic Links

Dynamic links are scoped to a project and contain the device routing configuration that determines where each user is sent when they click the link.

GET /api/v1/projects/:projectId/links

Returns a paginated list of dynamic links within a project.

FieldTypeRequiredDescription
pagenumberNoPage number (default: 1).
limitnumberNoResults per page, max 100 (default: 10).
searchstringNoFilter links by name or custom path.
sortBystringNoField to sort by: name | custom_path | created_at | updated_at (default: created_at).
sortOrderstringNoSort direction: asc or desc (default: desc).
ios_app_idstringNoFilter links by iOS app UUID.
android_app_idstringNoFilter links by Android app UUID.
Requestbash
curl -H "Authorization: Bearer ls_live_..." \
  "https://linksense.net/api/v1/projects/proj_abc123/links?page=1&limit=10"
Responsejson
{
  "data": {
    "data": [
      {
        "id": "link_xyz789",
        "project_id": "proj_abc123",
        "name": "Summer Sale",
        "desktop_url": "https://example.com",
        "custom_path": "summer-sale",
        "full_url": "https://my-project.linksense.net/summer-sale",
        "ios_app_id": "ios_app_111",
        "android_app_id": null,
        "social_title": "Summer Sale - 50% Off",
        "social_description": null,
        "social_image_url": null,
        "ios_deferred_deep_link": false,
        "ios_fallback_url": null,
        "android_fallback_url": null,
        "created_at": "2024-01-01T00:00:00Z",
        "updated_at": "2024-01-01T00:00:00Z",
        "ios_apps": { "id": "ios_app_111", "name": "My iOS App", "bundle_id": "com.example.myapp" },
        "android_apps": null
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 10,
      "total": 1,
      "totalPages": 1,
      "hasNextPage": false,
      "hasPreviousPage": false
    }
  }
}

POST /api/v1/projects/:projectId/links

Creates a new dynamic link within a project. Only a name is required — all other fields are optional. If no custom_path is provided, an 8-character alphanumeric path is auto-generated.

FieldTypeRequiredDescription
namestringYesDisplay name for the link (internal reference only).
desktop_urlstringNoDestination URL for desktop users.
custom_pathstringNoCustom path segment (e.g., summer-sale). Auto-generated if omitted.
ios_app_idstringNoUUID of a registered iOS app in this project.
android_app_idstringNoUUID of a registered Android app in this project.
social_titlestringNoTitle used in social media previews (Open Graph).
social_descriptionstringNoDescription used in social media previews.
social_image_urlstringNoImage URL used in social media previews.
referrer_paramsobjectNoKey-value pairs appended as query parameters for attribution.
ios_deferred_deep_linkbooleanNoEnable deferred deep linking for iOS (default: false).
ios_fallback_urlstringNoFallback URL when the iOS app is not installed.
android_fallback_urlstringNoFallback URL when the Android app is not installed.
Requestbash
curl -X POST \
  -H "Authorization: Bearer ls_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer Sale",
    "desktop_url": "https://example.com",
    "custom_path": "summer-sale",
    "ios_app_id": "ios_app_111",
    "social_title": "Summer Sale - 50% Off"
  }' \
  https://linksense.net/api/v1/projects/proj_abc123/links
Response — 201 Createdjson
{
  "data": {
    "id": "link_xyz789",
    "project_id": "proj_abc123",
    "name": "Summer Sale",
    "desktop_url": "https://example.com",
    "custom_path": "summer-sale",
    "full_url": "https://my-project.linksense.net/summer-sale",
    "ios_app_id": "ios_app_111",
    "android_app_id": null,
    "social_title": "Summer Sale - 50% Off",
    "social_description": null,
    "social_image_url": null,
    "ios_deferred_deep_link": false,
    "ios_fallback_url": null,
    "android_fallback_url": null,
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z"
  }
}

GET /api/v1/projects/:projectId/links/:id

Retrieves a single dynamic link by its ID.

Requestbash
curl -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123/links/link_xyz789
Responsejson
{
  "data": {
    "id": "link_xyz789",
    "project_id": "proj_abc123",
    "name": "Summer Sale",
    "desktop_url": "https://example.com",
    "custom_path": "summer-sale",
    "full_url": "https://my-project.linksense.net/summer-sale",
    "ios_app_id": "ios_app_111",
    "android_app_id": null,
    "social_title": "Summer Sale - 50% Off",
    "social_description": null,
    "social_image_url": null,
    "ios_deferred_deep_link": false,
    "ios_fallback_url": null,
    "android_fallback_url": null,
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z",
    "ios_apps": { "id": "ios_app_111", "name": "My iOS App", "bundle_id": "com.example.myapp" },
    "android_apps": null
  }
}

PUT /api/v1/projects/:projectId/links/:id

Updates one or more fields on an existing dynamic link. Only the fields you include in the request body are modified. If the custom_path changes, the full_url is updated automatically.

FieldTypeRequiredDescription
namestringNoNew display name for the link.
desktop_urlstring | nullNoNew desktop destination URL. Set to null to clear.
custom_pathstringNoNew custom path (must be unique within the project).
ios_app_idstring | nullNoUUID of a registered iOS app. Set to null to unlink.
android_app_idstring | nullNoUUID of a registered Android app. Set to null to unlink.
social_titlestring | nullNoNew social media preview title.
social_descriptionstring | nullNoNew social media preview description.
social_image_urlstring | nullNoNew social media preview image URL.
referrer_paramsobject | nullNoNew referrer parameters. Set to null to clear.
ios_deferred_deep_linkbooleanNoEnable or disable iOS deferred deep linking.
ios_fallback_urlstring | nullNoNew iOS fallback URL. Set to null to clear.
android_fallback_urlstring | nullNoNew Android fallback URL. Set to null to clear.
Requestbash
curl -X PUT \
  -H "Authorization: Bearer ls_live_..." \
  -H "Content-Type: application/json" \
  -d '{"desktop_url":"https://example.com/new","social_title":"Updated Title"}' \
  https://linksense.net/api/v1/projects/proj_abc123/links/link_xyz789
Responsejson
{
  "data": {
    "id": "link_xyz789",
    "project_id": "proj_abc123",
    "name": "Summer Sale",
    "desktop_url": "https://example.com/new",
    "custom_path": "summer-sale",
    "full_url": "https://my-project.linksense.net/summer-sale",
    "ios_app_id": "ios_app_111",
    "android_app_id": null,
    "social_title": "Updated Title",
    "social_description": null,
    "social_image_url": null,
    "ios_deferred_deep_link": false,
    "ios_fallback_url": null,
    "android_fallback_url": null,
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-02T00:00:00Z",
    "ios_apps": { "id": "ios_app_111", "name": "My iOS App", "bundle_id": "com.example.myapp" },
    "android_apps": null
  }
}

DELETE /api/v1/projects/:projectId/links/:id

Permanently deletes a dynamic link. Any existing traffic to the link URL will stop resolving.

Requestbash
curl -X DELETE \
  -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123/links/link_xyz789
Responsejson
{
  "data": { "message": "Dynamic link deleted successfully" }
}

iOS Apps

Register iOS apps against a project to enable Universal Links deep linking. Each iOS app must have a unique bundle ID within the project.

GET /api/v1/projects/:projectId/ios-apps

Returns a paginated list of iOS app registrations for a project.

FieldTypeRequiredDescription
pagenumberNoPage number (default: 1).
limitnumberNoResults per page, max 100 (default: 10).
searchstringNoFilter by name or bundle ID.
sortBystringNoField to sort by: name | bundle_id | created_at | updated_at (default: created_at).
sortOrderstringNoSort direction: asc or desc (default: desc).
Requestbash
curl -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123/ios-apps
Responsejson
{
  "data": {
    "data": [
      {
        "id": "ios_app_111",
        "name": "My iOS App",
        "bundle_id": "com.example.myapp",
        "team_id": "ABCDE12345",
        "appstore_id": "123456789",
        "project_id": "proj_abc123",
        "created_at": "2024-01-01T00:00:00Z",
        "updated_at": "2024-01-01T00:00:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 10,
      "total": 1,
      "totalPages": 1,
      "hasNextPage": false,
      "hasPreviousPage": false
    }
  }
}

POST /api/v1/projects/:projectId/ios-apps

Registers an iOS app with the project. This enables the Apple App Site Association (AASA) file served by LinkSense to include your app's credentials.

FieldTypeRequiredDescription
namestringYesDisplay name for the iOS app.
bundle_idstringYesYour app's bundle identifier (e.g., com.example.myapp).
team_idstringYesYour Apple Developer Team ID (10-character string).
appstore_idstringNoYour app's App Store numeric ID.
Requestbash
curl -X POST \
  -H "Authorization: Bearer ls_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My iOS App",
    "bundle_id": "com.example.myapp",
    "team_id": "ABCDE12345",
    "appstore_id": "123456789"
  }' \
  https://linksense.net/api/v1/projects/proj_abc123/ios-apps
Response — 201 Createdjson
{
  "data": {
    "id": "ios_app_111",
    "name": "My iOS App",
    "bundle_id": "com.example.myapp",
    "team_id": "ABCDE12345",
    "appstore_id": "123456789",
    "project_id": "proj_abc123",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z"
  }
}

GET /api/v1/projects/:projectId/ios-apps/:id

Retrieves a single iOS app registration by its ID.

Requestbash
curl -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123/ios-apps/ios_app_111
Responsejson
{
  "data": {
    "id": "ios_app_111",
    "name": "My iOS App",
    "bundle_id": "com.example.myapp",
    "team_id": "ABCDE12345",
    "appstore_id": "123456789",
    "project_id": "proj_abc123",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z"
  }
}

PUT /api/v1/projects/:projectId/ios-apps/:id

Updates fields on an existing iOS app registration.

FieldTypeRequiredDescription
namestringNoNew display name.
bundle_idstringNoNew bundle identifier.
team_idstringNoNew Apple Developer Team ID.
appstore_idstringNoNew App Store numeric ID.
Requestbash
curl -X PUT \
  -H "Authorization: Bearer ls_live_..." \
  -H "Content-Type: application/json" \
  -d '{"appstore_id":"987654321"}' \
  https://linksense.net/api/v1/projects/proj_abc123/ios-apps/ios_app_111
Responsejson
{
  "data": {
    "id": "ios_app_111",
    "name": "My iOS App",
    "bundle_id": "com.example.myapp",
    "team_id": "ABCDE12345",
    "appstore_id": "987654321",
    "project_id": "proj_abc123",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-02T00:00:00Z"
  }
}

DELETE /api/v1/projects/:projectId/ios-apps/:id

Removes an iOS app registration from the project. The AASA file will no longer include this app's credentials after deletion. Deletion fails if the app is referenced by any dynamic links within the project.

Requestbash
curl -X DELETE \
  -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123/ios-apps/ios_app_111
Responsejson
{
  "data": { "message": "iOS app deleted successfully" }
}

Android Apps

Register Android apps against a project to enable App Links deep linking. Each Android app must have a unique package name within the project.

GET /api/v1/projects/:projectId/android-apps

Returns a paginated list of Android app registrations for a project.

FieldTypeRequiredDescription
pagenumberNoPage number (default: 1).
limitnumberNoResults per page, max 100 (default: 10).
searchstringNoFilter by name or package name.
sortBystringNoField to sort by: name | package_name | created_at | updated_at (default: created_at).
sortOrderstringNoSort direction: asc or desc (default: desc).
Requestbash
curl -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123/android-apps
Responsejson
{
  "data": {
    "data": [
      {
        "id": "android_app_222",
        "name": "My Android App",
        "package_name": "com.example.myapp",
        "sha_fingerprints": ["AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99"],
        "project_id": "proj_abc123",
        "created_at": "2024-01-01T00:00:00Z",
        "updated_at": "2024-01-01T00:00:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 10,
      "total": 1,
      "totalPages": 1,
      "hasNextPage": false,
      "hasPreviousPage": false
    }
  }
}

POST /api/v1/projects/:projectId/android-apps

Registers an Android app with the project. This enables the Digital Asset Links (assetlinks.json) file served by LinkSense to include your app's credentials.

FieldTypeRequiredDescription
namestringYesDisplay name for the Android app.
package_namestringYesYour app's package name (e.g., com.example.myapp).
sha_fingerprintsstring[]YesArray of SHA-256 fingerprints of your app's signing certificates (colon-separated hex).
Requestbash
curl -X POST \
  -H "Authorization: Bearer ls_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Android App",
    "package_name": "com.example.myapp",
    "sha_fingerprints": ["AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99"]
  }' \
  https://linksense.net/api/v1/projects/proj_abc123/android-apps
Response — 201 Createdjson
{
  "data": {
    "id": "android_app_222",
    "name": "My Android App",
    "package_name": "com.example.myapp",
    "sha_fingerprints": ["AA:BB:CC:DD:..."],
    "project_id": "proj_abc123",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z"
  }
}

GET /api/v1/projects/:projectId/android-apps/:id

Retrieves a single Android app registration by its ID.

Requestbash
curl -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123/android-apps/android_app_222
Responsejson
{
  "data": {
    "id": "android_app_222",
    "name": "My Android App",
    "package_name": "com.example.myapp",
    "sha_fingerprints": ["AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99"],
    "project_id": "proj_abc123",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z"
  }
}

PUT /api/v1/projects/:projectId/android-apps/:id

Updates fields on an existing Android app registration.

FieldTypeRequiredDescription
namestringNoNew display name.
package_namestringNoNew package name.
sha_fingerprintsstring[]NoNew SHA-256 certificate fingerprints.
Requestbash
curl -X PUT \
  -H "Authorization: Bearer ls_live_..." \
  -H "Content-Type: application/json" \
  -d '{"sha_fingerprints":["11:22:33:..."]}' \
  https://linksense.net/api/v1/projects/proj_abc123/android-apps/android_app_222
Responsejson
{
  "data": {
    "id": "android_app_222",
    "name": "My Android App",
    "package_name": "com.example.myapp",
    "sha_fingerprints": ["11:22:33:..."],
    "project_id": "proj_abc123",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-02T00:00:00Z"
  }
}

DELETE /api/v1/projects/:projectId/android-apps/:id

Removes an Android app registration from the project. The assetlinks.json file will no longer include this app's credentials after deletion. Deletion fails if the app is referenced by any dynamic links within the project.

Requestbash
curl -X DELETE \
  -H "Authorization: Bearer ls_live_..." \
  https://linksense.net/api/v1/projects/proj_abc123/android-apps/android_app_222
Responsejson
{
  "data": { "message": "Android app deleted successfully" }
}

API Overview

Authentication, rate limits, and response format.

Dynamic Links

Learn about advanced link routing configuration.

PreviousAPI Overview

On this page

ProjectsList ProjectsCreate ProjectGet ProjectUpdate ProjectDelete ProjectDynamic LinksList LinksCreate LinkGet LinkUpdate LinkDelete LinkiOS AppsList iOS AppsCreate iOS AppGet iOS AppUpdate iOS AppDelete iOS AppAndroid AppsList Android AppsCreate Android AppGet Android AppUpdate Android AppDelete Android App