Skip to main content

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.

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.

API Reference

See the full request/response schema and parameters in the API Reference.

Pricing

See Credits & Pricing Guide for credit costs.

Errors

For error responses (400, 403, 404, 409, etc.), see Handling Errors.

Run workflow

Execute a workflow and receive a job ID for tracking.
POST https://api.sixtyfour.ai/workflows/run
Pass workflow_id as a query parameter. The optional request body accepts specs_override (to override the first block’s specs for dynamic inputs) and webhook_payload (input data for workflows starting with a webhook block).
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. See Incoming Webhooks for the full spec.

Example Request

{
  "webhook_payload": [
    {
      "company_name": "Acme Corp",
      "website": "acme.com",
      "industry": "Technology"
    },
    {
      "company_name": "TechStart Inc",
      "website": "techstart.io",
      "industry": "Software"
    }
  ]
}
Use the job_id returned in the response 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 — see Incoming Webhooks.

List workflow runs

Get execution history for your workflows.
GET https://api.sixtyfour.ai/workflows/runs
Optional query parameters: status (running, completed, cancelled, or active), workflow_id, and limit (1–500, default 100). Results are sorted by most recent first (queued_at descending). For failed runs, error_message and status_reason may be populated.

Get live status

Monitor real-time progress of a running workflow.
GET https://api.sixtyfour.ai/workflows/runs/{run_id}/live_status
run_id is the same as the job_id returned by Run Workflow.

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
Pass job_id (from the Run Workflow response) as a query parameter. The request body is optional — send an empty object {} or omit.
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
Returns one entry per result file. Each block may produce separate files; results are typically in CSV format.
Signed URLs expire after 15 minutes (900 seconds). Download files immediately or request new links.

Example usage

import requests
import time

API_KEY = "YOUR_API_KEY"
WORKFLOW_ID = "YOUR_WORKFLOW_ID"
BASE_URL = "https://api.sixtyfour.ai"
headers = {"x-api-key": API_KEY, "Content-Type": "application/json"}

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"]

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)

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