> ## 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.

# Add Lookup Column

> ## 1️⃣ Overview

**Purpose:**
Adds one or more LOOKUP type columns to a specified table. A lookup column pulls field values from a linked (associated) table via an existing LINK column.

---

## 2️⃣ Endpoint

```
POST /noCo/api/v2/workspaces/{workspaceId}/tables/{tableId}/columns
```

---

## 3️⃣ Path Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| workspaceId | UUID | ✅ Yes | Workspace identifier |
| tableId | UUID | ✅ Yes | Table identifier where the lookup column will be created |

---

## 4️⃣ Authentication

Requires **Bearer JWT Token**

```
Authorization: Bearer <token>
```

---

## 5️⃣ Request Headers

| Header | Required |
| --- | --- |
| Authorization | ✅ Yes |
| Content-Type: application/json | ✅ Yes |

---

## 6️⃣ Request Body Schema

```json
{
  "columns": [
    {
      "description": "string",
      "uiMetadata": {
        "title": "string"
      },
      "uiDataType": "LOOKUP",
      "colOptions": {
        "linkColumnId": "uuid",
        "lookupColumnId": "uuid"
      },
      "name": "string"
    }
  ]
}
```

---

## 7️⃣ Field Descriptions

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| columns | array | ✅ Yes | Array of lookup column definitions to create |
| columns[].description | string | ❌ No | Optional description of the column |
| columns[].uiMetadata.title | string | ✅ Yes | Display name shown in the UI |
| columns[].uiDataType | string | ✅ Yes | Must be `LOOKUP` |
| columns[].colOptions.linkColumnId | UUID | ✅ Yes | ID of the existing LINK column connecting to the source table |
| columns[].colOptions.lookupColumnId | UUID | ✅ Yes | ID of the column in the linked table whose values should be looked up |
| columns[].name | string | ✅ Yes | Internal column name — must be unique within the table |

---

## 8️⃣ Example Request

```bash
curl -X POST https://be.datagol.ai/noCo/api/v2/workspaces/{workspaceId}/tables/{tableId}/columns \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
  "columns": [
    {
      "description": "",
      "uiMetadata": {
        "title": "Name (from People)"
      },
      "uiDataType": "LOOKUP",
      "colOptions": {
        "linkColumnId": "21224153-2f85-4b24-a306-4cfbc7e73f70",
        "lookupColumnId": "9b5e408d-69bb-42ca-8fa4-ba00f7994356"
      },
      "name": "name_1774285509977"
    }
  ]
}'
```

---

## 9️⃣ Behavior Summary

```
Creates one or more LOOKUP columns in the target table.
Supports:
• Batch creation of multiple lookup columns in one request
• linkColumnId — references the existing LINK column in the current table
• lookupColumnId — references the column from the linked table to display
• Column name must be unique within the table
```



## OpenAPI

````yaml /openapi/openapi.yaml post /noCo/api/v2/workspaces/{workspaceId}/tables/{tableId}/columns
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/{tableId}/columns:
    post:
      tags:
        - Links & Joins
      summary: Add Lookup Column
      description: >-
        ## 1️⃣ Overview


        **Purpose:**

        Adds one or more LOOKUP type columns to a specified table. A lookup
        column pulls field values from a linked (associated) table via an
        existing LINK column.


        ---


        ## 2️⃣ Endpoint


        ```

        POST /noCo/api/v2/workspaces/{workspaceId}/tables/{tableId}/columns

        ```


        ---


        ## 3️⃣ Path Parameters


        | Parameter | Type | Required | Description |

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

        | workspaceId | UUID | ✅ Yes | Workspace identifier |

        | tableId | UUID | ✅ Yes | Table identifier where the lookup column will
        be created |


        ---


        ## 4️⃣ Authentication


        Requires **Bearer JWT Token**


        ```

        Authorization: Bearer <token>

        ```


        ---


        ## 5️⃣ Request Headers


        | Header | Required |

        | --- | --- |

        | Authorization | ✅ Yes |

        | Content-Type: application/json | ✅ Yes |


        ---


        ## 6️⃣ Request Body Schema


        ```json

        {
          "columns": [
            {
              "description": "string",
              "uiMetadata": {
                "title": "string"
              },
              "uiDataType": "LOOKUP",
              "colOptions": {
                "linkColumnId": "uuid",
                "lookupColumnId": "uuid"
              },
              "name": "string"
            }
          ]
        }

        ```


        ---


        ## 7️⃣ Field Descriptions


        | Field | Type | Required | Description |

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

        | columns | array | ✅ Yes | Array of lookup column definitions to create
        |

        | columns[].description | string | ❌ No | Optional description of the
        column |

        | columns[].uiMetadata.title | string | ✅ Yes | Display name shown in
        the UI |

        | columns[].uiDataType | string | ✅ Yes | Must be `LOOKUP` |

        | columns[].colOptions.linkColumnId | UUID | ✅ Yes | ID of the existing
        LINK column connecting to the source table |

        | columns[].colOptions.lookupColumnId | UUID | ✅ Yes | ID of the column
        in the linked table whose values should be looked up |

        | columns[].name | string | ✅ Yes | Internal column name — must be
        unique within the table |


        ---


        ## 8️⃣ Example Request


        ```bash

        curl -X POST
        https://be.datagol.ai/noCo/api/v2/workspaces/{workspaceId}/tables/{tableId}/columns
        \

        -H "Authorization: Bearer <token>" \

        -H "Content-Type: application/json" \

        -d '{
          "columns": [
            {
              "description": "",
              "uiMetadata": {
                "title": "Name (from People)"
              },
              "uiDataType": "LOOKUP",
              "colOptions": {
                "linkColumnId": "21224153-2f85-4b24-a306-4cfbc7e73f70",
                "lookupColumnId": "9b5e408d-69bb-42ca-8fa4-ba00f7994356"
              },
              "name": "name_1774285509977"
            }
          ]
        }'

        ```


        ---


        ## 9️⃣ Behavior Summary


        ```

        Creates one or more LOOKUP columns in the target table.

        Supports:

        • Batch creation of multiple lookup columns in one request

        • linkColumnId — references the existing LINK column in the current
        table

        • lookupColumnId — references the column from the linked table to
        display

        • Column name must be unique within the table

        ```
      parameters:
        - name: workspaceId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Workspace identifier
        - name: tableId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Table identifier where the lookup column will be created
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - columns
              properties:
                columns:
                  type: array
                  items:
                    type: object
                    required:
                      - uiDataType
                      - uiMetadata
                      - colOptions
                      - name
                    properties:
                      description:
                        type: string
                      uiMetadata:
                        type: object
                        properties:
                          title:
                            type: string
                      uiDataType:
                        type: string
                        enum:
                          - LOOKUP
                      colOptions:
                        type: object
                        required:
                          - linkColumnId
                          - lookupColumnId
                        properties:
                          linkColumnId:
                            type: string
                            format: uuid
                            description: >-
                              ID of the existing LINK column in the current
                              table
                          lookupColumnId:
                            type: string
                            format: uuid
                            description: ID of the column in the linked table to look up
                      name:
                        type: string
            example:
              columns:
                - description: ''
                  uiMetadata:
                    title: lookup column
                  uiDataType: LOOKUP
                  colOptions:
                    linkColumnId: 21224153-2f85-4b24-a306-4cfbc7e73f70
                    lookupColumnId: 9b5e408d-69bb-42ca-8fa4-ba00f7994356
                  name: lookup_column
      responses:
        '200':
          description: Lookup column(s) created successfully
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |
        This API uses OAuth 2.0 with the authorization code grant flow.

````