ReDesk
NewProposals drafted by ReDesk AI in under four minutesSee what's new
Case studySunfield EPC cut feasibility turnaround from 3.4 days to 6 hoursRead the story
Pricing
Sign inSchedule a demo
Documentation

Build on the ReDesk stack

Guides, references and webhooks for every product. Pick the platform you are integrating with — the whole library follows.

Platform
ReDesk AI › Pagination

Pagination

Every list endpoint is cursor-paginated. Pass limit for the page size and starting_after with the last id you received to fetch the next page.

List responses

GET /v1/projects?limit=2
{
  "object": "list",
  "data": [
    {
      "id": "prj_71Ka",
      "object": "project",
      "customer": "cus_8Q2Xk",
      "template": "tpl_rooftop_standard",
      "capacity_kw": 42.5,
      "stage": "survey",
      "site": {
        "line1": "Plot 14, MIDC Bhosari",
        "city": "Pune",
        "state": "MH",
        "postcode": "411026",
        "lat": 18.6298,
        "lng": 73.8478
      },
      "owner": "usr_2Wd9",
      "created_at": "2026-08-01T06:20:11Z"
    },
    {
      "id": "…"
    }
  ],
  "has_more": true
}

Keep requesting while has_more is true, passing the last item's id as starting_after.

Fetch every page
let after;
do {
  const url = new URL("https://api.redesk.ai/v1/projects");
  url.searchParams.set("limit", "100");
  if (after) url.searchParams.set("starting_after", after);
  const page = await fetch(url, { headers: { Authorization: `Bearer ${key}` } }).then((r) => r.json());
  handle(page.data);
  after = page.has_more ? page.data.at(-1).id : undefined;
} while (after);