> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sixtyfour.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Batch Processing

> Run enrichment pipelines across hundreds of records at once using the Workflow Editor or the Workflows API.

Sixtyfour workflows process data in batch — upload a list or send records via API, and every row flows through your enrichment pipeline automatically. Use the [Workflow Editor](https://app.sixtyfour.ai/workflows/new) for a no-code approach, or trigger workflows programmatically with the [Workflows API](/api-reference/workflows/workflows-overview). For a full reference of available blocks, see [Building Workflows](/guides/building-workflows).

## Batch Processing in the Workflow Editor

The Workflow Editor lets you build and run batch pipelines without writing code. See [Building Workflows](/guides/building-workflows) for a full walkthrough of how to import, find, enrich, clean, and send data.

### Example

A typical batch pipeline to find and verify emails for a list of people:

```mermaid theme={null}
flowchart LR
Search --> Enrich_People[Enrich People] --> Find_Email[Email address] --> Filter --> Append_to_Notebook[Notebook]
```

## Batch Processing via API

Trigger workflows programmatically by sending records to a workflow that starts with a **Webhook** block. Build the workflow in the editor, then call it from your code.

```mermaid theme={null}
flowchart LR
  SendData["Send Data"] --> PollStatus["Poll Status"]
  PollStatus --> DownloadResults["Download Results"]
```

### Step 1: Trigger the workflow

Send your batch of records to `POST /workflows/run` with a `webhook_payload` array. Each object in the array is one row.

```http theme={null}
POST https://api.sixtyfour.ai/workflows/run?workflow_id=WORKFLOW_ID
```

```json theme={null}
{
  "webhook_payload": [
    {"name": "Sarah Chen", "company": "Pacific View Studios", "title": "Creative Director"},
    {"name": "James Park", "company": "Northgate Labs", "title": "CTO"},
    {"name": "Maria Lopez", "company": "Suncrest Health", "title": "VP Engineering"}
  ]
}
```

The response includes a `job_id` for tracking:

```json theme={null}
{
  "status": "queued",
  "workflow_id": "wf_abc123",
  "job_id": "run_xyz789"
}
```

### Step 2: Poll for progress

Check workflow status with `GET /workflows/runs/{run_id}/live_status`. Poll every 5-10 seconds until `overall_status` reaches `completed`, `failed`, or `cancelled`.

```http theme={null}
GET https://api.sixtyfour.ai/workflows/runs/run_xyz789/live_status
```

Use `overall_progress_percentage` to track progress.

### Step 3: Download results

Once completed, retrieve signed download URLs for the result CSV files.

```http theme={null}
GET https://api.sixtyfour.ai/workflows/runs/run_xyz789/results/download-links
```

<Warning>Signed URLs expire after 15 minutes. Download files immediately or request new links.</Warning>

For full code examples covering this trigger/poll/download flow in cURL, Python, and JavaScript, see the [Workflow Execution reference](/api-reference/workflows/workflows-execution#example-usage).

## Tips

* **Filter before enrichment.** Reducing rows early saves time and credits.
* **Deduplicate across runs.** Use the Deduplicate with Notebook block on recurring batch workflows to avoid processing the same records twice.
* **Request only what you need.** Define only the return fields you need in enrichment blocks to keep results focused and costs efficient.
* **Use Webhook for API triggers.** Any workflow you want to trigger programmatically must start with a Webhook source block.
