Use Case
Execute batch enrichment pipelines, monitor progress in real time, and retrieve results. Use these endpoints to run workflows with input data, poll for completion, cancel long-running runs, and download enriched output files.
| Name | Type | Required | Description |
|---|
| x-api-key | string | Yes | Your Sixtyfour API key |
| Content-Type | string | For POST with body | application/json when sending a request body |
Run Workflow
Execute a workflow and receive a job ID for tracking.
POST https://api.sixtyfour.ai/workflows/run
Query Parameters
| Name | Required | Description |
|---|
| workflow_id | Yes | The workflow to execute |
Request Body (Optional)
| Field | Type | Description |
|---|
| specs_override | object | Override specs of the first block (useful for dynamic inputs). See the workflow editor’s “Workflow API Reference” for block-specific options. |
| webhook_payload | array or object | Input data for workflows starting with a webhook block. API key auth only. Can be a list of records or a single object. |
Example Request
{
"webhook_payload": [
{
"company_name": "Acme Corp",
"website": "acme.com",
"industry": "Technology"
},
{
"company_name": "TechStart Inc",
"website": "techstart.io",
"industry": "Software"
}
]
}
Response (200)
{
"status": "queued",
"workflow_id": "wf_abc123",
"job_id": "run_xyz789",
"cache_config": null
}
Use the job_id to track workflow execution. Check the workflow editor’s “Workflow API Reference” for specific specs_override options.
Workflows starting with read_csv cannot be triggered via API. Use workflows that start with a webhook block.
List Workflow Runs
Get execution history for your workflows.
GET https://api.sixtyfour.ai/workflows/runs
Query Parameters
| Name | Required | Description |
|---|
| status | No | Filter: running, completed, cancelled, or active (queued + running). Omit to return all runs including failed. |
| workflow_id | No | Filter by specific workflow ID. Verifies the workflow exists and caller has access. |
| limit | No | Number of results (1-500, default: 100) |
Response (200)
Results are sorted by most recent first (queued_at descending). For failed runs, error_message and status_reason may be populated.
[
{
"job_id": "run_xyz789",
"workflow_id": "wf_abc123",
"workflow_name": "Lead Enrichment",
"status": "completed",
"step": "finished",
"user_id": "user_456",
"created_at": "2026-02-12T09:00:00Z",
"updated_at": "2026-02-12T09:15:00Z",
"queued_at": "2026-02-12T09:00:00Z",
"started_at": "2026-02-12T09:00:30Z",
"completed_at": "2026-02-12T09:15:00Z",
"duration_ms": 870000,
"status_reason": null,
"error_message": null,
"metrics": {
"total_records": 100,
"processed_records": 100,
"enrichment_rate": 0.95
},
"blocks_count": 3
}
]
Get Live Status
Monitor real-time progress of a running workflow.
GET https://api.sixtyfour.ai/workflows/runs/{run_id}/live_status
Parameters
| Name | Location | Required | Description |
|---|
| run_id | path | Yes | The workflow run ID (same as job_id from Run Workflow response) |
Response (200)
{
"run_id": "run_xyz789",
"workflow_id": "wf_abc123",
"overall_status": "running",
"current_block": "enrich_company",
"current_block_sequence": 2,
"total_blocks": 3,
"completed_blocks": 1,
"started_at": "2026-02-12T09:00:30Z",
"completed_at": null,
"last_updated": "2026-02-12T09:05:00Z",
"overall_progress_percentage": 45.5,
"estimation_blocked_by": null,
"blocks": [
{
"block_name": "webhook",
"sequence_number": 1,
"status": "completed",
"started_at": "2026-02-12T09:00:30Z",
"completed_at": "2026-02-12T09:01:00Z",
"progress_percentage": 100.0,
"current_step": null,
"processed_count": 100,
"total_count": 100,
"estimated_total_count": null,
"last_updated": "2026-02-12T09:01:00Z",
"error_message": null,
"metrics": {
"row_count": 100,
"dataframe_type": "LEAD",
"processed_count": 100,
"total_count": 100
}
},
{
"block_name": "enrich_company",
"sequence_number": 2,
"status": "running",
"started_at": "2026-02-12T09:01:00Z",
"completed_at": null,
"progress_percentage": 45.0,
"current_step": "Enriching companies",
"processed_count": 45,
"total_count": 100,
"estimated_total_count": 100,
"last_updated": "2026-02-12T09:05:00Z",
"error_message": null,
"metrics": {
"row_count": 45,
"dataframe_type": "LEAD",
"processed_count": 45,
"total_count": 100
}
}
]
}
Status Values
| Status | Description |
|---|
| queued | Waiting to start |
| running | Currently executing |
| completed | Successfully finished |
| failed | Encountered an error |
| cancelled | Manually cancelled |
Polling Recommendations
- Poll every 5-10 seconds for running workflows
- Stop polling when
overall_status is completed, failed, or cancelled
- Use
overall_progress_percentage for progress bars
Cancel Run
Stop an in-progress workflow execution.
POST https://api.sixtyfour.ai/workflows/cancel
Query Parameters
| Name | Required | Description |
|---|
| job_id | Yes | The run job_id to cancel (from Run Workflow response) |
Request Body
Optional. Empty object {} or omit.
Response (200)
{
"job_id": "run_xyz789",
"status": "cancelled"
}
If the run has already completed, failed, or been cancelled, the API returns the current status without changes. Partial results may be available.
Download Results
Get signed download URLs for workflow results.
GET https://api.sixtyfour.ai/workflows/runs/{run_id}/results/download-links
Parameters
| Name | Location | Required | Description |
|---|
| run_id | path | Yes | The workflow run ID |
Response (200)
[
{
"filename": "results_block_1.csv",
"storage_bucket": "sixtyfour-results",
"row_count": 100,
"block_number": 1,
"created_at": "2026-02-12T09:15:00Z",
"message": null,
"download_url": "https://storage.googleapis.com/sixtyfour-results/signed-url-here",
"download_expires_in_seconds": 900
},
{
"filename": "enriched_results_final.csv",
"storage_bucket": "sixtyfour-results",
"row_count": 95,
"block_number": 3,
"created_at": "2026-02-12T09:15:30Z",
"message": "Final enriched results",
"download_url": "https://storage.googleapis.com/sixtyfour-results/signed-url-here",
"download_expires_in_seconds": 900
}
]
Signed URLs expire after 15 minutes (900 seconds). Download files immediately or request new links.
Each block may produce separate result files. Results are typically in CSV format.
Example Usage
import requests
import time
API_KEY = "your_api_key_here"
WORKFLOW_ID = "your_workflow_id_here" # Replace with your workflow ID
BASE_URL = "https://api.sixtyfour.ai"
headers = {"x-api-key": API_KEY, "Content-Type": "application/json"}
# Run workflow
run_response = requests.post(
f"{BASE_URL}/workflows/run?workflow_id={WORKFLOW_ID}",
headers=headers,
json={
"webhook_payload": [
{"company_name": "Acme Corp", "website": "acme.com"},
{"company_name": "TechStart", "website": "techstart.io"}
]
}
)
run_response.raise_for_status()
job_id = run_response.json()["job_id"]
# Poll until complete
while True:
status = requests.get(
f"{BASE_URL}/workflows/runs/{job_id}/live_status",
headers=headers
).json()
if status["overall_status"] in ["completed", "failed", "cancelled"]:
break
time.sleep(5)
# Download results
if status["overall_status"] == "completed":
links = requests.get(
f"{BASE_URL}/workflows/runs/{job_id}/results/download-links",
headers=headers
).json()
for r in links:
print(f"{r['filename']}: {r['download_url']}")