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.
/api/v2/workflows/{workflowId}/versions/compareYour 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
Unique workflow identifier.
1 <= lengthQuery Parameters
Deployment version to compare from.
0 < value <= 2147483647Deployment version to compare to, in the same workflow.
0 < value <= 2147483647Response 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"
}
}