본문으로 건너뛰기
LinkProfit

페이지네이션

모든 목록 엔드포인트의 커서 페이지네이션: 응답 봉투, 제한값, 그대로 복사해 쓰는 반복 루프.

2026년 8월 13일 업데이트

모든 목록 엔드포인트는 불투명한 커서로 페이지를 나눕니다. 커서는 삽입과 삭제가 일어나도 안정적입니다. 페이지 번호와 달리 반복하는 동안 행을 건너뛰거나 중복해서 반환하는 일이 없습니다.

응답 봉투

{
  "data": [ { "id": "lnk_…" }, { "id": "lnk_…" } ],
  "pagination": {
    "next_cursor": "eyJpZCI6Imxua19hYmMiLCJjcmVhdGVkX2F0IjoiMjAyNi0uLi4ifQ",
    "has_more": true
  }
}
  • limit — 페이지 크기, 1~100, 기본값 50.
  • cursor — 이전 페이지의 next_cursor 값을 그대로 전달합니다.
  • 마지막 페이지에서는 next_cursornull입니다.

커서는 불투명한 문자열로 다루십시오. 형식은 바뀔 수 있으며, 받은 값을 그대로 돌려보내는 동작만 보장됩니다. 형식이 잘못된 커서는 조용히 첫 페이지부터 다시 시작하지 않고 400 invalid_request로 응답합니다.

반복 처리

curl -s "$LINKPROFIT_API_BASE/links?limit=100" \
  -H "Authorization: Bearer $LINKPROFIT_API_KEY"
# then with the next_cursor value from the response:
curl -s "$LINKPROFIT_API_BASE/links?limit=100&cursor=CURSOR_FROM_PREVIOUS_PAGE" \
  -H "Authorization: Bearer $LINKPROFIT_API_KEY"
async function* allLinks(base, key) {
  let cursor = null;
  do {
    const url = new URL(`${base}/links`);
    url.searchParams.set("limit", "100");
    if (cursor) url.searchParams.set("cursor", cursor);

    const response = await fetch(url, {
      headers: { Authorization: `Bearer ${key}` },
    });
    if (!response.ok) throw new Error(`HTTP ${response.status}`);

    const page = await response.json();
    yield* page.data;
    cursor = page.pagination.next_cursor;
  } while (cursor);
}

커서를 사용할 수 있는 곳

커서 페이지네이션은 /links, /events, /partner/clients, /webhooks/{id}/deliveries에서 사용할 수 있습니다. 도메인, 요금제, 웹훅처럼 짧은 목록은 has_more: false와 함께 한 페이지로 반환됩니다. 결제와 정산은 period로 필터링되며 요청당 100행으로 제한됩니다.

정렬은 /partner/clients를 제외한 모든 곳에서 최신순이며, /partner/clients는 안정적인 id 순서로 페이지를 나눕니다.