API 설명서

지금 열려 있는 창구는 읽기(GET) 5개가 전부예요. 만들기 · 고치기 · 지우기는 열려 있지 않아요.

기본 주소 https://inlink.to/api/v1설명서 원본(JSON · OpenAPI 3.1.0)판 1.5.0

응답에 개인정보가 없습니다

어떤 응답에도 실명 · 휴대폰 번호 · 이메일 · 배송 주소 · 송장 번호 · 지원 시 작성한 자기소개·기획안 · 브랜드 내부 메모는 포함되지 않습니다.

지원자·제안에 딸려 나오는 influencer 객체는 id, username, nickname, avatar_url 4칸이 전부입니다. 각각 회원번호·닉네임·프로필 이미지입니다. 캠페인에 지원했다는 사실이 그 사람의 프로필 전체를 보여줄 근거가 되지는 않기 때문에 여기까지만 나갑니다.

인플루언서 디렉터리 검색(GET /influencers)은 이보다 넓습니다. id, username, nickname, avatar_url, bio, tagline, city, country, categories, platforms, total_followers, channels. 서비스의 '인플루언서 찾기' 화면이 이미 누구에게나 보여주는 것과 같은 공개 정보입니다(같은 조회 경로를 씁니다). 실명·연락처·정확한 주소·이메일은 여기에도 들어가지 않습니다.

GET읽기 전용/campaigns

내 캠페인 목록

내 계정이 소유한 브랜드의 캠페인만 최신순(created_at 내림차순)으로 반환합니다. 삭제된 캠페인은 빠집니다. 아직 브랜드가 없는 계정은 빈 목록과 함께 pagination.limit 이 0 으로 나갑니다.

받는 칸

  • pageinteger · 쿼리선택

    페이지 번호(1부터). 1 미만을 넣으면 1로 맞춥니다. 마지막 쪽을 넘긴 쪽은 빈 목록(data: [])으로 옵니다. (기본 1 · 최소 1)

  • limitinteger · 쿼리선택

    페이지당 개수. 1~50 범위로 맞춰지며 50을 넘겨도 50으로 깎입니다. (기본 20 · 최소 1 · 최대 50)

  • statusstring · 쿼리선택

    캠페인 상태 정확일치 필터(예: active). 생략하면 전체를 반환합니다.

상태 코드

  • 200

    OK

    —
  • 401

    키 없음·무효·폐기, { "error": "Invalid or missing API key" }

    {"error":"Invalid or missing API key"}
  • 403

    Pro 자격 없음(강등·만료 포함)

    {"error":"API 접근 자격이 없습니다. Pro 플랜 구독이 필요합니다."}
  • 429

    호출 한도 초과(IP 분당 300 또는 키 분당 60)

    {"error":"Rate limit exceeded"}
  • 500

    서버 내부 오류(일시 장애 또는 잘못된 형식의 id · page · limit 값). 일시 장애면 재시도 대상

    {"error":"Failed to resolve brand scope"}
요청 · cURL
curl https://inlink.to/api/v1/campaigns \
  -H "Authorization: Bearer $INLINK_API_KEY"
응답 예시 · 200
{
  "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
  }
}
GET읽기 전용/campaigns/:id

캠페인 상세

내 소유 캠페인 1건을 반환합니다. 없거나 내 소유가 아니면 똑같이 404 입니다(남의 캠페인이 존재하는지 알려주지 않습니다).

받는 칸

  • idstring(uuid) · 경로필수

    캠페인 id(uuid)

상태 코드

  • 200

    OK

    —
  • 401

    키 없음·무효·폐기, { "error": "Invalid or missing API key" }

    {"error":"Invalid or missing API key"}
  • 403

    Pro 자격 없음(강등·만료 포함)

    {"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
curl https://inlink.to/api/v1/campaigns/CAMPAIGN_ID \
  -H "Authorization: Bearer $INLINK_API_KEY"
응답 예시 · 200
{
  "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": "글로우코스메틱"
    }
  }
}
GET읽기 전용/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).

상태 코드

  • 200

    OK

    —
  • 401

    키 없음·무효·폐기, { "error": "Invalid or missing API key" }

    {"error":"Invalid or missing API key"}
  • 403

    Pro 자격 없음(강등·만료 포함)

    {"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
curl https://inlink.to/api/v1/campaigns/CAMPAIGN_ID/applicants \
  -H "Authorization: Bearer $INLINK_API_KEY"
응답 예시 · 200
{
  "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
  }
}
GET읽기 전용/proposals

내가 보낸 제안 목록

내 브랜드가 인플루언서에게 보낸 제안을 최신순으로 반환합니다. 제안 본문(메시지)은 응답에 포함되지 않습니다. 아직 브랜드가 없는 계정은 빈 목록과 함께 pagination.limit 이 0 으로 나갑니다.

받는 칸

  • pageinteger · 쿼리선택

    페이지 번호(1부터). 1 미만을 넣으면 1로 맞춥니다. 마지막 쪽을 넘긴 쪽은 빈 목록(data: [])으로 옵니다. (기본 1 · 최소 1)

  • limitinteger · 쿼리선택

    페이지당 개수. 1~50 범위로 맞춰지며 50을 넘겨도 50으로 깎입니다. (기본 20 · 최소 1 · 최대 50)

  • statusstring · 쿼리선택

    제안 상태 정확일치 필터(예: pending). 생략하면 전체를 반환합니다.

상태 코드

  • 200

    OK

    —
  • 401

    키 없음·무효·폐기, { "error": "Invalid or missing API key" }

    {"error":"Invalid or missing API key"}
  • 403

    Pro 자격 없음(강등·만료 포함)

    {"error":"API 접근 자격이 없습니다. Pro 플랜 구독이 필요합니다."}
  • 429

    호출 한도 초과(IP 분당 300 또는 키 분당 60)

    {"error":"Rate limit exceeded"}
  • 500

    서버 내부 오류(일시 장애 또는 잘못된 형식의 id · page · limit 값). 일시 장애면 재시도 대상

    {"error":"Failed to resolve brand scope"}
요청 · cURL
curl https://inlink.to/api/v1/proposals \
  -H "Authorization: Bearer $INLINK_API_KEY"
응답 예시 · 200
{
  "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
  }
}
GET읽기 전용/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)

상태 코드

  • 200

    OK

    —
  • 400

    팔로워 조건이 정수가 아니거나 음수·범위 밖인 경우, 또는 min_followers가 max_followers보다 큰 경우입니다.

    {"error":"Invalid follower range"}
  • 401

    키 없음·무효·폐기, { "error": "Invalid or missing API key" }

    {"error":"Invalid or missing API key"}
  • 403

    Pro 자격 없음(강등·만료 포함)

    {"error":"API 접근 자격이 없습니다. Pro 플랜 구독이 필요합니다."}
  • 429

    호출 한도 초과(IP 분당 300 또는 키 분당 60)

    {"error":"Rate limit exceeded"}
  • 500

    서버 내부 오류(일시 장애 또는 잘못된 형식의 id · page · limit 값). 일시 장애면 재시도 대상

    {"error":"Failed to resolve brand scope"}
요청 · cURL
curl https://inlink.to/api/v1/influencers \
  -H "Authorization: Bearer $INLINK_API_KEY"
응답 예시 · 200
{
  "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
  }
}

더 보기 · 오류 코드 · 호출 한도 · 바이브코딩 킷