Windpaint
Products

Runs list

Page through standalone generation jobs and product runs in one newest-first list.

GET /v1/runs

Lists everything that ran in the current project, newest first: standalone generation jobs and product runs, merged. Each product run carries its step jobs, and those step jobs don’t appear as separate rows. This is the list the dashboard’s Runs page shows.

Scope: generation:read

The per-kind lists are still available at GET /v1/generation/requests and GET /v1/workflows/runs. This is the only one of the three with cursor pagination.

Query

limitintegerdefault:50

Rows per page, from 1 to 200. Values outside that range are clamped.

sourcestring

Narrow the list. api: standalone jobs submitted with an API key. studio: standalone jobs submitted from the dashboard. workflow: product runs only. Omit for everything.

cursorstring

The next_cursor from the previous page. Omit for the first page.

X-Windpaint-Projectstring

The project to list, by id or slug. Defaults to your organization’s default project.

Response

Returns {"data": {"items": [...], "total": ..., "next_cursor": ...}}.

itemsRunItem[]required

One page of rows, newest first.

totalintegerrequired

The number of rows matching source across all pages.

next_cursorstring | nullrequired

Pass as cursor to get the next page. null when this page has fewer than limit rows. When a page is exactly full, next_cursor is set and the next page may come back empty.

A cursor this endpoint didn’t produce returns 422 with Invalid cursor.

To fetch every page, repeat the request with cursor set to the last next_cursor until it comes back null or items is empty:

curl "https://api.windpaint.ai/v1/runs?limit=50&cursor=MjAyNi0xMC0wNFQxNDoxOTo1Mi4wMDQwMDArMDA6MDB8YjJkNGU2ZjgtMWEzYy00ZTVmLThhN2ItOWMwZDFlMmYzYTRi" \
  -H "Authorization: Bearer $WINDPAINT_API_KEY"