• API 레퍼런스

Tracking Link

에어브릿지의 트래킹 링크는 다양한 환경에 대응하는 올인원 링크입니다.

트래킹 링크를 통해 다양한 플랫폼, 채널, 상황에서 링크를 클릭하는 유저를 원하는 목적지에 도달시키며, 링크 클릭, 클릭 후 설치, 설치 후 구매 행동 등 유저들로부터 발생한 행동에 어떤 채널이 기여되었는지 분석할 수 있습니다.

트래킹 링크 API 토큰 활용

클라이언트에서 트래킹 링크를 생성하고자 하는 경우 '트래킹 링크 API 토큰' 활용을 권장합니다.


생성하기

POST

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

트래킹 링크를 생성합니다.

rate limit : 초당 50개로 제한됩니다.

Request

Headers

Accept-Language
string

API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

Content-Type
string

리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

Authorization
string

API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

Body Params

channel
필수string

터치포인트와 컨버젼이 발생한 채널명.

에어브릿지의 채널은 S2S 형태의 포스트백이 연동된 Integrated 채널과 직접 생성할 수 있는 Custom 채널로 나뉘어집니다.

Integrated 채널은 [Integrated Channel] 에서 확인할 수 있습니다. Integrated 채널 이외에 모든 채널은 Custom 채널입니다.

campaignParams
object

트래킹 링크에 들어갈 캠페인 파라미터.

isReengagement
enum

Re-engagement 파라미터.

ENUM VALUES
OFF

해당 트래킹링크에 발생한 터치포인트로 설치 및 인앱 이벤트를 기여합니다.

ON-TRUE

딥링크 오픈 및 그에 기인한 이벤트만 기여됩니다. Re-engagement 캠페인에 활용 가능합니다.

ON-FALSE

설치 이벤트 및 그에 기인한 인앱 이벤트만 기여됩니다. UA 캠페인에 활용 가능합니다.

deeplinkUrl
stringnullable

리다이렉트할 딥링크 URL.

deeplinkUrl이 없거나 null일 경우 deeplink가 설정되지 않습니다.

포멧은 다음과 같습니다 : URLScheme://path?key=value

올바르지 않은 deeplink URL을 사용할 경우, 딥링크가 정상적으로 동작하지 않거나 예상치 못한 동작으로 인해 문제가 발생할 수 있습니다.

deeplinkOption
object

딥링크 옵션

fallbackPaths
object

플랫폼별 리다이렉트 경로.

ogTag
object

트래킹 링크를 공유 혹은 게시하면 노출되는 썸네일의 미리보기(Open Graph).

customShortId
string

Custom 채널의 트래킹 링크 생성 시 축약된 숏 링크 ID. [커스텀 도메인] 설정을 해야 사용할 수 있습니다. 입력하지 않으면 랜덤하게 생성되며, 트래킹 링크 생성 완료 후에는 변경할 수 없습니다.

트래킹 링크를 생성할 때 한 번 사용한 숏 링크 ID는 해당 트래킹 링크를 삭제해도 재사용할 수 없습니다.

허용 문자 및 제한 사항

  • 영문 소문자: a–z

  • 한글: 가-힣

  • 숫자: 0–9

  • 특수문자: 하이픈(-), 언더스코어(_)

  • 최대 길이: 45자

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" }}

Response

200SUCCESS

404ERROR

입력한 필드에 오류가 있거나 해당하는 앱이 없습니다.

422ERROR

필드가 누락되었거나 오류가 있습니다.

429ERROR

rate limit을 초과하였습니다.

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}

트래킹 링크의 세부 정보를 조회합니다.

Request

Headers

Accept-Language
string

API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

Content-Type
string

리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

Authorization
string

API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

Path Params

id
필수string

트래킹 링크 식별자. idType를 활용하면 트래킹 링크 식별자로 트래킹 링크 ID 대신 숏 링크 ID와 트래킹 링크 템플릿 ID를 사용할 수 있습니다. idType을 입력하지 않으면 트래킹 링크 식별자로 트래킹 링크 ID를 사용합니다.

트래킹 링크 ID는 목록 가져오기 API를 통해 확인할 수 있습니다. 숏 링크 ID와 트래킹 링크 템플릿 ID는 에어브릿지 대시보드에서 확인할 수 있습니다.

Query Params

idType
string

트래킹 링크 식별자의 형식. 기본 설정은 id입니다.

  • id: 일반적인 트래킹 링크의 식별자입니다. 목록 가져오기 API를 통해 확인할 수 있습니다.

  • shortId: 숏 링크 ID입니다. 숏 링크는 숏 링크 형식의 트래킹 링크입니다.

  • trackingTemplateId: 트래킹 링크 템플릿의 ID입니다.

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}'

Response

200SUCCESS

400ERROR

입력한 필드에 오류가 있거나 해당하는 리소스가 없습니다.

422ERROR

필드가 누락되었거나 오류가 있습니다.

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

HTTP Method PATCH, PUT 을 지원합니다.

트래킹 링크의 소셜 쉐어 프리뷰를 수정합니다.

Request

Headers

Accept-Language
string

API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

Content-Type
string

리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

Authorization
string

API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

Path Params

id
필수string

트래킹 링크 식별자. idType를 활용하면 트래킹 링크 식별자로 트래킹 링크 ID 대신 숏 링크 ID와 트래킹 링크 템플릿 ID를 사용할 수 있습니다. idType을 입력하지 않으면 트래킹 링크 식별자로 트래킹 링크 ID를 사용합니다.

트래킹 링크 ID는 목록 가져오기 API를 통해 확인할 수 있습니다. 숏 링크 ID와 트래킹 링크 템플릿 ID는 에어브릿지 대시보드에서 확인할 수 있습니다.

Body Params

idType
string

트래킹 링크 식별자의 형식. 기본 설정은 id입니다.

  • id: 일반적인 트래킹 링크의 식별자입니다. 목록 가져오기 API를 통해 확인할 수 있습니다.

  • shortId: 숏 링크 ID입니다. 숏 링크는 숏 링크 형식의 트래킹 링크입니다.

  • trackingTemplateId: 트래킹 링크 템플릿의 ID입니다.

title
필수string

트래킹 링크의 og:title

description
필수string

트래킹 링크의 og:description

imageUrl
필수string

트래킹 링크의 og:image

ogTag.websiteCrawl
enum

fallbackPath에 지정된 url의 Open Graph를 트래킹 링크의 Open Graph로 타입.

ENUM VALUES
desktop

fallbackPath에 지정된 desktop의 Open Graph를 크롤링해서 사용합니다. title, description, imageUrl으로 설정한 값은 무시됩니다.

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"}

Response

200SUCCESS

400ERROR

image URL 이 올바르지 않은 URL 형태를 사용한 경우.

404ERROR

입력한 필드에 오류가 있거나 해당하는 리소스가 없습니다.

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

HTTP Method PATCH, PUT 을 지원합니다.

트래킹 링크의 최종 목적지 및 Fallback 경로를 수정합니다.

Request

Headers

Accept-Language
string

API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

Content-Type
string

리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

Authorization
string

API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

Path Params

id
필수string

트래킹 링크 식별자. idType를 활용하면 트래킹 링크 식별자로 트래킹 링크 ID 대신 숏 링크 ID와 트래킹 링크 템플릿 ID를 사용할 수 있습니다. idType을 입력하지 않으면 트래킹 링크 식별자로 트래킹 링크 ID를 사용합니다.

트래킹 링크 ID는 목록 가져오기 API를 통해 확인할 수 있습니다. 숏 링크 ID와 트래킹 링크 템플릿 ID는 에어브릿지 대시보드에서 확인할 수 있습니다.

Body Params

idType
string

트래킹 링크 식별자의 형식. 기본 설정은 id입니다.

  • id: 일반적인 트래킹 링크의 식별자입니다. 목록 가져오기 API를 통해 확인할 수 있습니다.

  • shortId: 숏 링크 ID입니다. 숏 링크는 숏 링크 형식의 트래킹 링크입니다.

  • trackingTemplateId: 트래킹 링크 템플릿의 ID입니다.

deeplinkUrl
stringnullable

리다이렉트할 딥링크 URL.

deeplinkUrl이 없거나 null일 경우 deeplink가 설정되지 않습니다.

포멧은 다음과 같습니다 : URLScheme://path?key=value

올바르지 않은 deeplink URL을 사용할 경우, 딥링크가 정상적으로 동작하지 않거나 예상치 못한 동작으로 인해 문제가 발생할 수 있습니다.

deeplinkOption
objectnullable

딥링크 옵션

fallbackPaths
object

플랫폼별 리다이렉트 경로.

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 }}

Response

200SUCCESS

404ERROR

입력한 필드에 오류가 있거나 해당하는 리소스가 없습니다.

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

목록 가져오기 v2

GET

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

생성한 트래킹 링크 목록을 조회합니다.

Request

Headers

Accept-Language
string

API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

Content-Type
string

리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

Authorization
string

API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

Query Params

from
필수string

생성한 트래킹 링크 목록을 조회할 기준 시작일.

to
필수string

생성한 트래킹 링크 목록을 조회할 기준 종료일.

next_cursor
numbernullable

다음 트래킹 링크 데이터를 이어서 조회하기 위한 기준 ID.

size
number

가져올 item의 갯수. (최대 1000)

keyword
string

검색 키워드.

channel_name
string

채널 명 필터.

sort_key
enum

정렬 기준 (기본값: createdAt)

ENUM VALUES
createdAt

생성 순 정렬

sort_type
enum

정렬 타입. (기본값: ASC)

ENUM VALUES
DESC

내림차순 정렬.

ASC

오름차순 정렬.

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}'

Response

200SUCCESS

totalCount

  • 타입: number

  • 설명: 응답에 포함된 트래킹 링크의 개수를 나타냅니다. 요청 시 지정한 size 값보다 클 수 없으며, 요청에 size를 지정하지 않은 경우 최대 1,000까지 반환됩니다. 조회 기간 동안 생성된 트래킹 링크가 없는 경우 0이 반환됩니다.

hasNext

  • 타입: boolean

  • 설명: from, to 기간 내에 추가로 조회할 수 있는 트래킹 링크가 존재하는지를 나타냅니다. true는 추가 데이터 있음, false는 더 이상 조회할 데이터 없음을 의미합니다. 일반적으로 nextCursor와 함께 사용됩니다.

nextCursor

  • 타입: number (nullable)

  • 설명: 다음 트래킹 링크를 요청할 때 사용되는 값입니다.

    • 예를 들어, 앱에서 생성된 1,001번째 트래킹 링크 ID가 20002342라면, 첫 요청으로 트래킹 링크 1,000개를 받은 후 응답에 "next_cursor": "20002342"가 포함되어 반환됩니다. 이후 요청에서 이 값을 next_cursor 파라미터로 전달하면, 1,001번째부터 2,000번째까지의 트래킹 링크를 조회할 수 있습니다.

    • 단, ID는 Airbridge에서 생성되는 전체 트래킹 링크를 기준으로 부여되기 때문에, 해당 앱에서 생성한 순서와 일치하지 않거나 연속적이지 않을 수 있습니다. 더 이상 조회할 데이터가 없는 경우 null이 반환됩니다.

400ERROR

입력한 필드가 오류가 있거나 형태가 올바르지 않습니다.

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

생성한 트래킹 링크 목록을 불러옵니다.

Request

Headers

Accept-Language
string

API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.

Content-Type
string

리소스의 미디어 타입을 나타냅니다. 기본값으로 application/json을 사용합니다.

Authorization
string

API 요청에 사용하는 키값입니다. 키값 생성 및 조회 방법을 확인하여 획득할 수 있습니다.

Query Params

from
필수string

생성한 트래킹 링크 목록을 조회할 기준 시작일.

to
필수string

생성한 트래킹 링크 목록을 조회할 기준 종료일.

skip
number

건너뛸 item의 갯수.

size
number

가져올 item의 갯수. (최대 500)

keyword
string

검색 키워드.

channel_name
string

채널 명 필터.

sort_key
enum

정렬 기준 (기본값: createdAt)

ENUM VALUES
createdAt

생성 순 정렬

sort_type
enum

정렬 타입. (기본값: DESC)

ENUM VALUES
DESC

내림차순 정렬.

ASC

오름차순 정렬.

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}'

Response

200SUCCESS

400ERROR

입력한 필드가 오류가 있거나 형태가 올바르지 않습니다.

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"}