Skip to main content
GET
/
v3
/
workflows
/
curl -X GET 'https://api.anyformat.ai/v3/workflows/?limit=20' \
  -H 'Authorization: Bearer YOUR_API_KEY'
import requests

url = "https://api.anyformat.ai/v3/workflows/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}

cursor = None
while True:
    params = {"limit": 20, **({"cursor": cursor} if cursor else {})}
    page = requests.get(url, headers=headers, params=params).json()
    for workflow in page["items"]:
        print(workflow["id"], workflow["name"])
    cursor = page["next_cursor"]
    if cursor is None:
        break
interface WorkflowSummary {
  id: string;
  name: string;
  description: string | null;
  created_at: string | null;
  updated_at: string | null;
}

interface WorkflowListPage {
  items: WorkflowSummary[];
  next_cursor: string | null;
}

let cursor: string | null = null;
do {
  const params = new URLSearchParams({ limit: '20' });
  if (cursor) params.set('cursor', cursor);
  const response = await fetch(`https://api.anyformat.ai/v3/workflows/?${params}`, {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
  });
  const page: WorkflowListPage = await response.json();
  page.items.forEach(w => console.log(w.id, w.name));
  cursor = page.next_cursor;
} while (cursor !== null);
{
  "items": [
    {
      "id": "0686bb97-8c30-70f0-8000-97669e000eb8",
      "name": "Invoice Processing",
      "description": "Extract data from invoice documents",
      "created_at": "2026-07-01T12:00:00.000Z",
      "updated_at": "2026-07-01T12:00:00.000Z"
    }
  ],
  "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNy0wMVQxMjowMDowMFoifQ"
}
Rate limit tier: general (600 req/min) — see Rate limits. Returns one keyset page of your organization’s workflows, newest first. Follow next_cursor until it is null — there are no totals or page numbers (see Pagination). Items are slim summaries; fetch GET /v3/workflows/{workflow_id}/ for the full typed graph.
curl -X GET 'https://api.anyformat.ai/v3/workflows/?limit=20' \
  -H 'Authorization: Bearer YOUR_API_KEY'
import requests

url = "https://api.anyformat.ai/v3/workflows/"
headers = {"Authorization": "Bearer YOUR_API_KEY"}

cursor = None
while True:
    params = {"limit": 20, **({"cursor": cursor} if cursor else {})}
    page = requests.get(url, headers=headers, params=params).json()
    for workflow in page["items"]:
        print(workflow["id"], workflow["name"])
    cursor = page["next_cursor"]
    if cursor is None:
        break
interface WorkflowSummary {
  id: string;
  name: string;
  description: string | null;
  created_at: string | null;
  updated_at: string | null;
}

interface WorkflowListPage {
  items: WorkflowSummary[];
  next_cursor: string | null;
}

let cursor: string | null = null;
do {
  const params = new URLSearchParams({ limit: '20' });
  if (cursor) params.set('cursor', cursor);
  const response = await fetch(`https://api.anyformat.ai/v3/workflows/?${params}`, {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
  });
  const page: WorkflowListPage = await response.json();
  page.items.forEach(w => console.log(w.id, w.name));
  cursor = page.next_cursor;
} while (cursor !== null);
{
  "items": [
    {
      "id": "0686bb97-8c30-70f0-8000-97669e000eb8",
      "name": "Invoice Processing",
      "description": "Extract data from invoice documents",
      "created_at": "2026-07-01T12:00:00.000Z",
      "updated_at": "2026-07-01T12:00:00.000Z"
    }
  ],
  "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNy0wMVQxMjowMDowMFoifQ"
}

Authorizations

Authorization
string
header
required

API key issued from app.anyformat.ai/api-key. Send as Authorization: Bearer <key>.

Query Parameters

limit
integer
default:20

Page size, capped at 100.

Required range: 1 <= x <= 100
cursor
string | null

Opaque token from a previous response's next_cursor.

Response

Successful Response

One keyset page of workflows.

Fixed (-created_at, -id) order. No totals or page numbers by design (ANY-1608) — iterate by following next_cursor until it is null.

items
WorkflowSummaryV3 · object[]
required

Workflows on this page, newest first.

next_cursor
string | null

Opaque token to fetch the next page; pass it back as ?cursor=. null on the last page.