> ## Documentation Index
> Fetch the complete documentation index at: https://help.airbridge.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 생성하기

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

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

<div id="트래킹-링크-api-토큰-활용" />

<Info>
  **트래킹 링크 API 토큰 활용**

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

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

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

<Card title="Try API Request" icon="rectangle-api" horizontal href="https://www.postman.com/airbridge-engineering/workspace/airbridge-api/request/22395869-458bb729-0a82-4b12-b2de-60f05c66c919" />

```text POST theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
https://api.airbridge.io/v1/tracking-links
```

<h2 id="생성하기-request">
  Request
</h2>

***

<h3 id="생성하기-headers">
  Headers
</h3>

<ParamField header="Accept-Language" type="string">
  API 요청 및 결과 반환에 사용할 언어를 지정할 수 있습니다. ISO-639-1 포맷을 따릅니다.
</ParamField>

<ParamField header="Content-Type" type="string">
  리소스의 미디어 타입을 나타냅니다. 기본값으로 `application/json`을 사용합니다.
</ParamField>

<ParamField header="Authorization" type="string">
  API 요청에 사용하는 키값입니다. [키값 생성 및 조회 방법](/ko/references/introduction)을 확인하여 획득할 수 있습니다.
</ParamField>

<h3 id="생성하기-body-params">
  Body Params
</h3>

<ParamField body="channel" type="string" required>
  터치포인트와 컨버젼이 발생한 채널명.

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

  Integrated 채널은 [\[Integrated Channel\]](https://abit.ly/integrated-channels) 에서 확인할 수 있습니다. Integrated 채널 이외에 모든 채널은 Custom 채널입니다.
</ParamField>

<ParamField body="campaignParams" type="object">
  트래킹 링크에 들어갈 캠페인 파라미터.

  <Expandable title="하위 변수">
    <ParamField body="campaignParams.campaign" type="string">
      캠페인 이름.
    </ParamField>

    <ParamField body="campaignParams.ad_group" type="string">
      광고 그룹.
    </ParamField>

    <ParamField body="campaignParams.ad_creative" type="string">
      광고 소재.
    </ParamField>

    <ParamField body="campaignParams.content" type="string">
      광고 콘텐츠.
    </ParamField>

    <ParamField body="campaignParams.term" type="string">
      검색 광고 키워드.
    </ParamField>

    <ParamField body="campaignParams.sub_id" type="string">
      하위 네트워크 혹은 제휴 매체사 등을 나타내는 아이디.
    </ParamField>

    <ParamField body="campaignParams.sub_id_1" type="string">
      하위 네트워크 또다른 하위 네트워크 아이디.(sub-sub publisher)
      하위 매체 순서(계층)에 맞게 사용해야합니다.(sub\_id\_1 > sub\_id\_2 > sub\_id\_3)
    </ParamField>

    <ParamField body="campaignParams.sub_id_2" type="string">
      하위 네트워크 또다른 하위 네트워크 아이디.(sub-sub publisher)
      하위 매체 순서(계층)에 맞게 사용해야합니다.(sub\_id\_1 > sub\_id\_2 > sub\_id\_3)
    </ParamField>

    <ParamField body="campaignParams.sub_id_3" type="string">
      하위 네트워크 또다른 하위 네트워크 아이디.(sub-sub publisher)
      하위 매체 순서(계층)에 맞게 사용해야합니다.(sub\_id\_1 > sub\_id\_2 > sub\_id\_3)
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="isReengagement" type="enum">
  Re-engagement 파라미터.

  | 벨류         | 설명                                                       |
  | ---------- | -------------------------------------------------------- |
  | `OFF`      | 해당 트래킹링크에 발생한 터치포인트로 설치 및 인앱 이벤트를 기여합니다.                 |
  | `ON-TRUE`  | 딥링크 오픈 및 그에 기인한 이벤트만 기여됩니다. Re-engagement 캠페인에 활용 가능합니다. |
  | `ON-FALSE` | 설치 이벤트 및 그에 기인한 인앱 이벤트만 기여됩니다. UA 캠페인에 활용 가능합니다.         |
</ParamField>

<ParamField body="deeplinkUrl" type="string">
  리다이렉트할 딥링크 URL.

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

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

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

<ParamField body="deeplinkOption" type="object">
  딥링크 옵션

  <Expandable title="하위 변수">
    <ParamField body="deeplinkOption.showAlertForInitialDeeplinkingIssue" type="boolean">
      스탑 오버 페이지

      true : 활성화

      false : 비활성화
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="fallbackPaths" type="object">
  플랫폼별 리다이렉트 경로.

  <Expandable title="하위 변수">
    <ParamField body="fallbackPaths.android" type="enum">
      안드로이드가 리다이렉트될 경로.

      | 벨류            | 설명                        |
      | ------------- | ------------------------- |
      | `google-play` | google play store로 랜딩합니다. |
      | `{HTTP_URL}`  | 설정한 url로 랜딩합니다.           |
    </ParamField>

    <ParamField body="fallbackPaths.ios" type="enum">
      iOS에서 리다이렉트될 경로.

      | 벨류                | 설명               |
      | ----------------- | ---------------- |
      | `itunes-appstore` | appstore로 랜딩합니다. |
      | `{HTTP_URL}`      | 설정한 url로 랜딩합니다.  |
    </ParamField>

    <ParamField body="fallbackPaths.desktop" type="enum">
      데스크톱에서 리다이렉트될 경로.

      | 벨류                | 설명                        |
      | ----------------- | ------------------------- |
      | `google-play`     | google play store로 랜딩합니다. |
      | `itunes-appstore` | appstore로 랜딩합니다.          |
      | `airpage`         | airpage로 랜딩합니다.           |
      | `{HTTP_URL}`      | 설정한 url로 랜딩합니다.           |
    </ParamField>

    <ParamField body="fallbackPaths.option" type="object">
      <Expandable title="하위 변수">
        <ParamField body="fallbackPaths.option.iosCustomProductPageId" type="string">
          애플 앱 스토어의 맞춤형 제품 페이지(Custom Product Page)의 ppid.

          앱 스토어로 랜딩할 경우 맞춤형 제품 페이지를 보여줄 수 있도록 설정합니다.
        </ParamField>

        <ParamField body="fallbackPaths.option.googlePlayCustomStoreListing" type="string">
          구글 플레이 스토어의 맞춤 스토어 등록정보(Custom Store Listing) listing 값.

          구글 플레이 스토어로 랜딩할 경우 맞춤 스토어 등록정보를 보여줄 수 있도록 설정합니다.
        </ParamField>
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="ogTag" type="object">
  트래킹 링크를 공유 혹은 게시하면 노출되는 썸네일의 미리보기(Open Graph).

  <Expandable title="하위 변수">
    <ParamField body="ogTag.title" type="string">
      트래킹 링크의 `og:title`
    </ParamField>

    <ParamField body="ogTag.description" type="string">
      트래킹 링크의 `og:description`
    </ParamField>

    <ParamField body="ogTag.imageUrl" type="string">
      트래킹 링크의 `og:image`
    </ParamField>

    <ParamField body="ogTag.websiteCrawl" type="enum">
      `fallbackPath`에 지정된 url의 Open Graph를 트래킹 링크의 Open Graph로 타입.

      | 벨류        | 설명                                                                                                                                                                                                                        |
      | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
      | `desktop` | 트래킹 링크가 소셜 미디어에 공유될 때 소셜 미디어가 fallbackPaths에 지정된 desktop URL의 Open Graph 태그를 직접 크롤링해 소셜 쉐어 프리뷰에 사용합니다. 동적(Dynamic) URL도 지원하며, Open Graph 태그의 변경 사항은 다음 공유 시점부터 자동으로 반영됩니다. 이때 title, description, imageUrl로 설정한 값은 무시됩니다. |
    </ParamField>

    <ParamField body="ogTag.useDefault" type="boolean">
      Airbridge 대시보드에서 설정한 소셜쉐어 프리뷰 기본 값을 사용하도록 설정 합니다.

      주의. og tag 의 다른 파라미터 값들은 무시됩니다.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="customShortId" type="string">
  Custom 채널의 트래킹 링크 생성 시 축약된 숏 링크 ID. [\[커스텀 도메인\]](/ko/guides/custom-domain) 설정을 해야 사용할 수 있습니다. 입력하지 않으면 랜덤하게 생성되며, 트래킹 링크 생성 완료 후에는 변경할 수 없습니다.

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

  **허용 문자 및 제한 사항**

  * 영문 소문자: `a–z`
  * 한글: `가-힣`
  * 숫자: `0–9`
  * 특수문자: 하이픈(`-`), 언더스코어(`_`)
  * 최대 길이: 45자
</ParamField>

<RequestExample>
  ```shellscript Request theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  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"
    }
  }'
  ```
</RequestExample>

<h2 id="생성하기-response">
  Response
</h2>

***

### 200

| 파라미터                                  | 설명                    |
| ------------------------------------- | --------------------- |
| trackingLink.id                       | 트래킹 링크의 ID            |
| trackingLink.channelType              | 트래킹 링크의 채널 타입         |
| trackingLink.link.impression          | 조회 이벤트를 발생시키는 트래킹 링크  |
| trackingLink.link.click               | 클릭 이벤트를 발생시키는 트래킹 링크  |
| trackingLink.link.serverToServerClick | S2S 이벤트를 발생시키는 트래킹 링크 |
| trackingLink.shortId                  | 단축 URL의 ID            |
| trackingLink.shortUrl                 | 단축 URL                |
| trackingLink.trackingTemplateId       | 트래킹 링크의 템플릿 ID        |

### 404

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

### 422

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

### 429

rate limit을 초과하였습니다.

<ResponseExample>
  ```json 200 theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  {
    "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"
      }
    }
  }
  ```

  ```json 404 theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  {
    "type": "about:blank",
    "title": "Not Found",
    "detail": "There is no such app.",
    "status": 404,
    "traceId": "1-000000-000000000000000"
  }
  ```

  ```json 422 theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  {
    "detail": [
      {
        "loc": [
          "string"
        ],
        "msg": "string",
        "type": "string"
      }
    ]
  }
  ```

  ```json 429 theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  {
    "type": "Rate limit exceeded",
    "title": null,
    "status": 429,
    "traceId": "1-6768fb4d-0833f0c4639017b1613ac244"
  }
  ```
</ResponseExample>
