adjust-icon

Deep link generator API

Use the Deep link generator API to create short and long deep links for your apps, individually or in bulk. These customized deep links enhance the user experience across various platforms.

Before you begin

Here’s what you need to know before getting started.

Availability

  • You need to be on the TrueLink Core or Enterprise package to get access to the Deep link generator API.
  • Links created using the Deep link generator API aren’t displayed in Campaign Lab.
  • The TTL (time-to-live) for short links created with the Deep link generator API is 120 days.

Requirements

  1. Admin, Editor, or Custom Editor permissions.
  2. Set up the same branded domain for your iOS and Android app.
    • For iOS apps, ensure that you add your branded domain as an Associated Domain. This sets the domain to be configured as a Universal Link.
    • For Android apps, ensure that you define your branded domain as the Android App Link.
  3. You need a valid custom link token to generate deep links:
  4. Update the Adjust SDK to resolve short links.
  5. If you’ve set up data residency, make sure you are using the same region for your iOS and Android apps.

Rate Limiting

To ensure optimal performance and fair usage across all clients, the Deep link generator API enforces the following rate limits:

  1. Per-app limit for short link creation:
    • Up to 50 requests per second for creating short links for a single app.
    • For bulk link creation requests, up to 100 requests per 2 seconds.
  2. Per-account limit for all link creation and update operations:
    • Up to 200 requests per second across all apps within a single account.

If you exceed any of these limits, the API will respond with a 429 Too Many Requests status. After receiving this response, you must wait until the rate limit window resets before retrying your request.

To avoid hitting these limits, especially in high-throughput scenarios, we recommend implementing:

  • Automatic retry logic with an exponential backoff strategy to progressively increase the delay between retries.
  • Global concurrency control to effectively limit the number of concurrent requests, such as:
    • asyncio.Semaphore in Python
    • async-sema in Node.js
    • or Semaphore from java.util.concurrent in Java

Proper rate limit handling is essential for maintaining uninterrupted service access and avoiding throttling.

Authentication

The Deep link generator API uses Bearer tokens for authentication. You MUST include your Adjust API token in an Authorization header with each request you make to the Deep link generator API.

If your organization has enabled Single Sign-On (SSO), contact your Adjust representative or email support@adjust.com for help with finding your API token.

For non-SSO accounts, API tokens are located in a user’s profile. To find your token, follow these steps:

  1. Select the account (user) icon.
  2. Select Account settings.
  3. Select the My profile tab.
  4. Your API Token is shown with your User Details. Select the copy button to copy the token to your system clipboard.

Reset your Adjust API token

You can reset your Adjust API token at any time. Resetting your token invalidates the old token. If you reset your Adjust API token, you MUST replace your old token anywhere that you’re using it. Requests made with an invalidated token are rejected by Adjust.

To reset your Adjust API token:

  1. Select the account (user) icon.
  2. Select Account settings.
  3. Select the My Profile tab.
  4. Your API Token is shown with your User details.
  5. Select Reset API token.
  6. Enter your account password in the modal that appears and select Reset to reset your API token. A confirmation appears in the top right of the screen.
  7. Select the copy button next to the API Token to copy the token to your system clipboard.

Quota and Usage

The Deep link generator API allows generating an unlimited number of long links, while the number of short links is subject to your contract terms.

  • Only unique short links count against your quota. If the same set of parameters is sent multiple times, the quota is only reduced once.
  • Your short link quota is defined in your contract.
  • When the quota is exhausted or the contract expires, the API will automatically fall back to generating long links, regardless of the shorten_url parameter value.

Requesting current quota information

Execute the following request to retrieve your current quota balance. The response reflects your balance in real time.

Endpoint: https://automate.adjust.com/engage/deep-links/quota

Method: GET

Response: Quota Data

Response headers

Most API responses include headers that provide real-time visibility into your short link quota and contract status:

Response Headers
X-ShortLink-Quota-Limit: 100000 # Total short link quota allocated
X-ShortLink-Quota-Remaining: 86129 # Remaining short link generations
X-Contract-Status: active # Current contract status. One of: "active", "inactive". "inactive" is returned when the contract has ended or the contract information is not yet available
X-Contract-End-Date: 2025-12-31 # Contract expiration date
X-Contract-Start-Date: 2024-12-31 # Contract start date

Generate a single deep link

This operation allows you to generate a long or short deep link for a single-platform, multi-platform, or combined app configuration. Use this when you need to create a single deep link dynamically.

API Protocol

Endpoint: https://automate.adjust.com/engage/deep-links

Method: POST

Request body: Link Generation Payload

Response: Deep-Link Object or Error Response

Examples

Single-platform apps

Request - cURL
curl --location 'https://automate.adjust.com/engage/deep-links' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer adjustApiToken' \
--data '{
"link_token": "1c52mluz",
"redirect": "https://example.com/redirect",
"fallback": "https://example.com/fallback",
"deep_link_path": "/custom-path"
}'
Response
{"url": "https://example.go.link/fryYl"}

Multi-platform apps

Request - cURL
curl --location 'https://automate.adjust.com/engage/deep-links' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer adjustApiToken' \
--data '{
"link_token": "2d41nkvy",
"redirect": "https://example.com/redirect",
"fallback": "https://example.com/fallback",
"android_deep_link_path": "/custom-path",
"redirect_macos": "https://www.example.com/redirectmacos"
}'
Response
{ "url": "https://example.go.link/jlbKj" }

Combined links

Request - cURL
curl --location 'https://automate.adjust.com/engage/deep-links' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer adjustApiToken' \
--data '{
"link_token": "1c2n7ybx_1cjet4nl",
"redirect": "https://example.com/redirect",
"fallback": "https://example.com/fallback",
"ios_deep_link_path": "/custom-path-ios",
"android_deep_link_path": "/custom-path-android",
"redirect_macos": "https://www.example.com/redirectmacos"
}'
Response
{"url": "https://example.go.link/6JtQx"}

Generate deep links in bulk

Use this operation to generate multiple deep links in a single request. It supports both long and short links for various app types. Use bulk generation to optimize performance and reduce request overhead when creating up to 100 links at once.

API Protocol

Endpoint: https://automate.adjust.com/engage/deep-links/bulk

Method: POST

Request body:

ParameterData type
data*Array[Link Generation Payload]

Response:

ParameterData type
data*Array[Deep-Link or Error Response]

Example

Request - cURL
curl --location 'https://automate.adjust.com/engage/deep-links/bulk' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer adjustApiToken' \
--data '{
"data": [
{
"link_token": "1doptv0c",
"redirect": "https://example.com/redirect",
"fallback": "https://example.com/fallback",
"campaign": "custom-campaign"
},
{
"link_token": "ERRORDATA"
},
{
"link_token": "1df3xslh_1dsykkaa",
"redirect": "https://example.com/redirect",
"fallback": "https://example.com/fallback",
"ios_deep_link_path": "/custom-path-ios",
"android_deep_link_path": "/custom-path-android"
},
{
"link_token": "1dzwtdjt",
"redirect": "https://example.com/redirect",
"fallback": "https://example.com/fallback",
"android_deep_link_path": "/custom-path"
}
]
}'
Response
{
"data": [
{
"url": "https://example.go.link/4IlkC"
},
{
"error_code": "service_error",
"error_desc": "[ERROR MESSAGE]"
},
{
"url": "https://example.go.link/6KnoE"
},
{
"url": "https://example.go.link/5JmnD"
}
]
}

This operation allows you to retrieve metadata about a previously generated short link, such as its expiration date and redirect parameters. Use this to inspect or verify short link state.

Endpoint: https://automate.adjust.com/engage/deep-links/short-link?short_token={short_token}&app_token={app_token}

Method: GET

Response: Short Token Metadata

Request - cURL
curl --location --request GET 'https://automate.adjust.com/engage/deep-links/short-link?short_token=4IlkC&app_token=zgvhg75bw83k' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer adjustApiToken'
Response
{
"created_at": "2025-03-19T13:31:31Z",
"expires_at": "2025-10-08T17:04:24.201134367Z",
"token": "4IlkC",
"ulink": "example",
"url": "https://example.go.link/?adj_t=1g41cvql_1gb5zq24&adj_fallback=https%3A%2F%2Fexample.com%2Ffallback-1&adj_redirect=https%3A%2F%2Fexample.com%2Fredirect"
}

Use this operation to update the redirect target (long link) of an existing short link. The short link itself remains unchanged.

Endpoint: https://automate.adjust.com/engage/deep-links/{short_token}

Method: PUT

Request body: Link Generation Payload

Response: HTTP 204 No Content on success

Request - cURL
curl --location --request PUT 'https://automate.adjust.com/engage/deep-links/4IlkC' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer adjustApiToken' \
--data '{
"link_token": "1doptv0c",
"redirect": "https://example.com/new-redirect",
"fallback": "https://example.com/new-fallback",
"deep_link_path": "/new-custom-path"
}'
Response
204 No Content

Data Models

ParameterData typeDescription
link_token*StringThe link token from your custom link. Can be a single token, or multiple tokens combined in the form: linkTokenA_linkTokenB.
shorten_urlBooleanIndicates whether the link should be shortened. Default is true.
short_tokenStringA custom short token. Use this parameter to generate a short link with a predefined value. For example, if you pass campaign2026, the resulting link will be example.go.link/campaign2026. The token must be unique within one branded domain.
campaignStringThe custom name of the campaign. Use this parameter to override value from the Custom Link.
adgroupStringThe custom name of the adgroup. Use this parameter to override value from the Custom Link.
creativeStringThe custom name of the creative. Use this parameter to override value from the Custom Link.
deep_link_pathStringSpecifies the in-app destination users are taken to. Use this for single-platform apps.
ios_deep_link_pathStringSpecifies the iOS in-app destination your users are taken to. Use this for multi-platform iOS apps or combined links.
android_deep_link_pathStringSpecifies the Android in-app destination your users are taken to. Use this for multi-platform Android apps or combined links.
fallbackStringLanding page for off-platform users. When you specify a fallback URL, we recommend also specifying redirect_macos and redirect_windows.
redirectStringRedirect URL to override Adjust’s default redirect.
redirect_iosStringRedirect URL that overrides Adjust’s default redirect for iOS apps only. Use this for multi-platform iOS apps or combined links.
redirect_androidStringRedirect URL that overrides Adjust’s default redirect for Android apps only. Use this for multi-platform Android apps or combined links.
redirect_macosStringRedirect URL to override Adjust’s default redirect for macOS. When you specify the fallback, it’s recommended to specify this parameter for macOS users.
redirect_windowsStringRedirect URL to override Adjust’s default redirect for Windows. When you specify the fallback, it’s recommended to specify this parameter for Windows users.
labelStringAdds custom data to the link. Use this parameter to add a unique user referral ID that’s autopopulated when a user shares a short link from your app.
og_titleStringTitle of the social sharing preview of the link.
og_descriptionStringDescription of the social sharing preview of the link.
og_imageStringURL to a JPG or PNG image of at least 200 x 200 pixels size for the social sharing preview of the link.
ParameterData typeDescription
url*StringFinal link: short or long
long_url*StringCorresponding long link

Short Token Metadata

ParameterData typeDescription
created_at*StringISO datetime object
expires_at*StringISO datetime object of the short link expiration date
updated_atStringISO datetime object of the last link update
token*StringToken
ulink*StringBranded domain
url*StringFull long link

Quota Data

ParameterData typeDescription
limit*IntegerTotal short link quota allocated
remaining*IntegerRemaining short link generations
contract_status*StringCurrent contract status. One of: “active”, “inactive”. “inactive” is returned when the contract has ended or the contract information is not yet available.
contract_start_dateStringISO date object. Contract start date.
contract_end_dateStringISO date object. Contract expiration date.

Error Response

ParameterData typeDescription
error_code*StringError code: request_error, auth_error, validation_error, service_error
error_desc*StringHuman-readable error description
error_desc_detailsArrayAdditional metadata