メインコンテンツへスキップ
コレクション系エンドポイントは、カーソルベースのページネーション を採用しています。並び順は created_at DESC, id DESC(新しいものが先頭)です。前回のレスポンスで得た next_cursor を、次のリクエストで ?cursor= として渡します。ページ番号やオフセットは存在しません。

ページネーション対応エンドポイント

以下のエンドポイントは metanext_cursorhas_more を含みます。
  • GET /v1/videos
  • GET /v1/videos/{id}/analyses
  • GET /v1/deals
  • GET /v1/deals/{id}/activities
  • GET /v1/deals/{id}/scorings

非ページネーションコレクション

以下のエンドポイントは 1 回のレスポンスで全件を返します。cursorlimit パラメータは受け付けません。
  • GET /v1/members
  • GET /v1/webhooks
  • GET /v1/videos/{id}/transcript
  • GET /v1/videos/{id}/events
上記エンドポイントに ?cursor=...?limit=... を渡しても、警告なく無視されます(エラーにはなりません)。limit を指定したのに件数が絞られない場合は、このエンドポイント群に該当している可能性があります。

クエリパラメータ

パラメータデフォルト範囲備考
limit251–100範囲外の値は 422 validation_failed を返します
cursor不透明な base64url 文字列。そのまま渡してください。パース・加工は不可。

レスポンス形状

{
  "data": [ ... ],
  "meta": {
    "request_id": "req_xxxxx",
    "next_cursor": "eyJpZCI6IjdkZmE...",
    "has_more": true
  }
}
次ページがない場合、has_morefalsenext_cursornull になります。

ドリルスルー例

ループ判定はカーソル文字列ではなく has_more を使うのが安全です。将来レスポンス形状が変わっても動作が安定します。
CURSOR=""
while true; do
  URL="$LYMO_BASE/v1/videos?limit=10"
  [ -n "$CURSOR" ] && URL="$URL&cursor=$CURSOR"

  RESP=$(curl -s "$URL" -H "Authorization: Bearer $LYMO_KEY")
  echo "$RESP" | jq .data

  HAS_MORE=$(echo "$RESP" | jq -r .meta.has_more)
  [ "$HAS_MORE" != "true" ] && break
  CURSOR=$(echo "$RESP" | jq -r .meta.next_cursor)
done

不正なカーソル

形式不正・パース不能な cursor警告なくページ 1 にフォールバック します。これは意図的な挙動です。カーソル形式は API のバージョン間で変わる可能性があるため、古いクライアントビルドから渡された失効カーソルで処理が壊れないようにしています。 古いカーソルを検知したい場合は、先頭要素の ID を期待値と比較するか、より堅牢な設計として、直近の成功カーソルをタイムスタンプ付きで保存し、定期的に最初から取り直してください。

書き込みとの同時実行時の安定性

カーソルは (created_at, id) に対するキーセットページネーションを使っています。結果として:
  • ページング開始後に作成された項目 は、新規クエリの最初のページに出現します。途中のページに紛れ込むことはありません。
  • ページング中に削除された項目 は、ページがスキップされる形で現れます。削除箇所の次の項目が返り、以前の ID が重複することはありません。
  • ページ間で ID が重複することはありません。
オフセットページネーションよりも長時間ドリルスルーに対して安全ですが、全件数は途中で取得できないというトレードオフがあります。