API 설명서
지금 열려 있는 창구는 읽기(GET) 5개가 전부예요. 만들기 · 고치기 · 지우기는 열려 있지 않아요.
응답에 개인정보가 없습니다
어떤 응답에도 실명 · 휴대폰 번호 · 이메일 · 배송 주소 · 송장 번호 · 지원 시 작성한 자기소개·기획안 · 브랜드 내부 메모는 포함되지 않습니다.
지원자·제안에 딸려 나오는 influencer 객체는 id, username, nickname, avatar_url 4칸이 전부입니다. 각각 회원번호·닉네임·프로필 이미지입니다. 캠페인에 지원했다는 사실이 그 사람의 프로필 전체를 보여줄 근거가 되지는 않기 때문에 여기까지만 나갑니다.
인플루언서 디렉터리 검색(GET /influencers)은 이보다 넓습니다. id, username, nickname, avatar_url, bio, tagline, city, country, categories, platforms, total_followers, channels. 서비스의 '인플루언서 찾기' 화면이 이미 누구에게나 보여주는 것과 같은 공개 정보입니다(같은 조회 경로를 씁니다). 실명·연락처·정확한 주소·이메일은 여기에도 들어가지 않습니다.
/campaigns내 캠페인 목록
내 계정이 소유한 브랜드의 캠페인만 최신순(created_at 내림차순)으로 반환합니다. 삭제된 캠페인은 빠집니다. 아직 브랜드가 없는 계정은 빈 목록과 함께 pagination.limit 이 0 으로 나갑니다.
받는 칸
pageinteger · 쿼리선택페이지 번호(1부터). 1 미만을 넣으면 1로 맞춥니다. 마지막 쪽을 넘긴 쪽은 빈 목록(data: [])으로 옵니다. (기본 1 · 최소 1)
limitinteger · 쿼리선택페이지당 개수. 1~50 범위로 맞춰지며 50을 넘겨도 50으로 깎입니다. (기본 20 · 최소 1 · 최대 50)
statusstring · 쿼리선택캠페인 상태 정확일치 필터(예: active). 생략하면 전체를 반환합니다.
상태 코드
200OK
—401키 없음·무효·폐기, { "error": "Invalid or missing API key" }
{"error":"Invalid or missing API key"}403Pro 자격 없음(강등·만료 포함)
{"error":"API 접근 자격이 없습니다. Pro 플랜 구독이 필요합니다."}429호출 한도 초과(IP 분당 300 또는 키 분당 60)
{"error":"Rate limit exceeded"}500서버 내부 오류(일시 장애 또는 잘못된 형식의 id · page · limit 값). 일시 장애면 재시도 대상
{"error":"Failed to resolve brand scope"}
curl https://inlink.to/api/v1/campaigns \
-H "Authorization: Bearer $INLINK_API_KEY"{
"data": [
{
"id": "3f2b7c9e-5d41-4a8e-9c10-6b2f0a7d1e34",
"campaign_number": 10241,
"title": "글로우 선크림 체험단 모집",
"status": "active",
"category": "beauty",
"platform": "instagram",
"campaign_type": "sns_content",
"delivery_type": "delivery",
"sns_platform": "instagram",
"shopping_channel": null,
"recruits": 10,
"chosen_count": 4,
"applicants_count": 15,
"reward_per_person": 30000,
"cost_estimated": 120000,
"cost_final": 330000,
"paid_at": "2026-07-28T02:12:40+00:00",
"reward_paid_total": 90000,
"product_provided": true,
"request_start_at": "2026-08-01T00:00:00+00:00",
"request_end_at": "2026-08-10T14:59:59+00:00",
"submit_start_at": "2026-08-11T00:00:00+00:00",
"submit_end_at": "2026-08-25T14:59:59+00:00",
"thumbnail_url": "https://example.supabase.co/storage/v1/object/public/campaigns/sample.jpg",
"created_at": "2026-07-28T02:11:07+00:00",
"brand": {
"id": "b1a2c3d4-0000-4000-8000-1234567890ab",
"company_name": "글로우코스메틱"
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 42,
"totalPages": 3
}
}/campaigns/:id캠페인 상세
내 소유 캠페인 1건을 반환합니다. 없거나 내 소유가 아니면 똑같이 404 입니다(남의 캠페인이 존재하는지 알려주지 않습니다).
받는 칸
idstring(uuid) · 경로필수캠페인 id(uuid)
상태 코드
200OK
—401키 없음·무효·폐기, { "error": "Invalid or missing API key" }
{"error":"Invalid or missing API key"}403Pro 자격 없음(강등·만료 포함)
{"error":"API 접근 자격이 없습니다. Pro 플랜 구독이 필요합니다."}404캠페인이 없거나 내 소유가 아님(두 경우를 구분해 알려주지 않습니다)
{"error":"Campaign not found"}429호출 한도 초과(IP 분당 300 또는 키 분당 60)
{"error":"Rate limit exceeded"}500서버 내부 오류(일시 장애 또는 잘못된 형식의 id · page · limit 값). 일시 장애면 재시도 대상
{"error":"Failed to resolve brand scope"}
curl https://inlink.to/api/v1/campaigns/CAMPAIGN_ID \
-H "Authorization: Bearer $INLINK_API_KEY"{
"data": {
"id": "3f2b7c9e-5d41-4a8e-9c10-6b2f0a7d1e34",
"campaign_number": 10241,
"title": "글로우 선크림 체험단 모집",
"status": "active",
"category": "beauty",
"platform": "instagram",
"campaign_type": "sns_content",
"delivery_type": "delivery",
"sns_platform": "instagram",
"shopping_channel": null,
"recruits": 10,
"chosen_count": 4,
"applicants_count": 15,
"reward_per_person": 30000,
"cost_estimated": 120000,
"cost_final": 330000,
"paid_at": "2026-07-28T02:12:40+00:00",
"reward_paid_total": 90000,
"product_provided": true,
"request_start_at": "2026-08-01T00:00:00+00:00",
"request_end_at": "2026-08-10T14:59:59+00:00",
"submit_start_at": "2026-08-11T00:00:00+00:00",
"submit_end_at": "2026-08-25T14:59:59+00:00",
"thumbnail_url": null,
"created_at": "2026-07-28T02:11:07+00:00",
"brand": {
"id": "b1a2c3d4-0000-4000-8000-1234567890ab",
"company_name": "글로우코스메틱"
}
}
}/campaigns/:id/applicants캠페인 지원자 현황(선정·제출)
내 소유 캠페인의 지원(신청) 목록을 최신순으로 반환합니다. 지원자의 개인정보(실명·연락처·배송 주소·지원서 자유기재)는 조회조차 하지 않으며, 인플루언서는 공개 신원(회원번호·닉네임·프로필 이미지)만 붙습니다.
- 선정 인원을 세는 정본 규칙은 is_selected=true 입니다. status 문자열만으로 세면 '선정된 뒤 취소 확정된 사람'(status=accepted 이지만 is_cancelled=true)이 함께 세어져 Campaign.chosen_count 와 어긋납니다.
- 1.1.0-read 까지는 is_selected 가 옛 서비스 이관용 내부 플래그를 그대로 실어, inlink 에서 만든 캠페인에서는 실제 선정자도 false 로 나갔습니다. 1.2.0-read 부터 내부 화면과 같은 규칙으로 계산됩니다.
- ★이미 수집·저장해 두신 is_selected 값이 있다면 이 엔드포인트로 다시 받아 갱신하시길 권장합니다. 1.2.0-read 이전에 받아 두신 값은 실제 선정 여부와 다를 수 있습니다.
받는 칸
idstring(uuid) · 경로필수캠페인 id(uuid)
pageinteger · 쿼리선택페이지 번호(1부터). 1 미만을 넣으면 1로 맞춥니다. 마지막 쪽을 넘긴 쪽은 빈 목록(data: [])으로 옵니다. (기본 1 · 최소 1)
limitinteger · 쿼리선택페이지당 개수. 1~50 범위로 맞춰지며 50을 넘겨도 50으로 깎입니다. (기본 20 · 최소 1 · 최대 50)
statusstring · 쿼리선택신청 상태 정확일치 필터. 실측 사용값: pending · accepted · submitted · completed · rejected · cancelled · withdrawn. ★선정자만 뽑을 때 이 필터를 3번 호출해 합치지 마세요. 취소 확정자가 accepted 로 남아 섞입니다. 선정 판별은 응답의 is_selected 를 쓰세요(1.2.0-read).
상태 코드
200OK
—401키 없음·무효·폐기, { "error": "Invalid or missing API key" }
{"error":"Invalid or missing API key"}403Pro 자격 없음(강등·만료 포함)
{"error":"API 접근 자격이 없습니다. Pro 플랜 구독이 필요합니다."}404캠페인이 없거나 내 소유가 아님(두 경우를 구분해 알려주지 않습니다)
{"error":"Campaign not found"}429호출 한도 초과(IP 분당 300 또는 키 분당 60)
{"error":"Rate limit exceeded"}500서버 내부 오류(일시 장애 또는 잘못된 형식의 id · page · limit 값). 일시 장애면 재시도 대상
{"error":"Failed to resolve brand scope"}
curl https://inlink.to/api/v1/campaigns/CAMPAIGN_ID/applicants \
-H "Authorization: Bearer $INLINK_API_KEY"{
"data": [
{
"id": "9c8b7a65-4321-4d0e-9f8a-0b1c2d3e4f50",
"campaign_id": "3f2b7c9e-5d41-4a8e-9c10-6b2f0a7d1e34",
"status": "submitted",
"is_selected": true,
"is_submitted": true,
"is_cancelled": false,
"selected_at": "2026-08-11T01:20:00+00:00",
"submitted_at": "2026-08-19T09:42:13+00:00",
"cancelled_at": null,
"created_at": "2026-08-03T11:05:44+00:00",
"review_url": "https://www.instagram.com/p/EXAMPLE/",
"proof_image_url": null,
"order_number": null,
"purchase_proof_order_number": "20260902-0004871",
"purchase_proof_submitted_at": "2026-08-30T05:12:40+00:00",
"reward_paid_amount": 30000,
"reward_paid_at": "2026-09-02T00:11:03+00:00",
"deposit_amount": 10000,
"deposit_status": "returned",
"deposit_held_at": "2026-08-11T01:20:05+00:00",
"deposit_returned_at": "2026-09-02T00:11:03+00:00",
"deposit_forfeited_at": null,
"influencer": {
"id": "5d6e7f80-1122-4334-8556-77889900aabb",
"username": "312045",
"nickname": "매일뷰티",
"avatar_url": "https://example.supabase.co/storage/v1/object/public/avatars/sample.jpg"
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 15,
"totalPages": 1
}
}/proposals내가 보낸 제안 목록
내 브랜드가 인플루언서에게 보낸 제안을 최신순으로 반환합니다. 제안 본문(메시지)은 응답에 포함되지 않습니다. 아직 브랜드가 없는 계정은 빈 목록과 함께 pagination.limit 이 0 으로 나갑니다.
받는 칸
pageinteger · 쿼리선택페이지 번호(1부터). 1 미만을 넣으면 1로 맞춥니다. 마지막 쪽을 넘긴 쪽은 빈 목록(data: [])으로 옵니다. (기본 1 · 최소 1)
limitinteger · 쿼리선택페이지당 개수. 1~50 범위로 맞춰지며 50을 넘겨도 50으로 깎입니다. (기본 20 · 최소 1 · 최대 50)
statusstring · 쿼리선택제안 상태 정확일치 필터(예: pending). 생략하면 전체를 반환합니다.
상태 코드
200OK
—401키 없음·무효·폐기, { "error": "Invalid or missing API key" }
{"error":"Invalid or missing API key"}403Pro 자격 없음(강등·만료 포함)
{"error":"API 접근 자격이 없습니다. Pro 플랜 구독이 필요합니다."}429호출 한도 초과(IP 분당 300 또는 키 분당 60)
{"error":"Rate limit exceeded"}500서버 내부 오류(일시 장애 또는 잘못된 형식의 id · page · limit 값). 일시 장애면 재시도 대상
{"error":"Failed to resolve brand scope"}
curl https://inlink.to/api/v1/proposals \
-H "Authorization: Bearer $INLINK_API_KEY"{
"data": [
{
"id": "11223344-5566-4778-8899-aabbccddeeff",
"proposal_number": 3312,
"title": "가을 신제품 협업 제안",
"status": "pending",
"budget": 500000,
"created_at": "2026-08-05T04:00:00+00:00",
"expires_at": "2026-08-12T04:00:00+00:00",
"responded_at": null,
"accepted_at": null,
"rejected_at": null,
"submitted_at": null,
"influencer": {
"id": "5d6e7f80-1122-4334-8556-77889900aabb",
"username": "312045",
"nickname": "매일뷰티",
"avatar_url": null
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 7,
"totalPages": 1
}
}/influencers공개 인플루언서 디렉터리 검색
닉네임·지역·채널·팔로워로 공개 인플루언서를 검색합니다. 실명·연락처·주소·이메일은 포함되지 않습니다.
- platform·min_followers·max_followers는 페이지를 나누기 전 조회 단계에서 적용합니다. 같은 채널이 최소·최대를 함께 만족해야 하고 유튜브는 소유 증명된 채널만 판정합니다.
- category는 페이지를 받은 뒤 거릅니다. 적거나 빈 페이지여도 has_more가 true일 수 있습니다. has_more는 카테고리 필터 전 조회 결과의 다음 페이지 여부이며 false가 될 때까지 page를 올리세요.
- pagination.total은 카테고리 필터 전 지금까지 확인된 최소 인원입니다(offset + 추가 1명을 포함한 조회 인원, 조회가 비면 0). total_is_estimate는 항상 true이며 totalPages도 이 하한으로 계산합니다. total_followers는 호환용 표시 칸이며 필터 기준이 아닙니다.
받는 칸
pageinteger · 쿼리선택페이지 번호(1부터). 1 미만을 넣으면 1로 맞춥니다. 마지막 쪽을 넘긴 쪽은 빈 목록(data: [])으로 옵니다. (기본 1 · 최소 1)
limitinteger · 쿼리선택페이지당 개수. 1~50 범위로 맞춰지며 50을 넘겨도 50으로 깎입니다. (기본 20 · 최소 1 · 최대 50)
keywordstring · 쿼리선택검색어, 닉네임만 검색합니다(실명·아이디는 검색 대상이 아닙니다).
regionstring · 쿼리선택지역, 프로필의 공개 도시(city) 값과 대조합니다.
platformstring · 쿼리선택조회 단계에서 적용하는 채널 플랫폼 필터. 팔로워 조건도 이 플랫폼의 같은 채널이 만족해야 합니다.
categorystring · 쿼리선택카테고리 slug 또는 한글 이름. 페이지를 가져온 뒤 걸러내는 방식입니다.
min_followersinteger · 쿼리선택조회 단계에서 적용하는 채널별 인원 하한. 같은 채널이 최소·최대를 함께 만족해야 하며 platform 지정 시 그 플랫폼, 미지정 시 아무 채널 하나로 판정합니다. follower_count와 subscriber_count 중 큰 값을 쓰며 유튜브는 소유 증명된 채널만 셉니다. 0~2147483647 정수이며 min_followers는 max_followers 이하여야 합니다. (최소 0 · 최대 2147483647)
max_followersinteger · 쿼리선택조회 단계에서 적용하는 채널별 인원 상한. 같은 채널이 최소·최대를 함께 만족해야 하며 platform 지정 시 그 플랫폼, 미지정 시 아무 채널 하나로 판정합니다. follower_count와 subscriber_count 중 큰 값을 쓰며 유튜브는 소유 증명된 채널만 셉니다. 0~2147483647 정수이며 min_followers는 max_followers 이하여야 합니다. (최소 0 · 최대 2147483647)
상태 코드
200OK
—400팔로워 조건이 정수가 아니거나 음수·범위 밖인 경우, 또는 min_followers가 max_followers보다 큰 경우입니다.
{"error":"Invalid follower range"}401키 없음·무효·폐기, { "error": "Invalid or missing API key" }
{"error":"Invalid or missing API key"}403Pro 자격 없음(강등·만료 포함)
{"error":"API 접근 자격이 없습니다. Pro 플랜 구독이 필요합니다."}429호출 한도 초과(IP 분당 300 또는 키 분당 60)
{"error":"Rate limit exceeded"}500서버 내부 오류(일시 장애 또는 잘못된 형식의 id · page · limit 값). 일시 장애면 재시도 대상
{"error":"Failed to resolve brand scope"}
curl https://inlink.to/api/v1/influencers \
-H "Authorization: Bearer $INLINK_API_KEY"{
"data": [
{
"id": "5d6e7f80-1122-4334-8556-77889900aabb",
"username": "312045",
"nickname": "매일뷰티",
"avatar_url": "https://example.supabase.co/storage/v1/object/public/avatars/sample.jpg",
"bio": "매일 쓰는 것만 리뷰합니다.",
"tagline": "스킨케어 전문",
"city": "서울",
"country": "KR",
"categories": [
"뷰티",
"라이프스타일"
],
"platforms": [
"instagram",
"youtube"
],
"total_followers": 42350,
"channels": [
{
"platform": "instagram",
"handle": "everyday_beauty",
"followers": 38200,
"engagement_rate": 3.4
},
{
"platform": "youtube",
"handle": "everydaybeauty",
"followers": 4150,
"engagement_rate": null
}
]
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"totalPages": 1,
"has_more": false,
"total_is_estimate": true
}
}