Skip to content

Pagination

Every list endpoint returns a page of results and a cursor for the next page:

{
"data": [{ "id": "…" }, { "id": "…" }],
"pagination": {
"next_cursor": "eyJ2IjoxLCJrIjpbIjIwMjYtMTAtMDFUMTI6MDA6MDBaIl19.Zm9vYmFy",
"has_more": true
}
}

The response also carries X-Has-Next-Page: true or false.

Parameter Default Notes
limit 50 1 to 200
cursor none The next_cursor from the previous page

To read everything, keep requesting with the last next_cursor until has_more is false:

Terminal window
cursor=""
while :; do
page=$(curl -s "https://api.devsecure.io/v1/issues?status=open&limit=200${cursor:+&cursor=$cursor}" \
-H "Authorization: Bearer $DEVSECURE_API_KEY")
echo "$page" | jq -c '.data[]'
[ "$(echo "$page" | jq -r '.pagination.has_more')" = "true" ] || break
cursor=$(echo "$page" | jq -r '.pagination.next_cursor')
done

Things to know:

  • Cursors are opaque and signed. Do not build or edit them.
  • A cursor belongs to its query. Send the same filters with every page. A cursor used with different filters, another endpoint or another credential’s workspace returns 400 invalid_cursor.
  • Pages are stable while you read them. Lists are ordered by a fixed key (usually newest first, with the id as a tie-breaker), so items added while you page do not shift later pages.
  • For large one-off downloads of issues, use GET /v1/issues/export, which streams JSON or CSV in one response.