本文へスキップ
LinkProfit

ページネーション

すべての一覧エンドポイントで使うカーソルページネーション。レスポンスの外枠、上限、そのままコピーできる反復処理のループを説明します。

2026年8月13日更新

すべての一覧エンドポイントは、不透明なカーソルでページ送りします。カーソルは挿入や削除が あっても安定していて、ページ番号と違い、反復している間に行が飛ばされたり重複したりすること はありません。

レスポンスの外枠

{
  "data": [ { "id": "lnk_…" }, { "id": "lnk_…" } ],
  "pagination": {
    "next_cursor": "eyJpZCI6Imxua19hYmMiLCJjcmVhdGVkX2F0IjoiMjAyNi0uLi4ifQ",
    "has_more": true
  }
}
  • limit — 1ページあたりの件数。1〜100で、既定は50です。
  • cursor — 前のページのnext_cursorを、そのまま渡します。
  • next_cursorは、最後のページではnullになります。

カーソルは不透明な文字列として扱ってください。形式は変わる可能性があり、保証されているのは そのまま往復させられることだけです。形式の壊れたカーソルは、黙って1ページ目から始め直すの ではなく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で利用できます。ドメイン、プラン、Webhookのような短い一覧は has_more: falseとともに1ページで返ります。決済と入金はperiodで絞り込み、1リクエスト あたり100行が上限です。

並び順は/partner/clientsを除いてどこでも新しい順で、/partner/clientsだけは安定した id順でページ送りされます。