---
title: "POST /base/{baseId}/node"
method: POST
path: "/base/{baseId}/node"
tags: ["base node"]
---

# POST /base/{baseId}/node

`POST /base/{baseId}/node`

Create a hierarchical node for a base

## Path parameters

- `baseId` string, required

## Request body

- union
  - object
    - `resourceType` 'folder', required
    - `parentId` string, nullable
    - `name` string, required
  - object
    - `resourceType` 'table', required
    - `parentId` string, nullable
    - `name` string
    - `dbTableName` string — Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the base.
    - `description` string, nullable — The description of the table.
    - `icon` string, emoji, nullable — The emoji icon string of the table.
    - `fields` object[], required — The fields of the table. If it is empty, 3 fields include SingleLineText, Number, SingleSelect will and 3 empty records be generated by default.
      - `type` 'singleLineText' | 'longText' | 'user' | 'attachment' | 'checkbox' | 'multipleSelect' | 'singleSelect' | 'date' | 'number' | 'rating' | 'formula' | 'rollup' | 'conditionalRollup' | 'link' | 'createdTime' | 'lastModifiedTime' | 'createdBy' | 'lastModifiedBy' | 'autoNumber' | 'button', required — The field types supported by teable.
      - `name` string
      - `unique` boolean — Whether this field is not unique.
      - `notNull` boolean — Whether this field is not null.
      - `dbFieldName` string — Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table.
      - `isLookup` boolean — Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table.
      - `isConditionalLookup` boolean — Whether this lookup field applies a conditional filter when resolving linked records.
      - `description` string, nullable — The description of the field.
      - `lookupOptions` union — The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup.
        - object
          - `foreignTableId` string, required — the table this field is linked to
          - `lookupFieldId` string, required — the field in the foreign table that will be displayed as the current field
          - `linkFieldId` string, required — The id of Linked record field to use for lookup
          - `filter` object — A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.
        - object
          - `baseId` string — the base id of the table that this field is linked to, only required for cross base link
          - `foreignTableId` string, required — the table this field is linked to
          - `lookupFieldId` string, required — the field in the foreign table that will be displayed as the current field
          - `filter` object, required — Filter to apply when resolving conditional lookup values.
          - `sort` object — Optional sort configuration applied before aggregating lookup values.
            - `fieldId` string, required — The field in the foreign table used to order lookup records.
            - `order` 'asc' | 'desc', required — Ordering direction to apply to the sorted field.
          - `limit` integer — Maximum number of matching records to include in the lookup result.
      - `options` union — The options of the field. The configuration of the field's options depend on the it's specific type.
        - object
          - `expression` 'countall({values})' | 'counta({values})' | 'count({values})' | 'sum({values})' | 'average({values})' | 'max({values})' | 'min({values})' | 'and({values})' | 'or({values})' | 'xor({values})' | 'array_join({values})' | 'array_unique({values})' | 'array_compact({values})' | 'concatenate({values})', required
          - `timeZone` string — The time zone that should be used to format dates
          - `formatting` unknown
          - `showAs` union — According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized "show as"
            - object
              - …
            - object
              - …
            - object
              - …
        - object
          - `expression` 'countall({values})' | 'counta({values})' | 'count({values})' | 'sum({values})' | 'average({values})' | 'max({values})' | 'min({values})' | 'and({values})' | 'or({values})' | 'xor({values})' | 'array_join({values})' | 'array_unique({values})' | 'array_compact({values})' | 'concatenate({values})', required
          - `timeZone` string — The time zone that should be used to format dates
          - `formatting` unknown
          - `showAs` union — According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized "show as"
            - object
              - …
            - object
              - …
            - object
              - …
          - `baseId` string
          - `foreignTableId` string
          - `lookupFieldId` string
          - `filter` object — A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.
          - `sort` object
            - `fieldId` string, required
            - `order` 'asc' | 'desc', required
          - `limit` integer
        - object
          - `expression` string, required — The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API.
          - `timeZone` string — The time zone that should be used to format dates
          - `formatting` unknown
          - `showAs` union — According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized "show as"
            - object
              - …
            - object
              - …
            - object
              - …
        - object
          - `baseId` string — the base id of the table that this field is linked to, only required for cross base link
          - `relationship` 'oneOne' | 'manyMany' | 'oneMany' | 'manyOne', required — describe the relationship from this table to the foreign table
          - `foreignTableId` string, required — the table this field is linked to
          - `lookupFieldId` string, required — the field in the foreign table that will be displayed as the current field
          - `isOneWay` boolean — whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance
          - `fkHostTableName` string, required — the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed
          - `selfKeyName` string, required — the name of the field that stores the current table primary key
          - `foreignKeyName` string, required — The name of the field that stores the foreign table primary key
          - `symmetricFieldId` string — the symmetric field in the foreign table, empty if the field is a one-way link
          - `filterByViewId` string, nullable — the view id that limits the number of records in the link field
          - `visibleFieldIds` string[], nullable — the fields that will be displayed in the link field
          - `filter` object — A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.
        - object
          - `formatting` object, required — caveat: the formatting is just a formatter, it dose not effect the storing value of the record
            - `date` string, required — the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD
            - `time` 'HH:mm' | 'hh:mm A' | 'None', required — the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None
            - `timeZone` string, required — The time zone that should be used to format dates
          - `defaultValue` 'now', nullable — Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record
        - object
          - `defaultValue` boolean, nullable
        - object
        - object
          - `showAs` object — Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true
            - `type` 'url' | 'email' | 'phone', required — can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab
          - `defaultValue` string, nullable
        - object
          - `icon` 'star' | 'moon' | 'sun' | 'zap' | 'flame' | 'heart' | 'apple' | 'thumb-up', required
          - `color` 'yellowBright' | 'redBright' | 'tealBright', required
          - `max` integer, required
        - object
          - `isMultiple` boolean — Allow adding multiple users
          - `shouldNotify` boolean — Notify users when their name is added to a cell
          - `defaultValue` union
            - string
            - 'me'
            - union[]
              - …
            - unknown
        - object
        - object
          - `trackedFieldIds` string[]
        - object
          - `label` string, required — Button label
          - `color` 'blueLight2' | 'blueLight1' | 'blueBright' | 'blue' | 'blueDark1' | 'cyanLight2' | 'cyanLight1' | 'cyanBright' | 'cyan' | 'cyanDark1' | 'grayLight2' | 'grayLight1' | 'grayBright' | 'gray' | 'grayDark1' | 'greenLight2' | 'greenLight1' | 'greenBright' | 'green' | 'greenDark1' | 'orangeLight2' | 'orangeLight1' | 'orangeBright' | 'orange' | 'orangeDark1' | 'pinkLight2' | 'pinkLight1' | 'pinkBright' | 'pink' | 'pinkDark1' | 'purpleLight2' | 'purpleLight1' | 'purpleBright' | 'purple' | 'purpleDark1' | 'redLight2' | 'redLight1' | 'redBright' | 'red' | 'redDark1' | 'tealLight2' | 'tealLight1' | 'tealBright' | 'teal' | 'tealDark1' | 'yellowLight2' | 'yellowLight1' | 'yellowBright' | 'yellow' | 'yellowDark1', required — Button color
          - `maxCount` number — Max count of button clicks
          - `resetCount` boolean — Reset count
          - `workflow` object, nullable — Workflow
            - `id` string — Workflow ID
            - `name` string — Workflow Name
            - `isActive` boolean — Workflow is active
          - `confirm` object, nullable — Confirm config before click
            - `title` string
            - `description` string
            - `confirmText` string
        - object
          - `expression` 'countall({values})' | 'counta({values})' | 'count({values})' | 'sum({values})' | 'average({values})' | 'max({values})' | 'min({values})' | 'and({values})' | 'or({values})' | 'xor({values})' | 'array_join({values})' | 'array_unique({values})' | 'array_compact({values})' | 'concatenate({values})', required
          - `timeZone` string — The time zone that should be used to format dates
          - `formatting` unknown
          - `showAs` union — According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized "show as"
            - object
              - …
            - object
              - …
            - object
              - …
          - `baseId` string
          - `foreignTableId` string
          - `lookupFieldId` string
          - `filter` object — A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.
          - `sort` object
            - `fieldId` string, required
            - `order` 'asc' | 'desc', required
          - `limit` integer
        - object
          - `baseId` string — the base id of the table that this field is linked to, only required for cross base link
          - `relationship` 'oneOne' | 'manyMany' | 'oneMany' | 'manyOne', required — describe the relationship from this table to the foreign table
          - `foreignTableId` string, required — the table this field is linked to
          - `isOneWay` boolean — whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance
          - `filterByViewId` string, nullable — the view id that limits the number of records in the link field
          - `visibleFieldIds` string[], nullable — the fields that will be displayed in the link field
          - `filter` object — A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.
          - `lookupFieldId` string
        - object
          - `choices` object[], required
            - `id` string
            - `name` string, required
            - `color` string
          - `defaultValue` union
            - string
            - string[]
            - unknown
          - `preventAutoNewOptions` boolean
        - object
          - `formatting` union — Only be used in number field (number field or formula / rollup field with cellValueType equals Number
            - object
              - …
            - object
              - …
            - object
              - …
          - `showAs` union — Only be used in number field (number field or formula / rollup field with cellValueType equals Number
            - object
              - …
            - object
              - …
          - `defaultValue` number, nullable
        - object
        - object
          - `formatting` object, required — caveat: the formatting is just a formatter, it dose not effect the storing value of the record
            - `date` string, required — the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD
            - `time` 'HH:mm' | 'hh:mm A' | 'None', required — the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None
            - `timeZone` string, required — The time zone that should be used to format dates
        - object
          - `expression` 'LAST_MODIFIED_TIME()'
          - `formatting` object — caveat: the formatting is just a formatter, it dose not effect the storing value of the record
            - `date` string, required — the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD
            - `time` 'HH:mm' | 'hh:mm A' | 'None', required — the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None
            - `timeZone` string, required — The time zone that should be used to format dates
          - `trackedFieldIds` string[]
        - object
          - `showAs` union — According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized "show as"
            - object
              - …
            - object
              - …
            - object
              - …
          - `formatting` unknown
      - `aiConfig` union — The AI configuration of the field.
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'extraction', required
          - `sourceFieldId` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'summary', required
          - `sourceFieldId` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'translation', required
          - `sourceFieldId` string, required
          - `targetLanguage` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'improvement', required
          - `sourceFieldId` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'customization', required
          - `prompt` string, required — The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: "Summarize the content of {fieldId} into 100 words"
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'classification', required
          - `sourceFieldId` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'customization', required
          - `prompt` string, required
          - `onlyAllowConfiguredOptions` boolean
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'tag', required
          - `sourceFieldId` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'customization', required
          - `prompt` string, required
          - `onlyAllowConfiguredOptions` boolean
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `n` number
          - `size` string
          - `quality` 'low' | 'medium' | 'high'
          - `aspectRatio` string
          - `resolution` '1K' | '2K' | '4K'
          - `type` 'imageGeneration', required
          - `sourceFieldId` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `n` number
          - `size` string
          - `quality` 'low' | 'medium' | 'high'
          - `aspectRatio` string
          - `resolution` '1K' | '2K' | '4K'
          - `type` 'imageCustomization', required
          - `prompt` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'rating', required
          - `sourceFieldId` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'customization', required
          - `prompt` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'extraction', required
          - `sourceFieldId` string, required
        - object
          - `modelKey` string, required
          - `isAutoFill` boolean, nullable
          - `attachPrompt` string
          - `type` 'customization', required
          - `prompt` string, required
        - unknown
      - `id` string — The id of the field that start with "fld", followed by exactly 16 alphanumeric characters `/^fld[\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time
      - `order` object
        - `viewId` string, required — You can only specify order in one view when create field
        - `orderIndex` number, required
    - `views` object[], required — The views of the table. If it is empty, a grid view will be generated by default.
      - `name` string
      - `type` 'grid' | 'calendar' | 'kanban' | 'form' | 'gallery' | 'plugin', required
      - `description` string
      - `order` number
      - `options` union
        - object
          - `rowHeight` 'short' | 'medium' | 'tall' | 'extraTall' | 'autoFit' — The row height level of row in view
          - `fieldNameDisplayLines` number — The field name display lines in view
          - `frozenColumnCount` number — The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect.
          - `frozenFieldId` string — Freeze to the right side of this field id in grid view
        - object
          - `stackFieldId` string — The field id of the Kanban stack.
          - `coverFieldId` string, nullable — The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card.
          - `isCoverFit` boolean — If true, cover images are resized to fit Kanban cards.
          - `isFieldNameHidden` boolean — If true, hides field name in the Kanban cards.
          - `isEmptyStackHidden` boolean — If true, hides empty stacks in the Kanban.
        - object
          - `coverFieldId` string, nullable — The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card.
          - `isCoverFit` boolean — If true, cover images are resized to fit gallery cards.
          - `isFieldNameHidden` boolean — If true, hides field name in the gallery cards.
        - object
          - `startDateFieldId` string, nullable — The start date field id.
          - `endDateFieldId` string, nullable — The end date field id.
          - `titleFieldId` string, nullable — The title field id.
          - `colorConfig` object, nullable
            - `type` 'field' | 'custom', required
            - `fieldId` string, nullable — The color field id.
            - `color` 'blueLight2' | 'blueLight1' | 'blueBright' | 'blue' | 'blueDark1' | 'cyanLight2' | 'cyanLight1' | 'cyanBright' | 'cyan' | 'cyanDark1' | 'grayLight2' | 'grayLight1' | 'grayBright' | 'gray' | 'grayDark1' | 'greenLight2' | 'greenLight1' | 'greenBright' | 'green' | 'greenDark1' | 'orangeLight2' | 'orangeLight1' | 'orangeBright' | 'orange' | 'orangeDark1' | 'pinkLight2' | 'pinkLight1' | 'pinkBright' | 'pink' | 'pinkDark1' | 'purpleLight2' | 'purpleLight1' | 'purpleBright' | 'purple' | 'purpleDark1' | 'redLight2' | 'redLight1' | 'redBright' | 'red' | 'redDark1' | 'tealLight2' | 'tealLight1' | 'tealBright' | 'teal' | 'tealDark1' | 'yellowLight2' | 'yellowLight1' | 'yellowBright' | 'yellow' | 'yellowDark1', nullable — The color.
        - object
          - `coverUrl` string — The cover url of the form
          - `logoUrl` string — The logo url of the form
          - `submitLabel` string — The submit button text of the form
        - object
          - `pluginId` string, required — The plugin id
          - `pluginInstallId` string, required — The plugin install id
          - `pluginLogo` string, required — The plugin logo
      - `sort` object, nullable
        - `sortObjs` object[], required
          - `fieldId` string, required — The id of the field.
          - `order` 'asc' | 'desc', required
        - `manualSort` boolean
      - `filter` object — A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.
      - `group` object[], nullable
        - `fieldId` string, required — The id of the field.
        - `order` 'asc' | 'desc', required
      - `isLocked` boolean
      - `shareId` string
      - `enableShare` boolean
      - `shareMeta` object
        - `allowCopy` boolean
        - `includeHiddenField` boolean
        - `password` string
        - `includeRecords` boolean
        - `submit` object
          - `allow` boolean
          - `requireLogin` boolean
      - `columnMeta` object — A mapping of view IDs to their corresponding column metadata.
    - `records` object[] — The record data of the table. If it is empty, 3 empty records will be generated by default.
      - `fields` object, required — Objects with a fields key mapping fieldId or field name to value for that field.
    - `order` number
    - `fieldKeyType` 'id' | 'name' | 'dbFieldName' — Define the key type of record.fields[key], You can click "systemInfo" in the field edit box to get fieldId or enter the table design screen with all the field details
  - object
    - `resourceType` 'dashboard', required
    - `parentId` string, nullable
    - `name` string, required
  - object
    - `resourceType` 'workflow', required
    - `parentId` string, nullable
    - `name` string, required
  - object
    - `resourceType` 'app', required
    - `parentId` string, nullable
    - `name` string, required

## Response `200`

Created node

- union
  - object
    - `id` string, required
    - `parentId` string, nullable, required
    - `resourceId` string, required
    - `order` number, required
    - `defaultUrl` string
    - `parent` object, nullable
      - `id` string, required
    - `children` object[], nullable
      - `id` string, required
      - `order` number, required
    - `resourceType` 'table', required
    - `resourceMeta` object, required
      - `name` string, required
      - `icon` string, nullable
      - `defaultViewId` string, nullable
  - object
    - `id` string, required
    - `parentId` string, nullable, required
    - `resourceId` string, required
    - `order` number, required
    - `defaultUrl` string
    - `parent` object, nullable
      - `id` string, required
    - `children` object[], nullable
      - `id` string, required
      - `order` number, required
    - `resourceType` 'dashboard', required
    - `resourceMeta` object, required
      - `name` string, required
      - `icon` string, nullable
  - object
    - `id` string, required
    - `parentId` string, nullable, required
    - `resourceId` string, required
    - `order` number, required
    - `defaultUrl` string
    - `parent` object, nullable
      - `id` string, required
    - `children` object[], nullable
      - `id` string, required
      - `order` number, required
    - `resourceType` 'workflow', required
    - `resourceMeta` object, required
      - `name` string, required
      - `icon` string, nullable
      - `isActive` boolean, nullable
  - object
    - `id` string, required
    - `parentId` string, nullable, required
    - `resourceId` string, required
    - `order` number, required
    - `defaultUrl` string
    - `parent` object, nullable
      - `id` string, required
    - `children` object[], nullable
      - `id` string, required
      - `order` number, required
    - `resourceType` 'app', required
    - `resourceMeta` object, required
      - `name` string, required
      - `icon` string, nullable
      - `publicUrl` string, nullable
      - `publishedVersion` number, nullable
  - object
    - `id` string, required
    - `parentId` string, nullable, required
    - `resourceId` string, required
    - `order` number, required
    - `defaultUrl` string
    - `parent` object, nullable
      - `id` string, required
    - `children` object[], nullable
      - `id` string, required
      - `order` number, required
    - `resourceType` 'folder', required
    - `resourceMeta` object, required
      - `name` string, required
      - `icon` string, nullable

---

[API](https://skmtc.net/teable/apis/teable-app.md) · [All operations](https://skmtc.net/teable/apis/teable-app/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/teable/teable-app/revisions/7515f3b33d79/schema)
