Skip to main content

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.

Headers

NameTypeRequiredDescription
x-api-keystringYesYour Sixtyfour API key
Content-TypestringFor POST with bodyapplication/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

NameRequiredDescription
workflow_idYesThe workflow to execute

Request Body (Optional)

FieldTypeDescription
specs_overrideobjectOverride specs of the first block (useful for dynamic inputs). See the workflow editor’s “Workflow API Reference” for block-specific options.
webhook_payloadarray or objectInput 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

NameRequiredDescription
statusNoFilter: running, completed, cancelled, or active (queued + running). Omit to return all runs including failed.
workflow_idNoFilter by specific workflow ID. Verifies the workflow exists and caller has access.
limitNoNumber 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

NameLocationRequiredDescription
run_idpathYesThe 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

StatusDescription
queuedWaiting to start
runningCurrently executing
completedSuccessfully finished
failedEncountered an error
cancelledManually 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

NameRequiredDescription
job_idYesThe 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

NameLocationRequiredDescription
run_idpathYesThe 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']}")