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:
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')doneThings 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.