링크 프로젝트 API 레퍼런스
이벤트 단위로 단축 URL·캠페인 링크를 묶고 합산 통계를 봅니다 (7개 엔드포인트)
참고인증·요금제
모든 Service API 요청에는 X-API-KEY 헤더를 포함해야 합니다.
프로젝트를 만들고 이름을 바꾸고 링크를 넣는 것은 PRO 이상 요금제에서 쓸 수 있습니다.
조회와 빼기는 요금제 제한이 없습니다. 공통 규칙은 API 개요를 참고하세요.
개념프로젝트와 링크
링크(단축 URL·캠페인) 하나는 프로젝트 하나에만 속합니다. 다른 프로젝트에 있던 링크를 넣으면 옮겨집니다.
프로젝트를 지워도 링크는 지워지지 않습니다(프로젝트 삭제는 콘솔에서만 할 수 있습니다).
링크를 만들면서 바로 묶으려면 URL 생성·캠페인 생성에
projectId 를 넘기세요.
GET /api/v1/service/link-projects
프로젝트 목록을 만든 순서 최근부터 조회합니다.
Query Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| search | String | 이름 검색 (부분 일치) | |
| page | Integer | 페이지 번호 (0부터, 기본: 0) | |
| size | Integer | 페이지 크기 (기본: 20, 최대: 50) |
Response
content[] 의 각 항목은 아래와 같고, page·size·totalElements·totalPages 가 함께 옵니다.
| 필드 | 타입 | 설명 |
|---|---|---|
| id | Long | 프로젝트 ID |
| name | String | 이름 (조직 안에서 중복 불가, 최대 50자) |
| description | String | 설명 (최대 200자, 없으면 null) |
| createdAt | String | 만든 시각 (조직 시간대) |
| urlCount | Long | 속한 단축 URL 수 (지웠거나 삭제 요청 중인 링크 제외) |
| campaignCount | Long | 속한 캠페인 수 |
POST /api/v1/service/link-projects
프로젝트를 만듭니다 (PRO 이상). 성공하면 201 과 프로젝트를 돌려줍니다.
Request Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| name | String | O | 이름 (최대 50자, 조직 안에서 중복 불가 — 겹치면 409) |
| description | String | 설명 (최대 200자) |
Example
JSON
{
"name": "10월 가을 이벤트",
"description": "인스타·카카오·문자 링크"
}
GET /api/v1/service/link-projects/{id}
프로젝트 한 건과 링크 수를 조회합니다. 속한 링크 목록은 URL·캠페인 목록 API 에 projectId 를 넘겨 조회합니다.
Response
| 필드 | 타입 | 설명 |
|---|---|---|
| id | Long | 프로젝트 ID |
| name | String | 이름 (조직 안에서 중복 불가, 최대 50자) |
| description | String | 설명 (최대 200자, 없으면 null) |
| createdAt | String | 만든 시각 (조직 시간대) |
| urlCount | Long | 속한 단축 URL 수 (지웠거나 삭제 요청 중인 링크 제외) |
| campaignCount | Long | 속한 캠페인 수 |
PUT /api/v1/service/link-projects/{id}
이름·설명을 바꿉니다 (PRO 이상). 이름은 필수이고, 설명을 비우면 지워집니다.
Request Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| name | String | O | 새 이름 |
| description | String | 설명 |
POST /api/v1/service/link-projects/{id}/items
이미 있는 링크를 프로젝트에 넣습니다 (PRO 이상). 다른 프로젝트에 있던 링크는 이 프로젝트로 옮겨집니다. 하나라도 이 조직 링크가 아니거나 없는 ID 면 전부 거부합니다(404).
Request Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| urlIds | Long[] | 단축 URL ID 목록 (최대 500개) | |
| campaignIds | Long[] | 캠페인 ID 목록 (최대 500개) |
Example
JSON
{
"urlIds": [101, 102],
"campaignIds": [55]
}
Response
| 필드 | 타입 | 설명 |
|---|---|---|
| projectId | Long | 프로젝트 ID |
| addedUrls | Integer | 넣은 URL 수 |
| addedCampaigns | Integer | 넣은 캠페인 수 |
POST /api/v1/service/link-projects/{id}/items/remove
이 프로젝트에서 링크를 뺍니다. 요금제 제한이 없습니다. 다른 프로젝트에 속한 링크는 건드리지 않습니다.
Request Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| urlIds | Long[] | 단축 URL ID 목록 (최대 500개) | |
| campaignIds | Long[] | 캠페인 ID 목록 (최대 500개) |
Response
| 필드 | 타입 | 설명 |
|---|---|---|
| projectId | Long | 프로젝트 ID |
| removedUrls | Integer | 뺀 URL 수 |
| removedCampaigns | Integer | 뺀 캠페인 수 |
GET /api/v1/service/link-projects/{id}/stats
합산 통계를 조회합니다. 링크별 수의 합계이며, 여러 링크를 누른 같은 사람은 링크마다 따로 셉니다(순방문자는 제공하지 않습니다). 날짜는 조직 시간대 기준입니다.
Query Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| startDate | String | 시작일 yyyy-MM-dd (기본: 최근 30일) | |
| endDate | String | 종료일 yyyy-MM-dd (기본: 오늘, 미래는 오늘로) | |
| linkPage | Integer | 링크별 표 페이지 (0부터, 20개씩) |
Response
| 필드 | 타입 | 설명 |
|---|---|---|
| startDate · endDate | String | 실제로 조회한 기간 — 요금제 조회 기간·보관 기간(180일) 안으로 조정됩니다 |
| periodAdjusted | Boolean | 요청한 기간이 조정됐으면 true |
| timezone | String | 날짜를 나눈 조직 시간대 (예: Asia/Seoul) |
| countsUrls · countsCampaigns | Boolean | API 키 계정이 볼 수 있어 센 링크 종류 |
| totals | Object | clicks, urlClicks, campaignClicks, installs, conversions, revenue(조직 통화) |
| daily[] | Array | date, urlClicks, campaignClicks |
| links[] | Array | 클릭 많은 순 type(URL/CAMPAIGN), id, label, sub, clicks |
| linkPage · linkTotalPages · linkTotal | Integer | 링크별 표 페이지 정보 |