> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.datagol.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Generate AI Column

> # Create AI Generated Column

## 1️⃣ Overview

**Purpose:**

Creates a new column in a specified workspace table. The column can optionally be AI-generated using a configured language model.

When `aiSettings.enabled = true`, the column becomes a computed AI column that auto-generates values based on a prompt and row data.

---

## 2️⃣ Endpoint

```
POST /noCo/api/v2/workspaces/{workspaceId}/tables/{workbookId}/column

 ```

### Path Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| workspaceId | UUID | ✅ Yes | ID of the workspace |
| tableId | UUID | ✅ Yes | ID of the target table |

---

## 3️⃣ Authentication

Requires **Bearer Token (JWT)**.

```
Authorization: Bearer <access_token>

 ```

### Required Permissions

User must have:

- `CREATE_DATASOURCE` or equivalent column creation permission
    
- Table edit access
    

---

## 4️⃣ Request Headers

| Header | Value |
| --- | --- |
| Content-Type | application/json |
| Authorization | Bearer token |

---

## 5️⃣ Request Body Schema

```
{  "name": "string",  "uiDataType": "SINGLE_LINE_TEXT | NUMBER | ...",  "description": "string",  "required": false,  "uiMetadata": {    "title": "string"  },  "settings": {    "aiSettings": {      "enabled": true,      "prompt": "string",      "model": "string",      "webAccess": false    }  }}

 ```

---

## 6️⃣ Field Descriptions

### Core Column Fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| name | string | ✅ | Internal column name |
| uiDataType | enum | ✅ | Data type of the column |
| description | string | ❌ | Column description |
| required | boolean | ❌ | Whether the column is mandatory |
| uiMetadata.title | string | ❌ | Display name in UI |

---

### 🤖 AI Settings (Optional)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| enabled | boolean | ✅ (if aiSettings present) | Enables AI computation |
| prompt | string | ✅ | Prompt used to generate values |
| model | string | ✅ | LLM model to use |
| webAccess | boolean | ❌ | Allows external web search (if supported) |

---

## 7️⃣ Behavior

### If `aiSettings.enabled = false`

- Column behaves as a standard manual input column.
    

### If `aiSettings.enabled = true`

- Column becomes computed.
    
- Value is generated automatically using:
    
    - Row context
        
    - Prompt
        
    - Selected model
        
- Users may not manually edit values (depending on system rules).
    
- Generation may trigger:
    
    - On row creation
        
    - On row update
        
    - On manual regeneration
        

---

## 8️⃣ Example – Create AI Column

```
curl -X POST \https://be.datagol.ai/noCo/api/v2/workspaces/{workspaceId}/tables/{tableId}/column \-H "Authorization: Bearer <token>" \-H "Content-Type: application/json" \-d &#x27;{  "name": "col",  "uiDataType": "SINGLE_LINE_TEXT",  "required": false,  "settings": {    "aiSettings": {      "enabled": true,      "prompt": "Extract first name from full name",      "model": "gpt-4o-mini",      "webAccess": false    }  }}&#x27;

 ```

---

## 9️⃣ Example Use Case

If table has:

| full_name |
| --- |
| John Smith |
| Alice Brown |

AI column prompt:

```
Extract first name from full name

 ```

Generated column:

| full_name | first_name |
| --- | --- |
| John Smith | John |
| Alice Brown | Alice |

---

## 🔟 Response (Example)

```
{  "id": "column-uuid",  "name": "col",  "uiDataType": "SINGLE_LINE_TEXT",  "aiEnabled": true,  "createdAt": "timestamp"}

 ```



## OpenAPI

````yaml /openapi/openapi.yaml post /noCo/api/v2/workspaces/{workspaceId}/tables/{workbookId}/column
openapi: 3.0.0
info:
  title: DataGOL APIs
  version: 1.0.0
  description: ''
servers:
  - url: https://be.datagol.ai
  - url: https://be.datagol.ai
  - url: https://kg.datagol.ai
  - url: https://ai.datagol.ai
security: []
tags:
  - name: Links & Joins
    description: >
      ## 🔗 Links & Joins


      LINK and LOOKUP are special workbook column types that enable relational
      data modeling across tables.


      | Column Type | Purpose |

      |---|---|

      | `LINK` | Defines a relationship between two tables |

      | `LOOKUP` | Projects columns from an associated table via a link |


      Both are configured through `ColumnDTO.colOptions`. A table can have
      multiple link columns, and each link can have multiple lookup columns.


      ---


      ## 📐 UI Data Types


      - **LINK** — Special column used to represent inter-table relations

      - **LOOKUP** — Special column used to project associated table fields via
      a link


      ---


      ## 🔗 LINK Semantics


      A LINK column stores metadata for:

      - `tableId` — Current table

      - `associatedTableId` — Associated (linked) table

      - `relationType` — Type of relationship

      - `linkColumnId` — Link column identifier


      **Supported relation patterns:**


      | Pattern | Description |

      |---|---|

      | `ONE_TO_ONE` | Each record in the source maps to one record in the
      destination |

      | `ONE_TO_MANY` | One source record maps to many destination records |

      | `MANY_TO_MANY` | Many source records map to many destination records |


      ---


      ## 🔍 LOOKUP Semantics


      - A LOOKUP column is tightly coupled with a specific LINK column

      - References a link using `linkColumnId`

      - Represents a selected column from the associated table

      - Multiple lookup columns can be defined for the same link


      ---


      ## 🗂️ Metadata in `ColumnDTO.colOptions`


      Use `colOptions` to persist link/lookup metadata.


      | Field | Description |

      |---|---|

      | `columnId` | Current column ID |

      | `tableId` | Current table ID |

      | `associatedTableId` | Associated table ID |

      | `linkColumnId` | Link column ID — used by LOOKUP; references the LINK
      column's `columnId` |

      | `relationType` | Relation semantics for LINK |


      ---


      ## 🔄 Manual Linking Record Flow


      To create manual record-level links:


      1. Fetch associated table schema/data

      2. User selects associated record(s) to link

      3. Send linking payload with:
          - `sourceRecordId` — PK of the current table row
          - `destinationRecordId` — PK of the associated table row
          - `linkColumnId` — LINK column identifier
      4. Backend resolves link metadata from `linkColumnId` (relation type,
      associated table, direction/constraints)

      5. Backend applies relation rules and stores the link relation


      ---


      ## 📋 Record Linking Contract


      | Field | Description |

      |---|---|

      | `sourceRecordId` | PK of the current table row |

      | `destinationRecordId` | PK of the associated table row |

      | `linkColumnId` | LINK column identifier |

      | `tableId` | Current table ID |


      > Backend derives all remaining relation metadata from the link
      configuration.


      ---


      ## ⚠️ Important Notes


      > - LINK and LOOKUP are **column-level constructs** first; record linking
      is a data-level operation built on top

      > - LOOKUP behavior depends on LINK existence and metadata integrity

      > - With multiple links to the same associated table, each LOOKUP must
      bind to the correct `linkColumnId`

      > - Always treat the associated row ID as the associated table PK for
      linking UI selection
paths:
  /noCo/api/v2/workspaces/{workspaceId}/tables/{workbookId}/column:
    parameters:
      - name: workspaceId
        in: path
        required: true
        schema:
          type: string
        example: '{{workspaceId}}'
      - name: workbookId
        in: path
        required: true
        schema:
          type: string
        example: '{{workbookId}}'
    post:
      tags:
        - WorkBook
      summary: Generate AI Column
      description: >-
        # Create AI Generated Column


        ## 1️⃣ Overview


        **Purpose:**


        Creates a new column in a specified workspace table. The column can
        optionally be AI-generated using a configured language model.


        When `aiSettings.enabled = true`, the column becomes a computed AI
        column that auto-generates values based on a prompt and row data.


        ---


        ## 2️⃣ Endpoint


        ```

        POST /noCo/api/v2/workspaces/{workspaceId}/tables/{workbookId}/column

         ```

        ### Path Parameters


        | Parameter | Type | Required | Description |

        | --- | --- | --- | --- |

        | workspaceId | UUID | ✅ Yes | ID of the workspace |

        | tableId | UUID | ✅ Yes | ID of the target table |


        ---


        ## 3️⃣ Authentication


        Requires **Bearer Token (JWT)**.


        ```

        Authorization: Bearer <access_token>

         ```

        ### Required Permissions


        User must have:


        - `CREATE_DATASOURCE` or equivalent column creation permission
            
        - Table edit access
            

        ---


        ## 4️⃣ Request Headers


        | Header | Value |

        | --- | --- |

        | Content-Type | application/json |

        | Authorization | Bearer token |


        ---


        ## 5️⃣ Request Body Schema


        ```

        {  "name": "string",  "uiDataType": "SINGLE_LINE_TEXT | NUMBER | ...", 
        "description": "string",  "required": false,  "uiMetadata": {   
        "title": "string"  },  "settings": {    "aiSettings": {      "enabled":
        true,      "prompt": "string",      "model": "string",      "webAccess":
        false    }  }}

         ```

        ---


        ## 6️⃣ Field Descriptions


        ### Core Column Fields


        | Field | Type | Required | Description |

        | --- | --- | --- | --- |

        | name | string | ✅ | Internal column name |

        | uiDataType | enum | ✅ | Data type of the column |

        | description | string | ❌ | Column description |

        | required | boolean | ❌ | Whether the column is mandatory |

        | uiMetadata.title | string | ❌ | Display name in UI |


        ---


        ### 🤖 AI Settings (Optional)


        | Field | Type | Required | Description |

        | --- | --- | --- | --- |

        | enabled | boolean | ✅ (if aiSettings present) | Enables AI computation
        |

        | prompt | string | ✅ | Prompt used to generate values |

        | model | string | ✅ | LLM model to use |

        | webAccess | boolean | ❌ | Allows external web search (if supported) |


        ---


        ## 7️⃣ Behavior


        ### If `aiSettings.enabled = false`


        - Column behaves as a standard manual input column.
            

        ### If `aiSettings.enabled = true`


        - Column becomes computed.
            
        - Value is generated automatically using:
            
            - Row context
                
            - Prompt
                
            - Selected model
                
        - Users may not manually edit values (depending on system rules).
            
        - Generation may trigger:
            
            - On row creation
                
            - On row update
                
            - On manual regeneration
                

        ---


        ## 8️⃣ Example – Create AI Column


        ```

        curl -X POST
        \https://be.datagol.ai/noCo/api/v2/workspaces/{workspaceId}/tables/{tableId}/column
        \-H "Authorization: Bearer <token>" \-H "Content-Type: application/json"
        \-d &#x27;{  "name": "col",  "uiDataType": "SINGLE_LINE_TEXT", 
        "required": false,  "settings": {    "aiSettings": {      "enabled":
        true,      "prompt": "Extract first name from full name",      "model":
        "gpt-4o-mini",      "webAccess": false    }  }}&#x27;

         ```

        ---


        ## 9️⃣ Example Use Case


        If table has:


        | full_name |

        | --- |

        | John Smith |

        | Alice Brown |


        AI column prompt:


        ```

        Extract first name from full name

         ```

        Generated column:


        | full_name | first_name |

        | --- | --- |

        | John Smith | John |

        | Alice Brown | Alice |


        ---


        ## 🔟 Response (Example)


        ```

        {  "id": "column-uuid",  "name": "col",  "uiDataType":
        "SINGLE_LINE_TEXT",  "aiEnabled": true,  "createdAt": "timestamp"}

         ```
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                uiDataType:
                  type: string
                description:
                  type: string
                uiMetadata:
                  type: object
                  properties:
                    title:
                      type: string
                settings:
                  type: object
                  properties:
                    aiSettings:
                      type: object
                      properties:
                        enabled:
                          type: boolean
                        prompt:
                          type: string
                        model:
                          type: string
                        webAccess:
                          type: boolean
                name:
                  type: string
            example:
              uiDataType: SINGLE_LINE_TEXT
              description: ''
              uiMetadata:
                title: col
              settings:
                aiSettings:
                  enabled: true
                  prompt: Extract from name and create a col
                  model: gpt-4o-mini
                  webAccess: false
              name: col
      responses:
        '200':
          description: Generate AI Column
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |
        This API uses OAuth 2.0 with the authorization code grant flow.

````