• API Reference

Tracking Link

An Airbridge tracking link is an all-in-one link that serves as both a linking tool to redirect users and a tracking tool for attribution.

When they are clicked on, tracking links enable users to reach their desired destination in the app regardless of the platform, channel, or device operating system. It also helps to analyze and attribute the source of user conversions such as link click, post-click install, and post-install purchase.

It is advised to use the "Tracking link API token" when creating tracking links from the client server.


POST

https://api.airbridge.io/v1/tracking-links

Request to create Tracking Link.

rate limit : 50 tracking link per second

Accept-Language
string

You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

Content-Type
string

Represents the media type of the resource. Defaults to application/json.

Authorization
string

The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

channel
Requiredstring

Channel name of the touchpoint and conversion.

Upon creation, tracking links are separated into "integrated" channels and "custom" channels.

"Integrated" channels are medias with postback integration, and have predefined channel names. All other channel names are considered "Custom" channels.

campaignParams
object

Configure campaign parameter for tracking link.

isReengagement
enum

Configure the Re-engagement parameter. The Re-engagement parameter has three options: OFF, ON-TRUE, and ON-FALSE.

ENUM VALUES
OFF

OFF is the default setting. The touchpoint can be attributed to both install events and post-install events (in-app events).

ON-TRUE

ON-TRUE is used for re-engagement campaigns for installed users. The touchpoint generated by the tracking link is attributed only to the deeplink open and the following in-app events, not to the install event.

ON-FALSE

ON-FALSE is used for user acquisition campaigns targeting uninstalled users. The touchpoint generated by the tracking link is attributed only to the install event and the following in-app events, not to the 'deeplink open' event.

deeplinkUrl
stringnullable

Configure the Deeplink URL for redirect.

If deeplinkUrl is missing or null, the deeplink setting is not configured.

Example format: URLScheme://path?key=value

If an invalid deeplinkUrl is used, the deep link may not work properly and could result in unexpected behavior or issues.

deeplinkOption
object
fallbackPaths
object

Configure the redirect path by platform when deep linking doesn't redirect as intended.

ogTag
object

Configure the Open Graph for the tracking link that will be shown when the link is shared or posted.

customShortId
string

Configure the Short Link ID of tracking links depending on your campaign or contents. If not passed, a random Short Link ID will be generate, and can not be changed once generated.

The Short Link ID of a tracking link cannot be reused even if the tracking link has been deprecated.

Allowed Characters & Restrictions

  • Lowercase English letters: a–z

  • Korean characters (Hangul): 가–힣

  • Numbers: 0–9

  • Special characters: hyphen (-), underscore (_)

  • Maximum length: 45 characters

Request
curl -X POST 'https://api.airbridge.io/v1/tracking-links' \ -H 'Accept-Language: ko' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}' \ -d '{"channel":"my-channel","campaignParams":{"campaign":"2022_FW_Sale_Festival","ad_group":"UA","ad_creative":"Coat_840x600"},"isReengagement":"ON-TRUE","deeplinkOption":{"showAlertForInitialDeeplinkingIssue":true},"fallbackPaths":{"option":{"iosCustomProductPageId":"5ae82ffe-1f08-428d-b352-ac1c3a22aa1e","googlePlayCustomStoreListing":"custom-store-listing"}},"ogTag":{"title":"30% Off Winter Apparel for 3 Days Only","description":"Get great deals on apparel to keep you warm this winter","imageUrl":"https://static.airbridge.io/images/2021_airbridge_og_tag.png"}}'
Payload
{ "channel": "my-channel", "campaignParams": { "campaign": "2022_FW_Sale_Festival", "ad_group": "UA", "ad_creative": "Coat_840x600" }, "isReengagement": "ON-TRUE", "deeplinkOption": { "showAlertForInitialDeeplinkingIssue": true }, "fallbackPaths": { "option": { "iosCustomProductPageId": "5ae82ffe-1f08-428d-b352-ac1c3a22aa1e", "googlePlayCustomStoreListing": "custom-store-listing" } }, "ogTag": { "title": "30% Off Winter Apparel for 3 Days Only", "description": "Get great deals on apparel to keep you warm this winter", "imageUrl": "https://static.airbridge.io/images/2021_airbridge_og_tag.png" }}

200SUCCESS

Tracking Link was successfully created.

404ERROR

There is no such app. Please check the request token again.

422ERROR

There are some invalid values in request.

429ERROR

rate limit exceeded

Response
{ "data": { "trackingLink": { "id": 10000, "link": { "click": "http://abr.ge/@airbridge/my-channel?...", "impression": "http://abr.ge/@airbridge/my-channel?...", "serverToServerClick": null }, "shortId": "6nwx4w", "shortUrl": "http://abr.ge/6nwx4w", "channelType": "custom", "trackingTemplateId": "706f9839a7b50d87ab917dbb1b9fa7f3" } }}
Response
{ "type": "about:blank", "title": "Not Found", "detail": "There is no such app.", "status": 404, "traceId": "1-000000-000000000000000"}
Response
{ "detail": [ { "loc": [ "string" ], "msg": "string", "type": "string" } ]}
Response
{ "type": "Rate limit exceeded", "title": null, "status": 429, "traceId": "1-6768fb4d-0833f0c4639017b1613ac244"}

GET

https://api.airbridge.io/v1/tracking-links/{id}

Get the details of a tracking link.

Accept-Language
string

You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

Content-Type
string

Represents the media type of the resource. Defaults to application/json.

Authorization
string

The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

id
Requiredstring

The ID of the Tracking Link.

idType
string

The format of the tracking link identifier. The default setting is id

- id: The identifier of a generic tracking link. It can be obtained via the list get API.
- shortId: Short link ID. A short link is a tracking link in short link format.
- trackingTemplateId: ID of the tracking link template.

Request
curl -X GET 'https://api.airbridge.io/v1/tracking-links/10000?idType=id' \ -H 'Accept-Language: ko' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}'

200SUCCESS

400ERROR

There is an error in the field provided, or there is no such resource.

422ERROR

A field is missing or has an error.

Response
{ "data": { "link": { "click": "https://go.ab180.co/@ablog/my-channel?...", "impression": null, "serverToServerClick": null }, "email": "contact@ab180.co", "ogTag": { "title": "AB180", "imageUrl": "http://static.airbridge.io/images/og_tags/50ca2e8d-07b2-4a0e-8294-f00ddb8e59ae.png", "description": "Discovering Metrics That Matter!" }, "company": null, "shortId": "ri4lnp", "shortUrl": "https://go.ab180.co/ri4lnp", "createdAt": "2023-01-01T00:00:00+09:00", "channelName": "my-channel", "channelType": "custom", "deeplinkUrl": null, "deeplinkOption": { "showAlertForInitialDeeplinkingIssue": false }, "fallbackPaths": { "ios": "itunes-appstore", "option": { "iosCustomProductPageId": null }, "android": "google-play", "desktop": "https://airbridge.io" }, "campaignParams": { "campaign": "123", "adCreative": "asdf", "adGroup": "zxcv", "content": null, "term": "poiu", "subId": null, "subId1": null, "subId2": null, "subId3": null }, "isReengagement": "OFF" }}
Response
{ "type": "about:blank", "title": "Not Found", "detail": "Resource not found.", "status": 404, "traceId": "1-6450a21d-2b02e4d533589b625d875399"}
Response
{ "detail": [ { "loc": [ "string" ], "msg": "string", "type": "string" } ]}

PATCH

https://api.airbridge.io/v1/tracking-links/{id}/og-tag

Supported HTTP Methods: PUT, PATCH

Update the Open Graph of the tracking link.

Accept-Language
string

You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

Content-Type
string

Represents the media type of the resource. Defaults to application/json.

Authorization
string

The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

id
Requiredstring

The ID of the Tracking Link.

idType
string

The format of the tracking link identifier. The default setting is id

- id: The identifier of a generic tracking link. It can be obtained via the list get API.
- shortId: Short link ID. A short link is a tracking link in short link format.
- trackingTemplateId: ID of the tracking link template.

title
Requiredstring

og.description of the tracking link

description
Requiredstring

og:image of the tracking link

imageUrl
Requiredstring
ogTag.websiteCrawl
enum

og:image for tracking link

ENUM VALUES
desktop

The Open Graph of the desktop fallbackPath is crawled and used. The values set for title, description, and imageUrl will be ignored.

Request
curl -X PATCH 'https://api.airbridge.io/v1/tracking-links/10000/og-tag' \ -H 'Accept-Language: ko' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}' \ -d '{"idType":"id","title":"30% Off Winter Apparel for 3 Days Only","description":"Get great deals on apparel to keep you warm this winter","imageUrl":"https://static.airbridge.io/images/2021_airbridge_og_tag.png"}'
Payload
{ "idType": "id", "title": "30% Off Winter Apparel for 3 Days Only", "description": "Get great deals on apparel to keep you warm this winter", "imageUrl": "https://static.airbridge.io/images/2021_airbridge_og_tag.png"}

200SUCCESS

400ERROR

The image URL used an incorrect URL type.

404ERROR

There is an error in the field provided, or there is no such resource.

Response
{}
Response
{ "instance": [ { "loc": [ "imageUrl" ], "msg": "Invalid URL", "type": "validation_error" } ], "detail": "invalid_request", "status": 400, "title": "Bad Request", "traceId": "1-67c6a5e8-1f93748e2c8c732e71767b98", "type": "about:blank"}
Response
{ "type": "about:blank", "title": "Not Found", "detail": "Resource not found.", "status": 404, "traceId": "1-6450a21d-2b02e4d533589b625d875399"}

PATCH

https://api.airbridge.io/v1/tracking-links/{id}/routing

Supported HTTP Methods: PUT, PATCH

Update the destination and fallback path for the Tracking Link.

Accept-Language
string

You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

Content-Type
string

Represents the media type of the resource. Defaults to application/json.

Authorization
string

The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

id
Requiredstring

The ID of the Tracking Link.

idType
string

The format of the tracking link identifier. The default setting is id

- id: The identifier of a generic tracking link. It can be obtained via the list get API.
- shortId: Short link ID. A short link is a tracking link in short link format.
- trackingTemplateId: ID of the tracking link template.

deeplinkUrl
stringnullable

Configure the Deeplink URL for redirect.

If deeplinkUrl is missing or null, the deeplink setting is not configured.

Example format: URLScheme://path?key=value

If an invalid deeplinkUrl is used, the deep link may not work properly and could result in unexpected behavior or issues.

deeplinkOption
objectnullable
fallbackPaths
object

Configure the redirect path by platform when deep linking doesn't redirect as intended.

Request
curl -X PATCH 'https://api.airbridge.io/v1/tracking-links/10000/routing' \ -H 'Accept-Language: ko' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}' \ -d '{"idType":"id","deeplinkOption":{"showAlertForInitialDeeplinkingIssue":true}}'
Payload
{ "idType": "id", "deeplinkOption": { "showAlertForInitialDeeplinkingIssue": true }}

200SUCCESS

404ERROR

There is an error in the field provided, or there is no such resource.

Response
{}
Response
{ "type": "about:blank", "title": "Not Found", "detail": "Resource not found.", "status": 404, "traceId": "1-6450a21d-2b02e4d533589b625d875399"}

GET

https://api.airbridge.io/v2/tracking-links

Retrieves a list of generated tracking links.

Accept-Language
string

You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

Content-Type
string

Represents the media type of the resource. Defaults to application/json.

Authorization
string

The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

from
Requiredstring

The start date for tracking link list query.

to
Requiredstring

The end date for tracking list query.

next_cursor
numbernullable

A cursor used to retrieve the next page of data

size
number

The number of items to retrieve.

Note that up to 1000 can be set.

keyword
string

The keyword to search for.

channel_name
string

Filter channel.

sort_key
enum

Sort standard. The default is createdAt

ENUM VALUES
createdAt

Sort by created at.

sort_type
enum

Sort by. (Default: ASC)

ENUM VALUES
DESC

Descending.

ASC

Ascending.

Request
curl -X GET 'https://api.airbridge.io/v2/tracking-links?from=2023-04-01&to=2023-04-02&next_cursor=123456789&size=10&sort_key=createdAt&sort_type=ASC' \ -H 'Accept-Language: ko' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}'

200SUCCESS

nextCursor

  • Type: number (nullable)

  • Description: A cursor used to retrieve the next page of data. Pass the returned nextCursor value as the next_cursor parameter in the next API request to continue fetching data. If there is no more data available, null will be returned.

hasNext

  • Type: boolean

  • Description: Indicates whether additional data is available for the next page. Returns true if more data exists, false if no additional data can be retrieved. Typically used in conjunction with nextCursor.

400ERROR

The field contains an error or is incorrectly formatted.

Response
{ "data": { "hasNext": true, "nextCursor": 55843942, "totalCount": 2, "trackingLinks": [ { "id": 55835049, "link": { "click": "https://abr.ge/@app_name/channel?og_tag_id=123&routing_short_id=id&tracking_template_id=template&ad_type=click", "impression": null, "serverToServerClick": null }, "email": "user@ab180.co", "ogTag": { "title": "AB180", "imageUrl": "http://static.airbridge.io/images/og_tags/50ca2e8d-07b2-4a0e-8294-f00ddb8e59ae.png", "description": "Discovering Metrics That Matter!" }, "company": null, "shortId": "short_id", "shortUrl": "https://abr.ge/short_id", "createdAt": "2024-02-26T19:35:02+09:00", "channelName": "channel", "channelType": "custom", "deeplinkUrl": "scheme://", "fallbackPaths": { "ios": "https://airbridge.io", "option": { "iosCustomProductPageId": null, "googlePlayCustomStoreListing": null }, "android": "https://airbridge.io", "desktop": "https://airbridge.io" }, "campaignParams": { "term": null, "subId": null, "subId1": null, "subId2": null, "subId3": null, "adGroup": null, "content": null, "campaign": null, "adCreative": null }, "deeplinkOption": { "showAlertForInitialDeeplinkingIssue": false }, "isReengagement": "OFF" }, { "id": 55835585, "link": { "click": "https://abr.ge/@app_name/test?campaign=test&routing_short_id=short&tracking_template_id=template&ad_type=click", "impression": null, "serverToServerClick": null }, "email": "user@ab180.co", "ogTag": { "title": "AB180", "imageUrl": "http://static.airbridge.io/images/og_tags/50ca2e8d-07b2-4a0e-8294-f00ddb8e59ae.png", "description": "Discovering Metrics That Matter!" }, "company": null, "shortId": "short_id2", "shortUrl": "https://abr.ge/short_id2", "createdAt": "2024-02-26T19:40:44+09:00", "channelName": "channel", "channelType": "custom", "deeplinkUrl": null, "fallbackPaths": { "ios": "itunes-appstore", "option": { "iosCustomProductPageId": null, "googlePlayCustomStoreListing": null }, "android": "google-play", "desktop": "https://airbridge.io" }, "campaignParams": { "term": null, "subId": null, "subId1": null, "subId2": null, "subId3": null, "adGroup": null, "content": null, "campaign": "test", "adCreative": null }, "deeplinkOption": { "showAlertForInitialDeeplinkingIssue": false }, "isReengagement": "OFF" } ] }, "resultMessage": "Here is your result."}
Response
{ "instance": [ { "loc": [ "size" ], "msg": "must be less than or equal to 1000", "type": "validation_error" } ], "detail": "invalid_request", "status": 400, "title": "Bad Request", "traceId": "1-68513579-369f49243aa5430b228cfa8a", "type": "about:blank"}

GET

https://api.airbridge.io/v1/tracking-links

Get a list of the Tracking Links.

Accept-Language
string

You can specify the language to use for API requests and responses. It follows the ISO-639-1 format.

Content-Type
string

Represents the media type of the resource. Defaults to application/json.

Authorization
string

The key value to use for API requests. Instructions for getting API keys are in "how to generate API Keys".

from
Requiredstring

The start date for tracking link list query.

to
Requiredstring

The end date for tracking list query.

skip
number

The number of items to skip.

size
number

The number of items to retrieve.

Note that up to 500 can be set.

keyword
string

The keyword to search for.

channel_name
string

Filter channel.

sort_key
enum

Sort standard. The default is createdAt

ENUM VALUES
createdAt

Sort by created at.

sort_type
enum

Sort by. (Default: DESC)

ENUM VALUES
DESC

Descending.

ASC

Ascending.

Request
curl -X GET 'https://api.airbridge.io/v1/tracking-links?from=2023-04-01&to=2023-04-02&skip=0&size=10&sort_key=createdAt&sort_type=DESC' \ -H 'Accept-Language: ko' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {AIRBRIDGE-API-TOKEN}'

200SUCCESS

400ERROR

The field contains an error or is incorrectly formatted.

Response
{ "data": { "totalCount": 2, "trackingLinks": [ { "id": 10001 }, { "id": 10002 } ] }}
Response
{ "instance": [ { "loc": [ "size" ], "msg": "must be less than or equal to 1000", "type": "validation_error" } ], "detail": "invalid_request", "status": 400, "title": "Bad Request", "traceId": "1-68513579-369f49243aa5430b228cfa8a", "type": "about:blank"}