Add Workflow Group

Bind a workflow or enrichment to the table and create the columns populated by its outputs. An output whose column the table already has attaches that column to the group instead of creating it, so outputColumns may be omitted when every output lands in an existing column.

OAuth scope: api:write.

POST/api/v2/tables/{tableId}/groups
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

tableId*string

Unique table identifier.

Length1 <= length

Request Body

application/json

Workspace scope, producer definition, and output columns.

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://www.sim.ai/api/v2/tables/string/groups" \  -H "X-API-Key: YOUR_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64",    "group": {      "workflowId": "3b1f7c92-8d4e-4a6b-9c0d-5e2f8a714b36",      "name": "Enrich company",      "outputs": [        {          "blockId": "block_lookup",          "path": "output.revenue",          "columnName": "revenue"        }      ]    },    "outputColumns": [      {        "name": "revenue",        "type": "number"      }    ]  }'
{
  "data": {
    "group": {
      "id": "string",
      "workflowId": "string",
      "enrichmentId": "string",
      "name": "string",
      "type": "manual",
      "dependencies": {
        "columns": [
          "string"
        ]
      },
      "outputs": [
        {
          "blockId": "string",
          "path": "string",
          "outputId": "string",
          "columnName": "string"
        }
      ],
      "inputMappings": [
        {
          "inputName": "string",
          "columnName": "string"
        }
      ],
      "deploymentMode": "live",
      "autoRun": true
    },
    "columns": [
      {
        "id": "string",
        "name": "string",
        "type": "string",
        "required": false,
        "unique": false,
        "workflowGroupId": "string",
        "options": [
          {
            "id": "string",
            "name": "string"
          }
        ],
        "multiple": true,
        "currencyCode": "string"
      }
    ]
  }
}
{
  "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": "UNSUPPORTED_MEDIA_TYPE",
    "message": "Request body must be sent as application/json"
  }
}
{
  "error": {
    "code": "LOCKED",
    "message": "This table is insert-locked: new rows cannot be added.",
    "details": {
      "lock": "insert"
    }
  }
}
{
  "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"
  }
}