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 LinksURL ShorteningSocial PreviewsAnalytics

Deep Linking

iOS Deep LinkingAndroid Deep Linking

Mobile SDKs

iOS SDKBetaAndroid SDKBetaFlutter SDKBetaFlutterFlow SDKSoonReact Native SDKPreview

Account & Billing

Plans & Billing

Migration

Firebase Migration

API Reference

API OverviewAPI Endpoints
DocsAPI ReferenceAPI Endpoints
API Reference

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).
Request
bash
curl -H "Authorization: Bearer ls_live_..." \
"https://linksense.net/api/v1/projects?page=1&limit=10"
Response
json
{
"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).
Request
bash
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 Created
json
{
"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.

Request
bash
curl -H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123
Response
json
{
"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.
Request
bash
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
Response
json
{
"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.

Request
bash
curl -X DELETE \
-H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123
Response
json
{
"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_idstring
Request
bash
curl -H "Authorization: Bearer ls_live_..." \
"https://linksense.net/api/v1/projects/proj_abc123/links?page=1&limit=10"
Response
json
{
"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_titlestring
Request
bash
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 Created
json
{
"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.

Request
bash
curl -H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123/links/link_xyz789
Response
json
{
"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 | null
Request
bash
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
Response
json
{
"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.

Request
bash
curl -X DELETE \
-H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123/links/link_xyz789
Response
json
{
"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).
Request
bash
curl -H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123/ios-apps
Response
json
{
"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.
Request
bash
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 Created
json
{
"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.

Request
bash
curl -H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123/ios-apps/ios_app_111
Response
json
{
"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.
Request
bash
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
Response
json
{
"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.

Request
bash
curl -X DELETE \
-H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123/ios-apps/ios_app_111
Response
json
{
"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).
Request
bash
curl -H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123/android-apps
Response
json
{
"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).
Request
bash
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 Created
json
{
"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.

Request
bash
curl -H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123/android-apps/android_app_222
Response
json
{
"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.
Request
bash
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
Response
json
{
"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.

Request
bash
curl -X DELETE \
-H "Authorization: Bearer ls_live_..." \
https://linksense.net/api/v1/projects/proj_abc123/android-apps/android_app_222
Response
json
{
"data": { "message": "Android app deleted successfully" }
}
API OverviewAuthentication, rate limits, and response format.Dynamic LinksLearn 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
No
Filter links by iOS app UUID.
android_app_idstringNoFilter links by Android app UUID.
No
Title 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.
No
New 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.