DEVELOPER API
API 문서
프로젝트 링크, 캠페인, UTM 템플릿과 통계를 외부 시스템에서 관리합니다.
시작하기
- 키 발급프로젝트의 API 탭에서 OWNER가 필요한 scope를 선택해 키를 만듭니다.
- 키 보관전체 키는 발급 직후 한 번만 표시됩니다. 서버의 secret 저장소에 보관하세요.
- 요청 전송
Authorization: Bearer srrrg_pk_...헤더를 모든/api/v1/**요청에 넣습니다.
API 키 관리
기본 URL
https://srrrg.link
첫 요청
curl -H "Authorization: Bearer srrrg_pk_..." \
"https://srrrg.link/api/v1/projects/{projectId}/links?limit=20"
인증과 권한
API 키는 하나의 프로젝트에 속합니다. URL의 projectId와 키의 프로젝트가 다르면 요청이 거부됩니다.
| scope | 허용 작업 |
|---|---|
links:read | 프로젝트·캠페인 링크 목록, CSV 내보내기 |
links:write | 링크 생성, JSON batch, CSV 가져오기 |
campaigns:read | 캠페인, UTM 템플릿·기본값, 가져오기 상태 조회 |
campaigns:write | 캠페인과 UTM 템플릿·필드·기본값 변경 |
stats:read | 프로젝트·캠페인·링크 통계 조회 |
공통 규칙
- Idempotency-Key
- 단일 링크 생성에는 권장하며, JSON batch에는 필수입니다. 같은 작업의 재시도에는 같은 값을 사용하세요.
- 페이지네이션
- 목록은
cursor와limit를 사용합니다. 응답의 다음 cursor를 그대로 전달하세요. - 날짜와 시각
- 날짜는
YYYY-MM-DD, 시각은 ISO 8601 UTC 형식(예:2026-08-16T03:00:00Z)을 사용합니다. - 개인정보
externalId와 UTM 값에 이메일, 이름, 전화번호 같은 개인정보를 넣지 마세요.
엔드포인트
요청·응답 필드와 전체 schema는 OpenAPI JSON이 기준입니다.
익명 링크
POST
/api/links인증 없음 · 링크 생성GET
/api/links/{code}Secret key · 링크 조회PATCH
/api/links/{code}Secret key · 링크 변경DELETE
/api/links/{code}Secret key · 링크 삭제GET
/api/links/{code}/statisticsSecret key · 링크 통계프로젝트 링크와 통계
POST
/api/v1/projects/{projectId}/linkslinks:write · 링크 생성GET
/api/v1/projects/{projectId}/linkslinks:read · 링크 목록GET
/api/v1/projects/{projectId}/statisticsstats:read · 프로젝트 통계GET
/api/v1/projects/{projectId}/links/{code}/statisticsstats:read · 링크 통계캠페인
POST
/api/v1/projects/{projectId}/campaignscampaigns:write · 생성GET
/api/v1/projects/{projectId}/campaignscampaigns:read · 목록GET
/api/v1/campaigns/{campaignId}campaigns:read · 상세PATCH
/api/v1/campaigns/{campaignId}campaigns:write · 변경PATCH
/api/v1/campaigns/{campaignId}/utm-templatecampaigns:write · UTM 템플릿 선택GET
/api/v1/campaigns/{campaignId}/utm-defaultscampaigns:read · UTM 기본값PATCH
/api/v1/campaigns/{campaignId}/utm-defaultscampaigns:write · UTM 기본값 변경GET
/api/v1/campaigns/{campaignId}/statisticsstats:read · 통계UTM 템플릿
POST
/api/v1/projects/{projectId}/utm-templatescampaigns:write · 생성GET
/api/v1/projects/{projectId}/utm-templatescampaigns:read · 목록GET
/api/v1/projects/{projectId}/utm-templates/{templateId}campaigns:read · 상세PATCH
/api/v1/projects/{projectId}/utm-templates/{templateId}campaigns:write · 변경DELETE
/api/v1/projects/{projectId}/utm-templates/{templateId}campaigns:write · 삭제POST
/api/v1/projects/{projectId}/utm-templates/{templateId}/fieldscampaigns:write · 필드 추가DELETE
/api/v1/projects/{projectId}/utm-templates/{templateId}/fields/{fieldId}campaigns:write · 필드 삭제캠페인 링크와 CSV
POST
/api/v1/campaigns/{campaignId}/linkslinks:write · 링크 생성POST
/api/v1/campaigns/{campaignId}/links/batchlinks:write · 최대 500개 생성GET
/api/v1/campaigns/{campaignId}/linkslinks:read · 링크 목록GET
/api/v1/campaigns/{campaignId}/links/template.csvcampaigns:read · CSV 양식POST
/api/v1/campaigns/{campaignId}/imports/csvlinks:write · CSV 가져오기GET
/api/v1/campaigns/{campaignId}/links.csvlinks:read · 링크 내보내기오류
/api/v1/**의 인증·권한·요청 제한 오류는 application/problem+json이며 응답 헤더에 X-Request-Id가 포함됩니다.
{
"title": "Forbidden",
"status": 403,
"detail": "필요한 API key scope가 없습니다.",
"code": "INSUFFICIENT_SCOPE",
"requestId": "..."
}
익명 링크 API와 일부 통계 도메인 오류는 현재 {"code":"...","message":"..."} 형식입니다. 클라이언트는 HTTP 상태를 먼저 판단하고 code를 분기 기준으로 사용하세요.
요청 한도
초과 시 429 Too Many Requests와 Retry-After 헤더를 반환합니다.
| 대상 | 한도 |
|---|---|
| 익명 링크 생성 | IP당 분 10회, 일 200회 |
| API 키 요청 | 키당 분 300회 |
| 단일 링크 생성 | 키당 분 60회 |
| JSON batch | 프로젝트당 분 2회, 요청당 최대 500개 |
| CSV 업로드 | 프로젝트당 시간 5회, 최대 10MB·10,000행 |
| 대량 링크 생성 | 프로젝트당 일 50,000개 |