Compare Workflow Versions

Compare two deployment versions of the same workflow. Reports semantic changes, excluding canvas layout; credential-bearing values are withheld while their changes remain visible. Connections include stable block and port identifiers. The combined snapshots and the comparison result must each fit within 16 MiB.

OAuth scope: api:read.

GET/api/v2/workflows/{workflowId}/versions/compare
X-API-Key<token>

Your Sim API key, personal or workspace-scoped. Generate one under Settings, then API Keys. Operations that reject workspace keys say so in their own description.

In: header

Path Parameters

workflowId*string

Unique workflow identifier.

Length1 <= length

Query Parameters

base*integer

Deployment version to compare from.

Range0 < value <= 2147483647
target*integer

Deployment version to compare to, in the same workflow.

Range0 < value <= 2147483647

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://www.sim.ai/api/v2/workflows/3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36/versions/compare?base=1&target=1" \  -H "X-API-Key: YOUR_API_KEY"
{
  "data": {
    "workflowId": "3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36",
    "base": 1,
    "target": 2,
    "diff": {
      "addedBlocks": [],
      "removedBlocks": [],
      "modifiedBlocks": [],
      "edgeChanges": {
        "added": 0,
        "removed": 0,
        "addedDetails": [],
        "removedDetails": []
      },
      "loopChanges": {
        "added": 0,
        "removed": 0,
        "modified": 0
      },
      "parallelChanges": {
        "added": 0,
        "removed": 0,
        "modified": 0
      },
      "containerChanges": [],
      "variableChanges": {
        "added": 0,
        "removed": 0,
        "modified": 0,
        "addedNames": [],
        "removedNames": [],
        "modifiedNames": []
      },
      "hasChanges": false
    }
  }
}
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Invalid request"
  }
}
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication required"
  }
}
{
  "error": {
    "code": "FORBIDDEN",
    "message": "Insufficient workspace permissions",
    "details": {
      "code": "INSUFFICIENT_WORKSPACE_ROLE"
    }
  }
}
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Not found"
  }
}
{
  "error": {
    "code": "PAYLOAD_TOO_LARGE",
    "message": "Request body is too large"
  }
}
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "API rate limit exceeded",
    "details": {
      "retryAfter": "2026-01-01T00:00:30.000Z"
    }
  }
}
{
  "error": {
    "code": "INTERNAL_ERROR",
    "message": "Internal server error"
  }
}
{
  "error": {
    "code": "SERVICE_UNAVAILABLE",
    "message": "Service temporarily unavailable"
  }
}