Skip to main content

Prerequisites

Before creating a workflow, set up:
  • A webhook to receive sync job events
  • A sync job defining what data to fetch
  • Connected accounts to run the workflow against

Create a Workflow

curl -X POST 'https://api.usehandled.io/api/v1/ipaas/workflow' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "label": "Start sync on connection",
    "trigger_name": "integrated_account:active",
    "config": {
      "run_if": "integration.name = '\''shiphero'\''",
      "steps": [
        {
          "type": "run",
          "action": "run_sync_job",
          "config": {
            "sync_job_id": "JOB_ID",
            "integrated_account_id": "{{integrated_account_id}}",
            "webhook_id": "WEBHOOK_ID"
          }
        }
      ]
    }
  }'

Configuration

Trigger

Currently supported: integrated_account:active

Conditions

Use run_if with JSONata expressions:
integration.name = 'shiphero'
Available data:
  • integration.name - Integration identifier
  • integrated_account_id - Account ID
  • tenant_id - Customer identifier

Steps

FieldDescription
typeStep type (run)
actionAction to perform (run_sync_job)
configAction parameters

Scheduled Execution

Add a cron expression for recurring runs:
{
  "steps": [
    {
      "type": "run",
      "action": "run_sync_job",
      "cron_expression": "0 */6 * * *",
      "config": {...}
    }
  ]
}
Cron expressions use UTC timezone.

Dynamic Configuration

Use JSONata for complex logic:
{
  "config": "(
    $sync_job_id := $mapValues(integration.name, {
      \"shiphero\": \"job-123\",
      \"deposco\": \"job-456\"
    });
    {
      \"sync_job_id\": $sync_job_id,
      \"integrated_account_id\": integrated_account_id,
      \"webhook_id\": \"webhook-789\"
    }
  )"
}